diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C
index 3a14d5968ecc56d5f0a1e1010f7ca56ec21e059b..c8861aa08f82bee569e9df536ed4a0b8979b70b3 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobject.C
+++ b/src/OpenFOAM/db/regIOobject/regIOobject.C
@@ -325,7 +325,9 @@ bool Foam::regIOobject::checkOut()
 
 bool Foam::regIOobject::upToDate(const regIOobject& a) const
 {
-    if (a.eventNo() >= eventNo_)
+    label da = a.eventNo()-eventNo_;
+
+    if (da >= 0 && da < labelMax/2)
     {
         return false;
     }
@@ -342,10 +344,14 @@ bool Foam::regIOobject::upToDate
     const regIOobject& b
 ) const
 {
+    label halfLabelMax = labelMax/2;
+    label da = a.eventNo()-eventNo_;
+    label db = b.eventNo()-eventNo_;
+
     if
     (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
+        (da >= 0 && da < halfLabelMax)
+     || (db >= 0 && db < halfLabelMax)
     )
     {
         return false;
@@ -364,11 +370,16 @@ bool Foam::regIOobject::upToDate
     const regIOobject& c
 ) const
 {
+    label halfLabelMax = labelMax/2;
+    label da = a.eventNo()-eventNo_;
+    label db = b.eventNo()-eventNo_;
+    label dc = c.eventNo()-eventNo_;
+
     if
     (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
-     || c.eventNo() >= eventNo_
+        (da >= 0 && da < halfLabelMax)
+     || (db >= 0 && db < halfLabelMax)
+     || (dc >= 0 && dc < halfLabelMax)
     )
     {
         return false;
@@ -388,12 +399,18 @@ bool Foam::regIOobject::upToDate
     const regIOobject& d
 ) const
 {
+    label halfLabelMax = labelMax/2;
+    label da = a.eventNo()-eventNo_;
+    label db = b.eventNo()-eventNo_;
+    label dc = c.eventNo()-eventNo_;
+    label dd = d.eventNo()-eventNo_;
+
     if
     (
-        a.eventNo() >= eventNo_
-     || b.eventNo() >= eventNo_
-     || c.eventNo() >= eventNo_
-     || d.eventNo() >= eventNo_
+        (da >= 0 && da < halfLabelMax)
+     || (db >= 0 && db < halfLabelMax)
+     || (dc >= 0 && dc < halfLabelMax)
+     || (dd >= 0 && dd < halfLabelMax)
     )
     {
         return false;