Index: trunk/BNC/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/rinex/rnxobsfile.cpp	(revision 3959)
+++ trunk/BNC/rinex/rnxobsfile.cpp	(revision 3960)
@@ -595,6 +595,13 @@
       const QString& typeV2 = header._obsTypesV2[ii];
       for (unsigned iSys = 0; iSys < systems.length(); iSys++) {
-        char sys = systems[iSys];
-        _header._obsTypesV3[sys].push_back( type2to3(sys, typeV2) );
+        char    sys    = systems[iSys];
+        QString typeV3 =  type2to3(sys, typeV2);
+        if (!typeV3.isEmpty()) {
+          _header._obsTypesV3[sys].push_back(typeV3);
+          _indexMap2to3[sys][ii] = _header._obsTypesV3[sys].size() - 1;
+        }
+        else {
+          _indexMap2to3[sys][ii] = -1;
+        }
       }
     }
Index: trunk/BNC/rinex/rnxobsfile.h
===================================================================
--- trunk/BNC/rinex/rnxobsfile.h	(revision 3959)
+++ trunk/BNC/rinex/rnxobsfile.h	(revision 3960)
@@ -141,5 +141,10 @@
   const t_rnxEpo* nextEpochV3();
   void handleEpochFlag(int flag, const QString& line);
+
   QString type2to3(char sys, const QString& typeV2);
+  QString type3to2(char sys, const QString& typeV3);
+
+  std::map<char, std::map<int, int> > _indexMap2to3;
+  std::map<char, std::map<int, int> > _indexMap3to2;
 
   e_inpOut       _inpOut;
