Index: trunk/BNC/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8902)
+++ trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8903)
@@ -1073,7 +1073,5 @@
     GETBITS(eph._L2PFlag, 1)
     GETBITS(fitIntervalFalg, 1)
-    if (fitIntervalFalg == 0) {
-      eph._fitInterval = 4.0;
-    }
+    eph._fitInterval = fitIntervalFromFlag(fitIntervalFalg, eph._IODC, eph.type());
     eph._TOT = 0.9999e9;
 
@@ -1238,7 +1236,5 @@
     GETBITS(eph._IODC, 10)
     GETBITS(fitIntervalFalg, 1)
-    if (fitIntervalFalg == 0) {
-      eph._fitInterval = 2.0;
-    }
+    eph._fitInterval = fitIntervalFromFlag(fitIntervalFalg, eph._IODC, eph.type());
     eph._TOT = 0.9999e9;
 
Index: trunk/BNC/src/bncutils.cpp
===================================================================
--- trunk/BNC/src/bncutils.cpp	(revision 8902)
+++ trunk/BNC/src/bncutils.cpp	(revision 8903)
@@ -317,6 +317,6 @@
                 const ColumnVector& rsw, ColumnVector& xyz) {
 
-  ColumnVector along  = vv / vv.norm_Frobenius();
-  ColumnVector cross  = crossproduct(rr, vv); cross /= cross.norm_Frobenius();
+  ColumnVector along  = vv / vv.NormFrobenius();
+  ColumnVector cross  = crossproduct(rr, vv); cross /= cross.NormFrobenius();
   ColumnVector radial = crossproduct(along, cross);
 
@@ -334,6 +334,6 @@
                 const ColumnVector& xyz, ColumnVector& rsw) {
 
-  ColumnVector along  = vv / vv.norm_Frobenius();
-  ColumnVector cross  = crossproduct(rr, vv); cross /= cross.norm_Frobenius();
+  ColumnVector along  = vv / vv.NormFrobenius();
+  ColumnVector cross  = crossproduct(rr, vv); cross /= cross.NormFrobenius();
   ColumnVector radial = crossproduct(along, cross);
 
@@ -808,4 +808,6 @@
 }
 
+//
+////////////////////////////////////////////////////////////////////////////
 double accuracyFromIndex(int index, t_eph::e_type type) {
 double accuracy = -1.0;
@@ -869,4 +871,6 @@
 }
 
+//
+////////////////////////////////////////////////////////////////////////////
 int indexFromAccuracy(double accuracy, t_eph::e_type type) {
 
@@ -944,4 +948,40 @@
 
   return (type == t_eph::Galileo) ? 255 : 15;
+}
+
+// Returns fit interval in hours from flag
+////////////////////////////////////////////////////////////////////////////
+double fitIntervalFromFlag(int flag, double iodc, t_eph::e_type type) {
+  double fitInterval = 0.0;
+
+  switch (flag) {
+    case 0:
+      if      (type == t_eph::GPS) {
+        fitInterval = 4.0;
+      }
+      else if (type == t_eph::QZSS) {
+        fitInterval = 2.0;
+      }
+      break;
+    case 1:
+      if (type == t_eph::GPS) {
+        if      (iodc >= 240 && iodc <= 247) {
+          fitInterval =  8.0;
+        }
+        else if ((iodc >= 248 && iodc <= 255) ||
+                 (iodc == 496) ) {
+          fitInterval = 14.0;
+        }
+        else if ((iodc >=  497 && iodc <=  503) ||
+                 (iodc >= 2021 && iodc <= 1023) ) {
+          fitInterval = 26.0;
+        }
+        else {
+          fitInterval =  6.0;
+        }
+      }
+      break;
+  }
+  return fitInterval;
 }
 
Index: trunk/BNC/src/bncutils.h
===================================================================
--- trunk/BNC/src/bncutils.h	(revision 8902)
+++ trunk/BNC/src/bncutils.h	(revision 8903)
@@ -34,4 +34,15 @@
 #include <bncconst.h>
 #include <ephemeris.h>
+
+class t_eph;
+
+const double RHO_DEG = 180.0 / M_PI;
+const double RHO_SEC = 3600.0 * 180.0 / M_PI;
+const double MJD_J2000 = 51544.5;
+
+static const QVector<int> ssrUpdateInt = QVector<int>()  << 1 << 2 << 5 << 10 << 15 << 30
+                                                         << 60 << 120 << 240 << 300 << 600
+                                                         << 900 << 1800 << 3600 << 7200
+                                                         << 10800;
 
 void         expandEnvVar(QString& str);
@@ -137,4 +148,6 @@
 
 int          indexFromAccuracy(double accuracy, t_eph::e_type type);
+
+double       fitIntervalFromFlag(int flag, double iodc, t_eph::e_type type);
 
 double       associatedLegendreFunction(int n, int m, double t);
Index: trunk/BNC/src/ephemeris.cpp
===================================================================
--- trunk/BNC/src/ephemeris.cpp	(revision 8902)
+++ trunk/BNC/src/ephemeris.cpp	(revision 8903)
@@ -62,8 +62,5 @@
     return failure;
   }
-  const QVector<int> updateInt = QVector<int>()  << 1 << 2 << 5 << 10 << 15 << 30
-                                                 << 60 << 120 << 240 << 300 << 600
-                                                 << 900 << 1800 << 3600 << 7200
-                                                 << 10800;
+
   xc.ReSize(6);
   vv.ReSize(3);
@@ -75,5 +72,5 @@
       double dtO = tt - _orbCorr->_time;
       if (_orbCorr->_updateInt) {
-        dtO -= (0.5 * updateInt[_orbCorr->_updateInt]);
+        dtO -= (0.5 * ssrUpdateInt[_orbCorr->_updateInt]);
       }
       ColumnVector dx(3);
@@ -97,5 +94,5 @@
       double dtC = tt - _clkCorr->_time;
       if (_clkCorr->_updateInt) {
-        dtC -= (0.5 * updateInt[_clkCorr->_updateInt]);
+        dtC -= (0.5 * ssrUpdateInt[_clkCorr->_updateInt]);
       }
       xc[3] += _clkCorr->_dClk + _clkCorr->_dotDClk * dtC + _clkCorr->_dotDotDClk * dtC * dtC;
@@ -704,5 +701,5 @@
   static const double C20   = -1082.6257e-6;
 
-  double rho = rr.norm_Frobenius();
+  double rho = rr.NormFrobenius();
   double t1  = -gmWGS/(rho*rho*rho);
   double t2  = 3.0/2.0 * C20 * (gmWGS*AE*AE) / (rho*rho*rho*rho*rho);
