Index: /trunk/BNC/src/RTCM/GPSDecoder.cpp
===================================================================
--- /trunk/BNC/src/RTCM/GPSDecoder.cpp	(revision 4390)
+++ /trunk/BNC/src/RTCM/GPSDecoder.cpp	(revision 4391)
@@ -89,162 +89,2 @@
   }
 }
-
-// 
-//////////////////////////////////////////////////////////////////////////////
-double t_obs::c1() const {
-  if (_measdata[GNSSENTRY_C1DATA]  != 0.0) return _measdata[GNSSENTRY_C1DATA];
-  if (_measdata[GNSSENTRY_C1NDATA] != 0.0) return _measdata[GNSSENTRY_C1NDATA];
-  return 0.0;
-}
-
-double t_obs::c2() const {
-  if (_measdata[GNSSENTRY_C2DATA] != 0.0) return _measdata[GNSSENTRY_C2DATA];
-  return 0.0;
-}
-
-double t_obs::c5() const {
-  if (_measdata[GNSSENTRY_C5DATA]   != 0.0) return _measdata[GNSSENTRY_C5DATA];
-  if (_measdata[GNSSENTRY_C5BDATA]  != 0.0) return _measdata[GNSSENTRY_C5BDATA];
-  if (_measdata[GNSSENTRY_C5ABDATA] != 0.0) return _measdata[GNSSENTRY_C5ABDATA];
-  return 0.0;
-}
-
-double t_obs::p1() const {
-  if (_measdata[GNSSENTRY_P1DATA] != 0.0) return _measdata[GNSSENTRY_P1DATA];
-  return 0.0;
-}
-
-double t_obs::p2() const {
-  if (_measdata[GNSSENTRY_P2DATA] != 0.0) return _measdata[GNSSENTRY_P2DATA];
-  return 0.0;
-}
-
-double t_obs::l1() const {
-  if (_measdata[GNSSENTRY_L1CDATA] != 0.0) return _measdata[GNSSENTRY_L1CDATA];
-  if (_measdata[GNSSENTRY_L1PDATA] != 0.0) return _measdata[GNSSENTRY_L1PDATA];
-  if (_measdata[GNSSENTRY_L1NDATA] != 0.0) return _measdata[GNSSENTRY_L1NDATA];
-  return 0.0;
-}
-
-double t_obs::l2() const {
-  if (_measdata[GNSSENTRY_L2CDATA] != 0.0) return _measdata[GNSSENTRY_L2CDATA];
-  if (_measdata[GNSSENTRY_L2PDATA] != 0.0) return _measdata[GNSSENTRY_L2PDATA];
-  return 0.0;
-}
-
-double t_obs::l5() const {
-  if (_measdata[GNSSENTRY_L5DATA]   != 0.0) return _measdata[GNSSENTRY_L5DATA];
-  if (_measdata[GNSSENTRY_L5BDATA]  != 0.0) return _measdata[GNSSENTRY_L5BDATA];
-  if (_measdata[GNSSENTRY_L5ABDATA] != 0.0) return _measdata[GNSSENTRY_L5ABDATA];
-  return 0.0;
-}
-
-double t_obs::s1() const {
-  if (_measdata[GNSSENTRY_S1CDATA] != 0.0) return _measdata[GNSSENTRY_S1CDATA];
-  if (_measdata[GNSSENTRY_S1PDATA] != 0.0) return _measdata[GNSSENTRY_S1PDATA];
-  if (_measdata[GNSSENTRY_S1NDATA] != 0.0) return _measdata[GNSSENTRY_S1NDATA];
-  return 0.0;
-}
-
-double t_obs::s2() const {
-  if (_measdata[GNSSENTRY_S2CDATA] != 0.0) return _measdata[GNSSENTRY_S2CDATA];
-  if (_measdata[GNSSENTRY_S2PDATA] != 0.0) return _measdata[GNSSENTRY_S2PDATA];
-  return 0.0;
-}
-
-// 
-//////////////////////////////////////////////////////////////////////////////
-std::string t_obs::entry2str(int iEntry) const {
-  if (iEntry == GNSSENTRY_C1DATA   ) return "C1";
-  if (iEntry == GNSSENTRY_L1CDATA  ) return "L1C";
-  if (iEntry == GNSSENTRY_D1CDATA  ) return "D1C";
-  if (iEntry == GNSSENTRY_S1CDATA  ) return "S1C";
-  if (iEntry == GNSSENTRY_C2DATA   ) return "C2";
-  if (iEntry == GNSSENTRY_L2CDATA  ) return "L2C";
-  if (iEntry == GNSSENTRY_D2CDATA  ) return "D2C";
-  if (iEntry == GNSSENTRY_S2CDATA  ) return "S2C";
-  if (iEntry == GNSSENTRY_P1DATA   ) return "P1";
-  if (iEntry == GNSSENTRY_L1PDATA  ) return "L1P";
-  if (iEntry == GNSSENTRY_D1PDATA  ) return "D1P";
-  if (iEntry == GNSSENTRY_S1PDATA  ) return "S1P";
-  if (iEntry == GNSSENTRY_P2DATA   ) return "P2";
-  if (iEntry == GNSSENTRY_L2PDATA  ) return "L2P";
-  if (iEntry == GNSSENTRY_D2PDATA  ) return "D2P";
-  if (iEntry == GNSSENTRY_S2PDATA  ) return "S2P";
-  if (iEntry == GNSSENTRY_C5DATA   ) return "C5";
-  if (iEntry == GNSSENTRY_L5DATA   ) return "L5";
-  if (iEntry == GNSSENTRY_D5DATA   ) return "D5";
-  if (iEntry == GNSSENTRY_S5DATA   ) return "S5";
-  if (iEntry == GNSSENTRY_C6DATA   ) return "C6";
-  if (iEntry == GNSSENTRY_L6DATA   ) return "L6";
-  if (iEntry == GNSSENTRY_D6DATA   ) return "D6";
-  if (iEntry == GNSSENTRY_S6DATA   ) return "S6";
-  if (iEntry == GNSSENTRY_C5BDATA  ) return "C5B";
-  if (iEntry == GNSSENTRY_L5BDATA  ) return "L5B";
-  if (iEntry == GNSSENTRY_D5BDATA  ) return "D5B";
-  if (iEntry == GNSSENTRY_S5BDATA  ) return "S5B";
-  if (iEntry == GNSSENTRY_C5ABDATA ) return "C5AB";
-  if (iEntry == GNSSENTRY_L5ABDATA ) return "L5AB";
-  if (iEntry == GNSSENTRY_D5ABDATA ) return "D5AB";
-  if (iEntry == GNSSENTRY_S5ABDATA ) return "S5AB";
-  if (iEntry == GNSSENTRY_CSAIFDATA) return "CSAIF";
-  if (iEntry == GNSSENTRY_LSAIFDATA) return "LSAIF";
-  if (iEntry == GNSSENTRY_DSAIFDATA) return "DSAIF";
-  if (iEntry == GNSSENTRY_SSAIFDATA) return "SSAIF";
-  if (iEntry == GNSSENTRY_C1NDATA  ) return "C1N";
-  if (iEntry == GNSSENTRY_L1NDATA  ) return "L1N";
-  if (iEntry == GNSSENTRY_D1NDATA  ) return "D1N";
-  if (iEntry == GNSSENTRY_S1NDATA  ) return "S1N";
-
-  throw "Error in t_obs::entry2str";
-}
-
-// 
-//////////////////////////////////////////////////////////////////////////////
-int t_obs::str2entry(const char* strIn) const {
-
-  string str(strIn);
-
-  if (str == "C1"   ) return GNSSENTRY_C1DATA;
-  if (str == "L1C"  ) return GNSSENTRY_L1CDATA;
-  if (str == "D1C"  ) return GNSSENTRY_D1CDATA;
-  if (str == "S1C"  ) return GNSSENTRY_S1CDATA;
-  if (str == "C2"   ) return GNSSENTRY_C2DATA;
-  if (str == "L2C"  ) return GNSSENTRY_L2CDATA;
-  if (str == "D2C"  ) return GNSSENTRY_D2CDATA;
-  if (str == "S2C"  ) return GNSSENTRY_S2CDATA;
-  if (str == "P1"   ) return GNSSENTRY_P1DATA;
-  if (str == "L1P"  ) return GNSSENTRY_L1PDATA;
-  if (str == "D1P"  ) return GNSSENTRY_D1PDATA;
-  if (str == "S1P"  ) return GNSSENTRY_S1PDATA;
-  if (str == "P2"   ) return GNSSENTRY_P2DATA;
-  if (str == "L2P"  ) return GNSSENTRY_L2PDATA;
-  if (str == "D2P"  ) return GNSSENTRY_D2PDATA;
-  if (str == "S2P"  ) return GNSSENTRY_S2PDATA;
-  if (str == "C5"   ) return GNSSENTRY_C5DATA;
-  if (str == "L5"   ) return GNSSENTRY_L5DATA;
-  if (str == "D5"   ) return GNSSENTRY_D5DATA;
-  if (str == "S5"   ) return GNSSENTRY_S5DATA;
-  if (str == "C6"   ) return GNSSENTRY_C6DATA;
-  if (str == "L6"   ) return GNSSENTRY_L6DATA;
-  if (str == "D6"   ) return GNSSENTRY_D6DATA;
-  if (str == "S6"   ) return GNSSENTRY_S6DATA;
-  if (str == "C5B"  ) return GNSSENTRY_C5BDATA;
-  if (str == "L5B"  ) return GNSSENTRY_L5BDATA;
-  if (str == "D5B"  ) return GNSSENTRY_D5BDATA;
-  if (str == "S5B"  ) return GNSSENTRY_S5BDATA;
-  if (str == "C5AB" ) return GNSSENTRY_C5ABDATA;
-  if (str == "L5AB" ) return GNSSENTRY_L5ABDATA;
-  if (str == "D5AB" ) return GNSSENTRY_D5ABDATA;
-  if (str == "S5AB" ) return GNSSENTRY_S5ABDATA;
-  if (str == "CSAIF") return GNSSENTRY_CSAIFDATA;
-  if (str == "LSAIF") return GNSSENTRY_LSAIFDATA;
-  if (str == "DSAIF") return GNSSENTRY_DSAIFDATA;
-  if (str == "SSAIF") return GNSSENTRY_SSAIFDATA;
-  if (str == "C1N"  ) return GNSSENTRY_C1NDATA;
-  if (str == "L1N"  ) return GNSSENTRY_L1NDATA;
-  if (str == "D1N"  ) return GNSSENTRY_D1NDATA;
-  if (str == "S1N"  ) return GNSSENTRY_S1NDATA;
-
-  throw "Error in t_obs::str2entry";
-}
Index: /trunk/BNC/src/RTCM/GPSDecoder.h
===================================================================
--- /trunk/BNC/src/RTCM/GPSDecoder.h	(revision 4390)
+++ /trunk/BNC/src/RTCM/GPSDecoder.h	(revision 4391)
@@ -61,16 +61,6 @@
   ~t_obs() {}
 
-  double c1() const;
-  double c2() const;
-  double c5() const;
-  double p1() const;
-  double p2() const;
-  double l1() const;
-  double l2() const;
-  double l5() const;
-  double s1() const;
-  double s2() const;
-  std::string entry2str(int iEntry) const;
-  int str2entry(const char* str) const;
+  double measdata(const QString& rnxStr) const;
+  void   setMeasdata(const QString& rnxStr, double value);
 
   char   StatID[20+1]; // Station ID
Index: /trunk/BNC/src/RTCM/RTCM2Decoder.cpp
===================================================================
--- /trunk/BNC/src/RTCM/RTCM2Decoder.cpp	(revision 4390)
+++ /trunk/BNC/src/RTCM/RTCM2Decoder.cpp	(revision 4391)
@@ -148,9 +148,9 @@
           obs.GPSWeek       = epochWeek;
           obs.GPSWeeks      = epochSecs;
-          obs._measdata[obs.str2entry("C1")] = _ObsBlock.rng_C1[iSat];
-          obs._measdata[obs.str2entry("P1")] = _ObsBlock.rng_P1[iSat];
-          obs._measdata[obs.str2entry("P2")] = _ObsBlock.rng_P2[iSat];
-          obs._measdata[obs.str2entry("L1")] = _ObsBlock.resolvedPhase_L1(iSat);
-          obs._measdata[obs.str2entry("L2")] = _ObsBlock.resolvedPhase_L2(iSat);
+          obs.setMeasdata("C1", _ObsBlock.rng_C1[iSat]);
+          obs.setMeasdata("P1", _ObsBlock.rng_P1[iSat]);
+          obs.setMeasdata("P2", _ObsBlock.rng_P2[iSat]);
+          obs.setMeasdata("L1", _ObsBlock.resolvedPhase_L1(iSat));
+          obs.setMeasdata("L2", _ObsBlock.resolvedPhase_L2(iSat));
 	  obs.slip_cnt_L1   = _ObsBlock.slip_L1[iSat];
 	  obs.slip_cnt_L2   = _ObsBlock.slip_L2[iSat];
@@ -368,22 +368,22 @@
 	switch (ii) {
 	case 0: // --- L1 ---
-          new_obs->_measdata[new_obs->str2entry("L1")] = *obsVal / LAMBDA_1;
+          new_obs->setMeasdata("L1", *obsVal / LAMBDA_1);
 	  new_obs->slip_cnt_L1   = corr->lock1;
 	  break;
 	case 1: // --- L2 ---
-          new_obs->_measdata[new_obs->str2entry("L2")] = *obsVal / LAMBDA_2;
+          new_obs->setMeasdata("L2", *obsVal / LAMBDA_2);
 	  new_obs->slip_cnt_L2   = corr->lock2;
 	  break;
 	case 2: // --- C1 / P1 ---
 	  if ( corr->Pind1 )
-            new_obs->_measdata[new_obs->str2entry("P1")] = *obsVal;
+            new_obs->setMeasdata("P1", *obsVal);
 	  else
-            new_obs->_measdata[new_obs->str2entry("C1")] = *obsVal;
+            new_obs->setMeasdata("C1", *obsVal);
 	  break;
 	case 3: // --- C2 / P2 ---
 	  if ( corr->Pind2 )
-            new_obs->_measdata[new_obs->str2entry("P2")] = *obsVal;
+            new_obs->setMeasdata("P2", *obsVal);
 	  else
-            new_obs->_measdata[new_obs->str2entry("C2")] = *obsVal;
+            new_obs->setMeasdata("C2", *obsVal);
 	  break;
 	default:
Index: /trunk/BNC/src/bncpppclient.cpp
===================================================================
--- /trunk/BNC/src/bncpppclient.cpp	(revision 4390)
+++ /trunk/BNC/src/bncpppclient.cpp	(revision 4391)
@@ -160,23 +160,29 @@
   // --------------------
   if      (obs.satSys == 'G') {
-    if ( (obs.p1() || obs.c1()) && (obs.p2() || obs.c2()) && obs.l1() && obs.l2() ) {
+    double C1C = obs.measdata("C1C");
+    double C1P = obs.measdata("C1P");
+    double C2C = obs.measdata("C2C");
+    double C2P = obs.measdata("C2P");
+    double L1  = obs.measdata("L1");
+    double L2  = obs.measdata("L2");
+    if ( (C1P || C1C) && (C2P || C2C) && L1 && L2 ) {
       double f1 = t_CST::freq1;
       double f2 = t_CST::freq2;
       double c1 =   f1 * f1 / (f1 * f1 - f2 * f2);
       double c2 = - f2 * f2 / (f1 * f1 - f2 * f2);
-      if (obs.p1()) {
-        satData->P1 = obs.p1() + (bb ? bb->p1 : 0.0);
+      if (C1P) {
+        satData->P1 = C1P + (bb ? bb->p1 : 0.0);
       }
       else {
-        satData->P1 = obs.c1() + (bb ? bb->c1 : 0.0);
-      }
-      if (obs.p2()) {
-        satData->P2 = obs.p2() + (bb ? bb->p2 : 0.0);
+        satData->P1 = C1C + (bb ? bb->c1 : 0.0);
+      }
+      if (C2P) {
+        satData->P2 = C2P + (bb ? bb->p2 : 0.0);
       }
       else {
-        satData->P2 = obs.c2();
-      }
-      satData->L1      = obs.l1() * t_CST::c / f1;
-      satData->L2      = obs.l2() * t_CST::c / f2;
+        satData->P2 = C2C;
+      }
+      satData->L1      = L1 * t_CST::c / f1;
+      satData->L2      = L2 * t_CST::c / f2;
       satData->P3      = c1 * satData->P1 + c2 * satData->P2;
       satData->L3      = c1 * satData->L1 + c2 * satData->L2;
@@ -193,23 +199,29 @@
   // ------------------------
   else if (obs.satSys == 'R') {
-    if ( (obs.p1() || obs.c1()) && (obs.p2() || obs.c2()) && obs.l1() && obs.l2() ) {
+    double C1C = obs.measdata("C1C");
+    double C1P = obs.measdata("C1P");
+    double C2C = obs.measdata("C2C");
+    double C2P = obs.measdata("C2P");
+    double L1  = obs.measdata("L1");
+    double L2  = obs.measdata("L2");
+    if ( (C1P || C1C) && (C2P || C2C) && L1 && L2 ) {
       double f1 = t_CST::f1(obs.satSys, obs.slotNum); 
       double f2 = t_CST::f2(obs.satSys, obs.slotNum); 
       double c1 =   f1 * f1 / (f1 * f1 - f2 * f2);
       double c2 = - f2 * f2 / (f1 * f1 - f2 * f2);
-      if (obs.p1()) {
-        satData->P1 = obs.p1() + (bb ? bb->p1 : 0.0);
+      if (C1P) {
+        satData->P1 = C1P + (bb ? bb->p1 : 0.0);
       }
       else {
-        satData->P1 = obs.c1() + (bb ? bb->c1 : 0.0);
-      }
-      if (obs.p2()) {
-        satData->P2 = obs.p2() + (bb ? bb->p2 : 0.0);
+        satData->P1 = C1C + (bb ? bb->c1 : 0.0);
+      }
+      if (C2P) {
+        satData->P2 = C2P + (bb ? bb->p2 : 0.0);
       }
       else {
-        satData->P2 = obs.c2();
-      }
-      satData->L1      = obs.l1() * t_CST::c / f1;
-      satData->L2      = obs.l2() * t_CST::c / f2;
+        satData->P2 = C2C;
+      }
+      satData->L1      = L1 * t_CST::c / f1;
+      satData->L2      = L2 * t_CST::c / f2;
       satData->P3      = c1 * satData->P1 + c2 * satData->P2;
       satData->L3      = c1 * satData->L1 + c2 * satData->L2;
@@ -226,5 +238,9 @@
   // ------------------------
   else if (obs.satSys == 'E') {
-    if ( obs.c1() && obs.c5() && obs.l1() && obs.l5()) {
+    double C1 = obs.measdata("C1");
+    double L1 = obs.measdata("L1");
+    double C5 = obs.measdata("C5");
+    double L5 = obs.measdata("L5");
+    if ( C1 && C5 && L1 && L5) {
       double f1 = t_CST::freq1;
       double f5 = t_CST::freq5;
@@ -232,8 +248,8 @@
       double c5 = - f5 * f5 / (f1 * f1 - f5 * f5);
 
-      satData->P1      = obs.c1();
-      satData->P5      = obs.c5();
-      satData->L1      = obs.l1() * t_CST::c / f1;
-      satData->L5      = obs.l5() * t_CST::c / f5;
+      satData->P1      = C1;
+      satData->P5      = C5;
+      satData->L1      = L1 * t_CST::c / f1;
+      satData->L5      = L5 * t_CST::c / f5;
       satData->P3      = c1 * satData->P1 + c5 * satData->P5;
       satData->L3      = c1 * satData->L1 + c5 * satData->L5;
Index: /trunk/BNC/src/bncrinex.cpp
===================================================================
--- /trunk/BNC/src/bncrinex.cpp	(revision 4390)
+++ /trunk/BNC/src/bncrinex.cpp	(revision 4391)
@@ -694,12 +694,12 @@
     // ---------------
     else {
-      _out << 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()  << ' '  << ' ' << endl
-           << setw(14) << setprecision(3) << obs.p2()  << ' '  << ' ' 
-           << setw(14) << setprecision(3) << obs.l2()  << lli2 << ' '
-           << setw(14) << setprecision(3) << obs.s2()  << endl;
+      _out << setw(14) << setprecision(3) << obs.measdata("C1")  << ' '  << ' '
+           << setw(14) << setprecision(3) << obs.measdata("P1")  << ' '  << ' '
+           << setw(14) << setprecision(3) << obs.measdata("L1")  << lli1 << ' '
+           << setw(14) << setprecision(3) << obs.measdata("S1")  << ' '  << ' '
+           << setw(14) << setprecision(3) << obs.measdata("C2")  << ' '  << ' ' << endl
+           << setw(14) << setprecision(3) << obs.measdata("P2")  << ' '  << ' ' 
+           << setw(14) << setprecision(3) << obs.measdata("L2")  << lli2 << ' '
+           << setw(14) << setprecision(3) << obs.measdata("S2")  << endl;
     }
   }
@@ -727,5 +727,5 @@
 }
 
-// One Line in RINEX v3 (static)
+// One Line in RINEX v3
 ////////////////////////////////////////////////////////////////////////////
 string bncRinex::rinexSatLine(const t_obs& obs, char lli1, char lli2, 
@@ -737,10 +737,7 @@
       << setw(2) << setfill('0') << obs.satNum << setfill(' ');
 
-  for (int iEntry = 0; iEntry < GNSSENTRY_NUMBER; iEntry++) {
-    unsigned df = (1 << iEntry);
-    if (df & obs._dataflags) {
-      str << ' ' << obs.entry2str(iEntry) << ' ' << obs._codetype[iEntry] << ' '
-          << setw(14) << setprecision(3) << obs._measdata[iEntry]  << ' ';
-    }
+  const QVector<QString>& types = _rnxTypes[obs.satSys];
+  for (int ii = 0; ii < types.size(); ii++) {
+    str << setw(14) << setprecision(3) << obs.measdata(types[ii]) << ' ';
   }
 
@@ -778,13 +775,77 @@
   }
 
-  for (int iEntry = 0; iEntry < GNSSENTRY_NUMBER; iEntry++) {
-    unsigned df = (1 << iEntry);
-    if (df & obs._dataflags) {
-      str << ' ' << obs.entry2str(iEntry) << ' '
-          << setw(14) << setprecision(3) << obs._measdata[iEntry]  << ' ';
-      // TODO: handle slip counters
-    }
-  }
-
+  if      (obs.satSys == 'G') { // GPS
+    str << "  1C " 
+        << obsToStr(obs.measdata("C1C")) << ' '  
+        << obsToStr(obs.measdata("L1C")) << ' '
+        << obsToStr(obs.measdata("D1C")) << ' '
+        << obsToStr(obs.measdata("S1C"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L1;
+    str << "  1W "
+        << obsToStr(obs.measdata("C1W")) << ' '  
+        << obsToStr(obs.measdata("L1W")) << ' '
+        << obsToStr(obs.measdata("D1W")) << ' '
+        << obsToStr(obs.measdata("S1W"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L1;
+    str << "  2P "
+        << obsToStr(obs.measdata("C2P")) << ' '
+        << obsToStr(obs.measdata("L2P")) << ' '
+        << obsToStr(obs.measdata("D2P")) << ' '
+        << obsToStr(obs.measdata("S2P"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L2;
+    str << "  2X "
+        << obsToStr(obs.measdata("C2X")) << ' '  
+        << obsToStr(obs.measdata("L2X")) << ' '
+        << obsToStr(obs.measdata("D2X")) << ' ' 
+        << obsToStr(obs.measdata("S2X"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L2;
+    str << "  5C "
+        << obsToStr(obs.measdata("C5")) << ' '
+        << obsToStr(obs.measdata("L5")) << ' '
+        << obsToStr(obs.measdata("D5")) << ' '
+        << obsToStr(obs.measdata("S5"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L5;
+  }
+  else if (obs.satSys == 'R') { // Glonass
+    str << "  1C "
+        << obsToStr(obs.measdata("C1C")) << ' '  
+        << obsToStr(obs.measdata("L1C")) << ' '
+        << obsToStr(obs.measdata("D1C")) << ' '
+        << obsToStr(obs.measdata("S1C"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L1;
+    str << "  1P "
+        << obsToStr(obs.measdata("C1P")) << ' '  
+        << obsToStr(obs.measdata("L1P")) << ' '
+        << obsToStr(obs.measdata("D1P")) << ' '
+        << obsToStr(obs.measdata("S1P"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L1;
+    str << "  2P "
+        << obsToStr(obs.measdata("C2P")) << ' '
+        << obsToStr(obs.measdata("L2P")) << ' '
+        << obsToStr(obs.measdata("D2P")) << ' '
+        << obsToStr(obs.measdata("S2P"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L2;
+    str << "  2C "
+        << obsToStr(obs.measdata("C2C")) << ' '  
+        << obsToStr(obs.measdata("L2C")) << ' '
+        << obsToStr(obs.measdata("D2C")) << ' ' 
+        << obsToStr(obs.measdata("S2C"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L2;
+  }
+  else if (obs.satSys == 'E') { // Galileo
+    str << " 1C "
+        << obsToStr(obs.measdata("C1")) << ' '  
+        << obsToStr(obs.measdata("L1")) << ' '
+        << obsToStr(obs.measdata("D1")) << ' '
+        << obsToStr(obs.measdata("S1"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L1;
+
+    str << "  5C "
+        << obsToStr(obs.measdata("C5")) << ' '        
+        << obsToStr(obs.measdata("L5")) << ' '
+        << obsToStr(obs.measdata("D5")) << ' '
+        << obsToStr(obs.measdata("S5"), 8, 3) << ' '
+        << setw(2)  << obs.slip_cnt_L5;
+  }
   return str.str();
 }
Index: /trunk/BNC/src/bncrinex.h
===================================================================
--- /trunk/BNC/src/bncrinex.h	(revision 4390)
+++ /trunk/BNC/src/bncrinex.h	(revision 4391)
@@ -54,6 +54,5 @@
    }
 
-   static std::string rinexSatLine(const t_obs& obs, char lli1, char lli2,
-                                   char lli5);
+   std::string rinexSatLine(const t_obs& obs, char lli1, char lli2, char lli5);
 
    static std::string asciiSatLine(const t_obs& obs);
Index: /trunk/BNC/src/rinex/bncpostprocess.cpp
===================================================================
--- /trunk/BNC/src/rinex/bncpostprocess.cpp	(revision 4390)
+++ /trunk/BNC/src/rinex/bncpostprocess.cpp	(revision 4391)
@@ -118,7 +118,6 @@
 
   for (int iType = 0; iType < rnxObsFile->nTypes(obs.satSys); iType++) {
-    QByteArray type = rnxObsFile->obsType(obs.satSys,iType).toAscii();
-    int iEntry = obs.str2entry(type.data());
-    obs._measdata[iEntry] = rnxSat.obs[iType];
+    QString type = rnxObsFile->obsType(obs.satSys,iType).toAscii();
+    obs.setMeasdata(type, rnxSat.obs[iType]);
     // TOOD: handle slip flags
   }
Index: /trunk/BNC/src/rinex/reqcanalyze.cpp
===================================================================
--- /trunk/BNC/src/rinex/reqcanalyze.cpp	(revision 4390)
+++ /trunk/BNC/src/rinex/reqcanalyze.cpp	(revision 4391)
@@ -237,13 +237,16 @@
   // Compute the Multipath
   // ----------------------
-  if (obs.l1() != 0.0 && obs.l2() != 0.0) {
+  double L1 = obs.measdata("L1");
+  double L2 = obs.measdata("L2");
+  if (L1 != 0.0 && L2 != 0.0) {
     double f1 = t_CST::f1(obs.satSys, obs.slotNum);
     double f2 = t_CST::f2(obs.satSys, obs.slotNum);
 
-    double L1 = obs.l1() * t_CST::c / f1;
-    double L2 = obs.l2() * t_CST::c / f2;
-
-    if (obs.p1() != 0.0) {
-      newObs->_MP1 = obs.p1() - L1 - 2.0*f2*f2/(f1*f1-f2*f2) * (L1 - L2);
+    L1 = L1 * t_CST::c / f1;
+    L2 = L2 * t_CST::c / f2;
+
+    double P1 = obs.measdata("P1");
+    if (P1 != 0.0) {
+      newObs->_MP1 = P1 - L1 - 2.0*f2*f2/(f1*f1-f2*f2) * (L1 - L2);
       okFlag = true;
 
@@ -255,6 +258,7 @@
       //// end test
     }
-    if (obs.p2() != 0.0) {
-      newObs->_MP2 = obs.p2() - L2 - 2.0*f1*f1/(f1*f1-f2*f2) * (L1 - L2);
+    double P2 = obs.measdata("P2");
+    if (P2 != 0.0) {
+      newObs->_MP2 = P2 - L2 - 2.0*f1*f1/(f1*f1-f2*f2) * (L1 - L2);
       okFlag = true;
     }
