Index: /trunk/BNC/RTCM3/ephemeris.cpp
===================================================================
--- /trunk/BNC/RTCM3/ephemeris.cpp	(revision 3267)
+++ /trunk/BNC/RTCM3/ephemeris.cpp	(revision 3268)
@@ -429,4 +429,6 @@
   // -----------------------
   {
+    const double secPerDay  = 24 * 3600.0;
+    const double secPerWeek = 7 * secPerDay;
     int ww_old  = ww;
     int tow_old = tow;
@@ -436,20 +438,21 @@
     bncTime currentTime(currentWeek, currentSec);
     bncTime hTime(ww, (double) tow);
-    bncTime oldHTime = hTime;
 
     bool changed = false;
-    if      (hTime - currentTime > 12 * 3600.0) {
+    if      (hTime - currentTime >  secPerDay/2.0) {
       changed = true;
-      hTime = hTime - 24 * 3600.0;
-      ww  = hTime.gpsw();
-      tow = (int) hTime.gpssec();
-      updatetime(&ww, &tow, ee->tb*1000, 0);  // Moscow -> GPS
+      tow -= secPerDay;
+      if (tow < 0) {
+        tow += secPerWeek;
+        ww  -= 1;
+      }
     }
-    else if (hTime - currentTime < 12 * 3600.0) {
+    else if (hTime - currentTime < -secPerDay/2.0) {
       changed = true;
-      hTime = hTime + 24 * 3600.0;
-      ww  = hTime.gpsw();
-      tow = (int) hTime.gpssec();
-      updatetime(&ww, &tow, ee->tb*1000, 0);  // Moscow -> GPS
+      tow += secPerDay;
+      if (tow > secPerWeek) {
+        tow -= secPerWeek;
+        ww  += 1;
+      }
     }
 
@@ -459,5 +462,5 @@
            << currentTime.datestr()         << " " << currentTime.timestr() 
            << endl
-           << "old: " << oldHTime.datestr() << " " << oldHTime.timestr()       
+           << "old: " << hTime.datestr()    << " " << hTime.timestr()       
            << endl
            << "new: " << newHTime.datestr() << " " << newHTime.timestr()    
