Index: trunk/BNC/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/rinex/rnxobsfile.cpp	(revision 3961)
+++ trunk/BNC/rinex/rnxobsfile.cpp	(revision 3962)
@@ -573,23 +573,25 @@
   _header._startTime   =  header._startTime;   
 
+  static const string systems = "GRES";
+
   // Copy Observation Types
   // ----------------------
-  for (unsigned ii = 0; ii < header._obsTypesV2.size(); ii++) {
-    _header._obsTypesV2.push_back(header._obsTypesV2[ii]);
-  }
-  map<char, vector<QString> >::const_iterator it;
-  for (it = header._obsTypesV3.begin(); it != header._obsTypesV3.end(); it++) {
-    char                   sys     = it->first;
-    const vector<QString>& typesV3 = it->second;
-    for (unsigned ii = 0; ii < typesV3.size(); ii++) {
-      _header._obsTypesV3[sys].push_back(typesV3[ii]);
-    }
-  }
-
-  static const string systems = "GRES";
+  if      (_trafo == trafoNone) {
+    for (unsigned ii = 0; ii < header._obsTypesV2.size(); ii++) {
+      _header._obsTypesV2.push_back(header._obsTypesV2[ii]);
+    }
+    map<char, vector<QString> >::const_iterator it;
+    for (it = header._obsTypesV3.begin(); it != header._obsTypesV3.end(); it++) {
+      char                   sys     = it->first;
+      const vector<QString>& typesV3 = it->second;
+      for (unsigned ii = 0; ii < typesV3.size(); ii++) {
+        _header._obsTypesV3[sys].push_back(typesV3[ii]);
+      }
+    }
+  }
 
   // Translate Observation Types v2 --> v3
   // -------------------------------------
-  if      (_trafo == trafo2to3) {
+  else if (_trafo == trafo2to3) {
     for (unsigned ii = 0; ii < header._obsTypesV2.size(); ii++) {
       const QString& typeV2 = header._obsTypesV2[ii];
@@ -912,2 +914,16 @@
   return "";
 }
+
+// Translate Observation Type v3 --> v2
+////////////////////////////////////////////////////////////////////////////
+QString t_rnxObsFile::type3to2(const QString& typeV3) {
+  if      (typeV3 == "C1P") {
+    return "P1";
+  }
+  else if (typeV3 == "C2P") {
+    return "P2";
+  }
+  else {
+    return typeV3.left(2);
+  }
+}
Index: trunk/BNC/rinex/rnxobsfile.h
===================================================================
--- trunk/BNC/rinex/rnxobsfile.h	(revision 3961)
+++ trunk/BNC/rinex/rnxobsfile.h	(revision 3962)
@@ -143,5 +143,5 @@
 
   QString type2to3(char sys, const QString& typeV2);
-  QString type3to2(char sys, const QString& typeV3);
+  QString type3to2(const QString& typeV3);
 
   std::map<char, std::map<int, int> > _indexMap2to3;
