Index: /trunk/BNC/bncpostprocess.cpp
===================================================================
--- /trunk/BNC/bncpostprocess.cpp	(revision 3703)
+++ /trunk/BNC/bncpostprocess.cpp	(revision 3704)
@@ -153,6 +153,6 @@
       obs.GPSWeek  = epo->tt.gpsw();
       obs.GPSWeeks = epo->tt.gpssec();
-      for (int iType = 0; iType < _rnxObsFile->nTypes(); iType++) {
-        QByteArray type = _rnxObsFile->obsType(iType).toAscii();
+      for (int iType = 0; iType < _rnxObsFile->nTypes(obs.satSys); iType++) {
+        QByteArray type = _rnxObsFile->obsType(obs.satSys,iType).toAscii();
         if      (type == "C1") {
           obs.C1 = satObs[iType];
Index: /trunk/BNC/rnxobsfile.cpp
===================================================================
--- /trunk/BNC/rnxobsfile.cpp	(revision 3703)
+++ /trunk/BNC/rnxobsfile.cpp	(revision 3704)
@@ -99,5 +99,5 @@
         QString hlp;
         in >> hlp;
-        _obsTypes << hlp;
+        _obsTypesV2 << hlp;
       }
     }
@@ -181,5 +181,6 @@
       line = _stream->readLine();
       _currEpo.satObs[iSat].prn = line.mid(0,3);
-      for (int iType = 0; iType < _header.nTypes(); iType++) {
+      char sys = _currEpo.satObs[iSat].prn[0].toAscii();
+      for (int iType = 0; iType < _header.nTypes(sys); iType++) {
         int pos = 16*iType;
         readDbl(line, pos,     14, _currEpo.satObs[iSat][iType]);
@@ -248,5 +249,6 @@
 
       _currEpo.satObs[iSat].prn = prn;
-      _currEpo.satObs[iSat].ReSize(_header.nTypes());
+      char sys = prn[0].toAscii();
+      _currEpo.satObs[iSat].ReSize(_header.nTypes(sys));
     }
 
@@ -257,5 +259,6 @@
       pos  = 0;
       QString prn = _currEpo.satObs[iSat].prn;
-      for (int iType = 0; iType < _header.nTypes(); iType++) {
+      char sys = prn[0].toAscii();
+      for (int iType = 0; iType < _header.nTypes(sys); iType++) {
         if (iType > 0 && iType % 5 == 0) {
           line = _stream->readLine();
Index: /trunk/BNC/rnxobsfile.h
===================================================================
--- /trunk/BNC/rnxobsfile.h	(revision 3703)
+++ /trunk/BNC/rnxobsfile.h	(revision 3704)
@@ -42,6 +42,30 @@
     t_irc read(QTextStream* stream);
     float version() const {return _version;}
-    int   nTypes() const {return _obsTypes.size();}
-    const QString& obsType(int index) const {return _obsTypes.at(index);}
+    int   nTypes(char sys) const {
+      if (_version < 3.0) {
+        return _obsTypesV2.size();
+      }
+      else {
+        if (_obsTypesV3.find(sys) != _obsTypesV3.end()) {
+          return _obsTypesV3.size();
+        }
+        else {
+          return 0;
+        }
+      }
+    }
+    QString obsType(char sys, int index) const {
+      if (_version < 3.0) {
+        return _obsTypesV2.at(index);
+      }
+      else {
+        if (_obsTypesV3.find(sys) != _obsTypesV3.end()) {
+          return _obsTypesV3[sys].at(index);
+        }
+        else {
+          return QString();
+        }
+      }
+    }
     const QString& antennaName() const {return _antennaName;}
     const QString& markerName() const {return _markerName;}
@@ -49,10 +73,11 @@
     const ColumnVector& antNEU() const {return _antNEU;}
    private:
-    float        _version;
-    QString      _antennaName;
-    QString      _markerName;
-    ColumnVector _antNEU;
-    ColumnVector _xyz;
-    QStringList  _obsTypes;
+    float                   _version;
+    QString                 _antennaName;
+    QString                 _markerName;
+    ColumnVector            _antNEU;
+    ColumnVector            _xyz;
+    QStringList             _obsTypesV2;
+    QMap<char, QStringList> _obsTypesV3;
   };
  
@@ -61,6 +86,6 @@
   ~t_rnxObsFile();
 
-  int   nTypes() const {return _header.nTypes();}
-  const QString& obsType(int index) const {return _header.obsType(index);}
+  int   nTypes(char sys) const {return _header.nTypes(sys);}
+  QString obsType(char sys, int index) const {return _header.obsType(sys, index);}
   const QString& antennaName() const {return _header.antennaName();}
   const QString& markerName() const {return _header.markerName();}
