Index: /trunk/BNS/bns.cpp
===================================================================
--- /trunk/BNS/bns.cpp	(revision 2293)
+++ /trunk/BNS/bns.cpp	(revision 2294)
@@ -409,5 +409,5 @@
 
           QString      prn;
-          ColumnVector xx(10); xx = 0.0;
+          ColumnVector xx(14); xx = 0.0;
           t_eph*       ep = 0;
       
@@ -418,5 +418,6 @@
             if ( _ephList.contains(prn) ) {
               in >> xx(1) >> xx(2) >> xx(3) >> xx(4) >> xx(5) 
-                 >> xx(6) >> xx(7) >> xx(8) >> xx(9) >> xx(10);
+                 >> xx(6) >> xx(7) >> xx(8) >> xx(9) >> xx(10)
+                 >> xx(11) >> xx(12) >> xx(13) >> xx(14);
               xx(1) *= 1e3;     // x-crd
               xx(2) *= 1e3;     // y-crd
@@ -425,5 +426,9 @@
               xx(5) *= 1e-6;    // rel. corr.
                                 // xx(6), xx(7), xx(8) ... PhaseCent - CoM
-                                // xx(9) P1-C1 DCB, xx(1) P1-P2 DCB
+                                // xx(9) .. P1-C1 DCB, xx(10) ... P1-P2 DCB
+                                // xx(11) ... dT
+              xx(12) *= 1e3;    // x-crd at time + dT
+              xx(13) *= 1e3;    // y-crd at time + dT
+              xx(14) *= 1e3;    // z-crd at time + dT
 
               t_ephPair* pair = _ephList[prn];
@@ -526,30 +531,57 @@
                              QString& outLine) {
 
-  ColumnVector xB(4);
-  ColumnVector vv(3);
-
-  ep->position(GPSweek, GPSweeks, xB, vv);
-
-  ColumnVector xyz = xx.Rows(1,3);
-
-  // Correction Center of Mass -> Antenna Phase Center
-  // -------------------------------------------------
-  if (! CoM) {
-    xyz(1) += xx(6);
-    xyz(2) += xx(7);
-    xyz(3) += xx(8);
-  }
-
-  if (trafo != "IGS05") {
-    crdTrafo(GPSweek, xyz, trafo);
-  }
-
-  ColumnVector dx = xB.Rows(1,3) - xyz;
+  const double secPerWeek = 7.0 * 86400.0;
 
   ColumnVector rsw(3);
-  XYZ_to_RSW(xB.Rows(1,3), vv, dx, rsw);
-
-  double dClk = (xB(4) - xx(4)) * 299792458.0;
-
+  ColumnVector rsw2(3);
+  double dClk;
+
+  for (int ii = 1; ii <= 2; ++ii) {
+
+    int    GPSweek12  = GPSweek;
+    double GPSweeks12 = GPSweeks;
+    if (ii == 2) {
+      GPSweeks12 += xx(11);
+      if (GPSweeks12 > secPerWeek) {
+        GPSweek12  += 1;
+        GPSweeks12 -= secPerWeek;
+      }
+    }
+
+    ColumnVector xB(4);
+    ColumnVector vv(3);
+
+    ep->position(GPSweek12, GPSweeks12, xB, vv);
+    
+    ColumnVector xyz;
+    if (ii == 1) {
+      xyz = xx.Rows(1,3);
+    }
+    else {
+      xyz = xx.Rows(12,14);
+    }
+    
+    // Correction Center of Mass -> Antenna Phase Center
+    // -------------------------------------------------
+    if (! CoM) {
+      xyz(1) += xx(6);
+      xyz(2) += xx(7);
+      xyz(3) += xx(8);
+    }
+    
+    if (trafo != "IGS05") {
+      crdTrafo(GPSweek12, xyz, trafo);
+    }
+    
+    ColumnVector dx = xB.Rows(1,3) - xyz;
+    
+    if (ii == 1) {
+      XYZ_to_RSW(xB.Rows(1,3), vv, dx, rsw);
+      dClk = (xB(4) - xx(4)) * 299792458.0;
+    }
+    else {
+      XYZ_to_RSW(xB.Rows(1,3), vv, dx, rsw2);
+    }
+  }
 
   if (sd) {
@@ -560,4 +592,7 @@
     sd->Orbit.DeltaAlongTrack = rsw(2);
     sd->Orbit.DeltaCrossTrack = rsw(3);
+    sd->Orbit.DotDeltaRadial     = (rsw2(1) - rsw(1)) / xx(11);
+    sd->Orbit.DotDeltaAlongTrack = (rsw2(2) - rsw(2)) / xx(11);
+    sd->Orbit.DotDeltaCrossTrack = (rsw2(3) - rsw(3)) / xx(11);
   }
 
