diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C
index 94c8b9c..74d14ea 100644
--- a/src/OpenFOAM/db/Time/Time.C
+++ b/src/OpenFOAM/db/Time/Time.C
@@ -1026,8 +1026,15 @@ Foam::Time& Foam::Time::operator++()
     deltaT0_ = deltaTSave_;
     deltaTSave_ = deltaT_;
 
+    // Save old time value
+    const scalar oldTimeValue = value();
+    
     // Save old time name
     const word oldTimeName = dimensionedScalar::name();
+    
+    // Initialize the re-reading value from word
+    // Note: will result in 100 precision in case of constant failure to read
+    scalar rereadTimeValue = -VGREAT;
 
     setTime(value() + deltaT_, timeIndex_ + 1);
 
@@ -1040,9 +1047,13 @@ Foam::Time& Foam::Time::operator++()
         }
     }
 
-
-    // Check that new time representation differs from old one
-    if (dimensionedScalar::name() == oldTimeName)
+    // Check that new time representation differs from old one, through
+    // reinterpretation of the word
+    if (
+        readScalar(dimensionedScalar::name().c_str(), rereadTimeValue)
+        &&
+        (mag(rereadTimeValue - oldTimeValue - deltaT_) > sqrt(SMALL))
+       )
     {
         int oldPrecision = precision_;
         do
@@ -1050,7 +1061,13 @@ Foam::Time& Foam::Time::operator++()
             precision_++;
             setTime(value(), timeIndex());
         }
-        while (precision_ < 100 && dimensionedScalar::name() == oldTimeName);
+        while (
+               precision_ < 100
+               && 
+               readScalar(dimensionedScalar::name().c_str(), rereadTimeValue)
+               &&
+               (mag(rereadTimeValue - oldTimeValue - deltaT_) > sqrt(SMALL))
+              );
 
         WarningIn("Time::operator++()")
             << "Increased the timePrecision from " << oldPrecision
