Index: trunk/BNC/RTCM/GPSDecoder.h
===================================================================
--- trunk/BNC/RTCM/GPSDecoder.h	(revision 2701)
+++ trunk/BNC/RTCM/GPSDecoder.h	(revision 2702)
@@ -35,36 +35,5 @@
 #include "bncconst.h"
 
-class t_obsInternal {
- public:
-
-  t_obsInternal() {
-    satSys      = 'G';
-    satNum      = 0;
-    slotNum     = 0;
-    GPSWeek     = 0;
-    GPSWeeks    = 0.0;
-
-    C1          = 0.0;
-    P1          = 0.0;
-    L1          = 0.0;
-    S1          = 0.0;
-
-    C2          = 0.0;
-    P2          = 0.0;
-    L2          = 0.0;
-    S2          = 0.0;
- 
-    C5          = 0.0;
-    L5          = 0.0;
-    S5          = 0.0;
-
-    slip_cnt_L1 = -1;
-    slip_cnt_L2 = -1;
-    slip_cnt_L5 = -1;
-    StatID[0]   = '\x0';
-  }
-
-  ~t_obsInternal() {}
-
+struct t_obsInternal {
   char   StatID[20+1]; // Station ID
   char   satSys;       // Satellite System ('G' or 'R')
@@ -76,14 +45,23 @@
   double C1;           // CA-code pseudorange (meters)
   double P1;           // P1-code pseudorange (meters)
-  double L1;           // L1 carrier phase (cycles)
-  double S1;           // raw L1 signal strength
+  double L1C;          // L1 carrier phase (cycles)
+  double D1C;          // Doppler L1
+  double S1C;          // raw L1 signal strength
+  double L1P;          // L1 carrier phase (cycles)
+  double D1P;          // Doppler L1
+  double S1P;          // raw L1 signal strength
 
   double C2;           // CA-code pseudorange (meters)
   double P2;           // P2-code pseudorange (meters)
-  double L2;           // L2 carrier phase (cycles)
-  double S2;           // raw L2 signal strength
+  double L2C;          // L2 carrier phase (cycles)
+  double D2C;          // Doppler L2
+  double S2C;          // raw L2 signal strength
+  double L2P;          // L2 carrier phase (cycles)
+  double D2P;          // Doppler L2
+  double S2P;          // raw L2 signal strength
 
   double C5;           // Pseudorange (meters)
   double L5;           // L5 carrier phase (cycles)
+  double D5;           // Doppler L5
   double S5;           // raw L5 signal strength
 
@@ -97,7 +75,40 @@
   enum t_obs_status {initial, posted, received};
   t_obs() {
-    _status = initial;
+    _status        = initial;
+    _o.satSys      = 'G';
+    _o.satNum      = 0;
+    _o.slotNum     = 0;
+    _o.GPSWeek     = 0;
+    _o.GPSWeeks    = 0.0;
+    _o.C1          = 0.0;
+    _o.P1          = 0.0;
+    _o.L1C         = 0.0;
+    _o.D1C         = 0.0;
+    _o.S1C         = 0.0;
+    _o.L1P         = 0.0;
+    _o.D1P         = 0.0;
+    _o.S1P         = 0.0;
+    _o.C2          = 0.0;
+    _o.P2          = 0.0;
+    _o.L2C         = 0.0;
+    _o.D2C         = 0.0;
+    _o.S2C         = 0.0;
+    _o.L2P         = 0.0;
+    _o.D2P         = 0.0;
+    _o.S2P         = 0.0;
+    _o.C5          = 0.0;
+    _o.L5          = 0.0;
+    _o.D5          = 0.0;
+    _o.S5          = 0.0;
+    _o.slip_cnt_L1 = -1;
+    _o.slip_cnt_L2 = -1;
+    _o.slip_cnt_L5 = -1;
+    _o.StatID[0]   = '\x0';
   }
   ~t_obs() {}
+  double L1() const {return (_o.L1P != 0.0 ? _o.L1P : _o.L1C);}
+  double L2() const {return (_o.L2P != 0.0 ? _o.L2P : _o.L2C);}
+  double S1() const {return (_o.L1P != 0.0 ? _o.S1P : _o.S1C);}
+  double S2() const {return (_o.L2P != 0.0 ? _o.S2P : _o.S2C);}
   t_obsInternal _o;
   t_obs_status  _status;
Index: trunk/BNC/RTCM/RTCM2Decoder.cpp
===================================================================
--- trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 2701)
+++ trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 2702)
@@ -155,6 +155,6 @@
           obs->_o.P1            = _ObsBlock.rng_P1[iSat];
           obs->_o.P2            = _ObsBlock.rng_P2[iSat];
-          obs->_o.L1            = _ObsBlock.resolvedPhase_L1(iSat);
-          obs->_o.L2            = _ObsBlock.resolvedPhase_L2(iSat);
+          obs->_o.L1P           = _ObsBlock.resolvedPhase_L1(iSat);
+          obs->_o.L2P           = _ObsBlock.resolvedPhase_L2(iSat);
 	  obs->_o.slip_cnt_L1   = _ObsBlock.slip_L1[iSat];
 	  obs->_o.slip_cnt_L2   = _ObsBlock.slip_L2[iSat];
@@ -394,9 +394,9 @@
 	switch (ii) {
 	case 0: // --- L1 ---
-	  new_obs->_o.L1 = *obsVal / LAMBDA_1;
+	  new_obs->_o.L1P = *obsVal / LAMBDA_1;
 	  new_obs->_o.slip_cnt_L1   = corr->lock1;
 	  break;
 	case 1: // --- L2 ---
-	  new_obs->_o.L2 = *obsVal / LAMBDA_2;
+	  new_obs->_o.L2P = *obsVal / LAMBDA_2;
 	  new_obs->_o.slip_cnt_L2   = corr->lock2;
 	  break;
Index: trunk/BNC/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 2701)
+++ trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 2702)
@@ -357,39 +357,62 @@
 
                   if      (iEntry == GNSSENTRY_C1DATA) {
-                    obs->_o.C1 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.C1  = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_C2DATA) {
-                    obs->_o.C2 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.C2  = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_P1DATA) {
-                    obs->_o.P1 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.P1  = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_P2DATA) {
-                    obs->_o.P2 = gnssData.measdata[iSat][iEntry];
-                  }
-                  else if (iEntry == GNSSENTRY_L1CDATA ||
-                           iEntry == GNSSENTRY_L1PDATA) {
-                    obs->_o.L1   = gnssData.measdata[iSat][iEntry];
-                  }
-                  else if (iEntry == GNSSENTRY_L2CDATA || 
-                           iEntry == GNSSENTRY_L2PDATA) {
-                    obs->_o.L2   = gnssData.measdata[iSat][iEntry];
-                  }
-                  else if (iEntry == GNSSENTRY_S1CDATA ||
-                           iEntry == GNSSENTRY_S1PDATA) {
-                    obs->_o.S1   = gnssData.measdata[iSat][iEntry];
-                  }
-                  else if (iEntry == GNSSENTRY_S2CDATA ||
-                           iEntry == GNSSENTRY_S2PDATA) {
-                    obs->_o.S2   = gnssData.measdata[iSat][iEntry];
+                    obs->_o.P2  = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_L1CDATA) {
+                    obs->_o.L1C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_L1PDATA) {
+                    obs->_o.L1P = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_L2CDATA) {
+                    obs->_o.L2C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_L2PDATA) {
+                    obs->_o.L2P = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_D1CDATA) {
+                    obs->_o.D1C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_D1PDATA) {
+                    obs->_o.D1P = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_S1CDATA) {
+                    obs->_o.S1C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_S1PDATA) {
+                    obs->_o.S1P = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_D2CDATA) {
+                    obs->_o.D2C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_D2PDATA) {
+                    obs->_o.D2P = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_S2CDATA) {
+                    obs->_o.S2C = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_S2PDATA) {
+                    obs->_o.S2P = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_C5DATA) {
-                    obs->_o.C5 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.C5  = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_L5DATA) {
-                    obs->_o.L5 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.L5  = gnssData.measdata[iSat][iEntry];
+                  }
+                  else if (iEntry == GNSSENTRY_D5DATA) {
+                    obs->_o.D5  = gnssData.measdata[iSat][iEntry];
                   }
                   else if (iEntry == GNSSENTRY_S5DATA) {
-                    obs->_o.S5 = gnssData.measdata[iSat][iEntry];
+                    obs->_o.S5  = gnssData.measdata[iSat][iEntry];
                   }
                 }
Index: trunk/BNC/RTIGS/RTIGSDecoder.cpp
===================================================================
--- trunk/BNC/RTIGS/RTIGSDecoder.cpp	(revision 2701)
+++ trunk/BNC/RTIGS/RTIGSDecoder.cpp	(revision 2702)
@@ -125,8 +125,8 @@
       obs->_o.P1       = _GPSTrans.DecObs.Obs[ii].p1_pseudo_range;
       obs->_o.P2       = _GPSTrans.DecObs.Obs[ii].p2_pseudo_range;
-      obs->_o.L1       = _GPSTrans.DecObs.Obs[ii].p1_phase;
-      obs->_o.L2       = _GPSTrans.DecObs.Obs[ii].p2_phase;
-      obs->_o.S1       = _GPSTrans.DecObs.Obs[ii].l1_sn;
-      obs->_o.S2       = _GPSTrans.DecObs.Obs[ii].l2_sn;
+      obs->_o.L1P      = _GPSTrans.DecObs.Obs[ii].p1_phase;
+      obs->_o.L2P      = _GPSTrans.DecObs.Obs[ii].p2_phase;
+      obs->_o.S1P      = _GPSTrans.DecObs.Obs[ii].l1_sn;
+      obs->_o.S2P      = _GPSTrans.DecObs.Obs[ii].l2_sn;
     }
   }
Index: trunk/BNC/bnccaster.cpp
===================================================================
--- trunk/BNC/bnccaster.cpp	(revision 2701)
+++ trunk/BNC/bnccaster.cpp	(revision 2702)
@@ -55,24 +55,24 @@
  public:
 
-  t_oldObsInternal(const t_obsInternal obs) {
-    strcpy(StatID, obs.StatID);
+  t_oldObsInternal(const t_obs* obs) {
+    strcpy(StatID, obs->_o.StatID);
     flags         = 0;
-    satSys        = obs.satSys;
-    satNum        = obs.satNum;
-    slot          = obs.slotNum;
-    GPSWeek       = obs.GPSWeek;
-    GPSWeeks      = obs.GPSWeeks;
-    C1            = obs.C1;
-    C2            = obs.C2;
-    P1            = obs.P1;
-    P2            = obs.P2;
-    L1            = obs.L1;
-    L2            = obs.L2;
-    slip_cnt_L1   = obs.slip_cnt_L1;
-    slip_cnt_L2   = obs.slip_cnt_L2;
+    satSys        = obs->_o.satSys;
+    satNum        = obs->_o.satNum;
+    slot          = obs->_o.slotNum;
+    GPSWeek       = obs->_o.GPSWeek;
+    GPSWeeks      = obs->_o.GPSWeeks;
+    C1            = obs->_o.C1;
+    C2            = obs->_o.C2;
+    P1            = obs->_o.P1;
+    P2            = obs->_o.P2;
+    L1            = obs->L1();
+    L2            = obs->L2();
+    slip_cnt_L1   = obs->_o.slip_cnt_L1;
+    slip_cnt_L2   = obs->_o.slip_cnt_L2;
     lock_timei_L1 = -1;
     lock_timei_L2 = -1;
-    S1            = obs.S1;
-    S2            = obs.S2;
+    S1            = obs->S1();
+    S2            = obs->S2();
     SNR1          = 0;
     SNR2          = 0;
@@ -237,5 +237,5 @@
         }
         if (OLD_OBS_FORMAT) {
-          t_oldObsInternal oldObs(obs->_o);
+          t_oldObsInternal oldObs(obs);
           int numBytes = sizeof(oldObs);
           if (myWrite(sock, (const char*)(&oldObs), numBytes) != numBytes) {
@@ -431,5 +431,5 @@
               }
               if (OLD_OBS_FORMAT) {
-                t_oldObsInternal oldObs(obs->_o);
+                t_oldObsInternal oldObs(obs);
                 int numBytes = sizeof(oldObs);
                 if (myWrite(sock, (const char*)(&oldObs), numBytes) != numBytes) {
Index: trunk/BNC/bncpppclient.cpp
===================================================================
--- trunk/BNC/bncpppclient.cpp	(revision 2701)
+++ trunk/BNC/bncpppclient.cpp	(revision 2702)
@@ -119,8 +119,8 @@
 //
 ////////////////////////////////////////////////////////////////////////////
-void bncPPPclient::putNewObs(p_obs pp) {
+void bncPPPclient::putNewObs(p_obs pObs) {
   QMutexLocker locker(&_mutex);
 
-  t_obsInternal* obs = &(pp->_o);
+  t_obsInternal* obs = &(pObs->_o);
 
   if (obs->satSys != 'G' && !_useGlonass) {
@@ -206,7 +206,7 @@
   // Set Phase Observations
   // ----------------------  
-  if (obs->L1 && obs->L2) {
-    satData->L1 = obs->L1 * t_CST::c / f1;
-    satData->L2 = obs->L2 * t_CST::c / f2;
+  if (pObs->L1() && pObs->L2()) {
+    satData->L1 = pObs->L1() * t_CST::c / f1;
+    satData->L2 = pObs->L2() * t_CST::c / f2;
   }
   else {
Index: trunk/BNC/bncrinex.cpp
===================================================================
--- trunk/BNC/bncrinex.cpp	(revision 2701)
+++ trunk/BNC/bncrinex.cpp	(revision 2702)
@@ -640,10 +640,10 @@
       _out << setw(14) << setprecision(3) << obs->_o.C1 << ' '  << ' '
            << setw(14) << setprecision(3) << obs->_o.P1 << ' '  << ' '
-           << setw(14) << setprecision(3) << obs->_o.L1 << lli1 << ' '
-           << setw(14) << setprecision(3) << obs->_o.S1 << ' '  << ' '
+           << setw(14) << setprecision(3) << obs->L1()  << lli1 << ' '
+           << setw(14) << setprecision(3) << obs->S1()  << ' '  << ' '
            << setw(14) << setprecision(3) << obs->_o.C2 << ' '  << ' ' << endl
            << setw(14) << setprecision(3) << obs->_o.P2 << ' '  << ' ' 
-           << setw(14) << setprecision(3) << obs->_o.L2 << lli2 << ' '
-           << setw(16) << setprecision(3) << obs->_o.S2 << endl;
+           << setw(14) << setprecision(3) << obs->L2()  << lli2 << ' '
+           << setw(16) << setprecision(3) << obs->S2()  << endl;
     }
 
@@ -683,14 +683,14 @@
     str << obs.satSys 
         << setw(2) << setfill('0') << obs.satNum << setfill(' ')
-        << setw(14) << setprecision(3) << obs.C1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.P1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L1 << lli1 << ' '
-        << setw(14) << setprecision(3) << obs.S1 << ' '  << ' ' 
-        << setw(14) << setprecision(3) << obs.C2 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.P2 << ' '  << ' ' 
-        << setw(14) << setprecision(3) << obs.L2 << lli2 << ' ' 
-        << setw(14) << setprecision(3) << obs.S2 << ' '  << ' '
-        << setw(14) << setprecision(3) << obs.C5 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L5 << lli5 << ' ' 
+        << setw(14) << setprecision(3) << obs.C1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.P1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L1C << lli1 << ' '
+        << setw(14) << setprecision(3) << obs.S1C << ' '  << ' ' 
+        << setw(14) << setprecision(3) << obs.C2  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.P2  << ' '  << ' ' 
+        << setw(14) << setprecision(3) << obs.L2C << lli2 << ' ' 
+        << setw(14) << setprecision(3) << obs.S2C << ' '  << ' '
+        << setw(14) << setprecision(3) << obs.C5  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L5  << lli5 << ' ' 
         << setw(14) << setprecision(3) << obs.S5;
   }
@@ -698,29 +698,29 @@
     str << obs.satSys 
         << setw(2) << setfill('0') << obs.satNum << setfill(' ')
-        << setw(14) << setprecision(3) << obs.C1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.P1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L1 << lli1 << ' '
-        << setw(14) << setprecision(3) << obs.S1 << ' '  << ' ' 
-        << setw(14) << setprecision(3) << obs.C2 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.P2 << ' '  << ' ' 
-        << setw(14) << setprecision(3) << obs.L2 << lli2 << ' ' 
-        << setw(14) << setprecision(3) << obs.S2;
+        << setw(14) << setprecision(3) << obs.C1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.P1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L1C << lli1 << ' '
+        << setw(14) << setprecision(3) << obs.S1C << ' '  << ' ' 
+        << setw(14) << setprecision(3) << obs.C2  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.P2  << ' '  << ' ' 
+        << setw(14) << setprecision(3) << obs.L2C << lli2 << ' ' 
+        << setw(14) << setprecision(3) << obs.S2C;
   }
   else if (obs.satSys == 'S') { // SBAS
     str << obs.satSys 
         << setw(2) << setfill('0') << obs.satNum << setfill(' ')
-        << setw(14) << setprecision(3) << obs.C1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.P1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L1 << lli1 << ' '
-        << setw(14) << setprecision(3) << obs.S1;
+        << setw(14) << setprecision(3) << obs.C1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.P1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L1C << lli1 << ' '
+        << setw(14) << setprecision(3) << obs.S1C;
   }
   else if (obs.satSys == 'E') { // Galileo
     str << obs.satSys 
         << setw(2) << setfill('0') << obs.satNum << setfill(' ')
-        << setw(14) << setprecision(3) << obs.C1 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L1 << lli1 << ' '
-        << setw(14) << setprecision(3) << obs.S1 << ' '  << ' ' 
-        << setw(14) << setprecision(3) << obs.C5 << ' '  << ' '  
-        << setw(14) << setprecision(3) << obs.L5 << lli5 << ' '
+        << setw(14) << setprecision(3) << obs.C1  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L1C << lli1 << ' '
+        << setw(14) << setprecision(3) << obs.S1C << ' '  << ' ' 
+        << setw(14) << setprecision(3) << obs.C5  << ' '  << ' '  
+        << setw(14) << setprecision(3) << obs.L5  << lli5 << ' '
         << setw(14) << setprecision(3) << obs.S5;
   }
