Index: trunk/BNC/src/RTCM/RTCM2Decoder.cpp
===================================================================
--- trunk/BNC/src/RTCM/RTCM2Decoder.cpp	(revision 9088)
+++ trunk/BNC/src/RTCM/RTCM2Decoder.cpp	(revision 10599)
@@ -134,10 +134,16 @@
         for (int iSat = 0; iSat < _ObsBlock.nSat; iSat++) {
           t_satObs obs;
+          char sys;
+          int num, flag;
           if (_ObsBlock.PRN[iSat] > 100) {
-            obs._prn.set('R', _ObsBlock.PRN[iSat] % 100);
-          } else {
-            obs._prn.set('G', _ObsBlock.PRN[iSat]);
+            sys = 'R';
+            num = _ObsBlock.PRN[iSat] % 100;
           }
-          char sys = obs._prn.system();
+          else {
+            sys = 'G';
+            num = _ObsBlock.PRN[iSat];
+          }
+          flag = t_corrSSR::getSsrNavTypeFlag(sys, num);
+          obs._prn.set(sys, num, flag);
           obs._time.set(epochWeek, epochSecs);
 
@@ -283,13 +289,17 @@
     // end test
 
-    QString prn;
+    t_prn prn;
     char sys;
+    int num, flag;
     if (corr->PRN < 200) {
       sys = 'G';
-      prn = sys + QString("%1_0").arg(corr->PRN, 2, 10, QChar('0'));
-    } else {
+      num = corr->PRN;
+    }
+    else {
       sys = 'R';
-      prn = sys + QString("%1_0").arg(corr->PRN - 200, 2, 10, QChar('0'));
-    }
+      num = corr->PRN - 200;
+    }
+    flag = t_corrSSR::getSsrNavTypeFlag(sys, num);
+    prn.set(sys, num, flag);
 
     double L1 = 0;
@@ -353,6 +363,7 @@
 
       // Select corresponding ephemerides
-      const t_eph* ephLast = _ephUser.ephLast(prn);
-      const t_eph* ephPrev = _ephUser.ephPrev(prn);
+      QString prnInternalStr(prn.toInternalString().c_str());
+      const t_eph* ephLast = _ephUser.ephLast(prnInternalStr);
+      const t_eph* ephPrev = _ephUser.ephPrev(prnInternalStr);
       if (ephLast && ephLast->IOD() == IODcorr) {
         eph = ephLast;
@@ -376,10 +387,16 @@
         if (*obsVal == 0)
           *obsVal = ZEROVALUE;
-
+        char sys;
+        int num, flag;
         if (corr->PRN < 200) {
-          new_obs._prn.set('G', corr->PRN);
-        } else {
-          new_obs._prn.set('R', corr->PRN - 200);
+          sys = 'G';
+          num = corr->PRN;
         }
+        else {
+          sys = 'R';
+          num = corr->PRN - 200;
+        }
+        flag = t_corrSSR::getSsrNavTypeFlag(sys, num);
+        new_obs._prn.set(sys, num, flag);
         new_obs._time.set(GPSWeek_rcv, GPSWeeks_rcv);
 
@@ -432,5 +449,5 @@
 
       errmsg.push_back(
-          "missing eph for " + string(prn.toLatin1().data()) + " , IODs "
+          "missing eph for " + prn.toString() + " , IODs "
               + missingIODstr.str());
     }
