Index: trunk/BNC/src/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 10619)
+++ trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 10979)
@@ -444,5 +444,21 @@
   if (!useObsTypes || useObsTypes->size() == 0) {
     if (int(_version) == int(header._version)) {
-      _obsTypes = header._obsTypes;
+      if (_version < 3.0) {
+        // Sanitize: a source header labeled v2 could still carry malformed
+        // (e.g. leftover 3-char) codes; always force them through type3to2.
+        QMap<char, QStringList>::const_iterator it = header._obsTypes.constBegin();
+        for ( ; it != header._obsTypes.constEnd(); ++it) {
+          char sys = it.key();
+          for (int iType = 0; iType < it.value().size(); iType++) {
+            QString conv = t_rnxObsFile::type3to2(sys, it.value().at(iType));
+            if (!_obsTypes[sys].contains(conv)) {
+              _obsTypes[sys].push_back(conv);
+            }
+          }
+        }
+      }
+      else {
+        _obsTypes = header._obsTypes;
+      }
     }
     else {
