Index: trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 6467)
+++ trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 6468)
@@ -368,8 +368,8 @@
   }
   else if (_codeBias.NumberOfSat[CLOCKORBIT_SATGPS] > 0) {
-    epoSecGPS = _clkOrb.EpochTime[CLOCKORBIT_SATGPS]; // 0 .. 604799 s  
+    epoSecGPS = _codeBias.EpochTime[CLOCKORBIT_SATGPS]; // 0 .. 604799 s  
   }
   else if (_clkOrb.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) {
-    epoSecGlo = _codeBias.EpochTime[CLOCKORBIT_SATGLONASS]; // 0 .. 86399 s (86400 for leap second)
+    epoSecGlo = _clkOrb.EpochTime[CLOCKORBIT_SATGLONASS]; // 0 .. 86399 s (86400 for leap second)
   }
   else if (_codeBias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) {
@@ -388,10 +388,4 @@
   if      (epoSecGPS != -1) {
     _lastTime.set(currentWeek, epoSecGPS);
-    while (_lastTime < currentTime - 7 * 86400.0) {
-      _lastTime = _lastTime + 7 * 86400.0;
-    }
-    while (_lastTime > currentTime + 7 * 86400.0) {
-      _lastTime = _lastTime - 7 * 86400.0;
-    }
   }
   else if (epoSecGlo != -1) {
@@ -399,10 +393,13 @@
     epoSecGlo = epoSecGlo - 3 * 3600 + gnumleap(date.year(), date.month(), date.day());
     _lastTime.set(currentWeek, epoSecGlo);
-    while (_lastTime < currentTime - 86400.0) {
-      _lastTime = _lastTime + 86400.0;
-    }
-    while (_lastTime > currentTime + 86400.0) {
-      _lastTime = _lastTime - 86400.0;
-    }
-  }
-}
+  }
+
+  if (_lastTime.valid()) {
+    while (_lastTime < currentTime - 86400.0/2) {
+      _lastTime = _lastTime + 86400.0/2;
+    }
+    while (_lastTime > currentTime + 86400.0/2) {
+      _lastTime = _lastTime - 86400.0/2;
+    }
+  }
+}
