diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C
index 799ba09..3aff004 100644
--- a/src/OpenFOAM/db/Time/Time.C
+++ b/src/OpenFOAM/db/Time/Time.C
@@ -1097,45 +1097,51 @@ Foam::Time& Foam::Time::operator++()
 
 
     // Time value obtained by reading timeName
-    scalar timeNameValue;
+    scalar timeNameValue = -VGREAT;
+    scalar errorMargin = max(min(pow(10.0, -precision_), deltaT_*0.1), SMALL);
 
     // Check that new time representation differs from old one
     // reinterpretation of the word
     if
     (
-        readScalar(dimensionedScalar::name().c_str(), timeNameValue)
-     && (mag(timeNameValue - oldTimeValue - deltaT_) > 100*SMALL)
+        readScalar(dimensionedScalar::name().c_str(), timeNameValue)  
+     && (mag(timeNameValue - oldTimeValue - deltaT_) > errorMargin)
     )
     {
+
         int oldPrecision = precision_;
-        do
+        for
+        (
+          /* no init */ ;
+            precision_ < maxPrecision_
+         && readScalar(dimensionedScalar::name().c_str(), timeNameValue)
+         && (mag(timeNameValue - oldTimeValue - deltaT_) > errorMargin) ;
+          /* no iter */
+        )
         {
             precision_++;
             setTime(value(), timeIndex());
         }
-        while
-        (
-            precision_ < maxPrecision_
-         && readScalar(dimensionedScalar::name().c_str(), timeNameValue)
-         && (mag(timeNameValue - oldTimeValue - deltaT_) > 100*SMALL)
-        );
 
-        WarningIn("Time::operator++()")
-            << "Increased the timePrecision from " << oldPrecision
-            << " to " << precision_
-            << " to distinguish between timeNames at time "
-            << dimensionedScalar::name()
-            << endl;
-
-        if (precision_ == maxPrecision_ && precision_ != oldPrecision)
+        if(precision_ != oldPrecision)
         {
-            // Reached maxPrecision limit
             WarningIn("Time::operator++()")
-                << "Current time name " << dimensionedScalar::name()
-                << " is the old as the previous one " << oldTimeName
-                << endl
-                << "    This might result in overwriting old results."
+                << "Increased the timePrecision from " << oldPrecision
+                << " to " << precision_
+                << " to distinguish between timeNames at time "
+                << dimensionedScalar::name()
                 << endl;
+
+            if (precision_ == maxPrecision_)
+            {
+                // Reached maxPrecision limit
+                WarningIn("Time::operator++()")
+                    << "Current time name " << dimensionedScalar::name()
+                    << " is the old as the previous one " << oldTimeName
+                    << endl
+                    << "    This might result in overwriting old results."
+                    << endl;
+            }
         }
     }
 
