Index: trunk/BNC/src/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 6809)
+++ trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 6815)
@@ -75,4 +75,5 @@
   _comments.clear();
   int numLines = 0;
+
   while ( stream->status() == QTextStream::Ok && !stream->atEnd() ) {
     QString line = stream->readLine(); ++ numLines;
@@ -199,5 +200,5 @@
         QString hlp;
         *in >> hlp;
-        if (sys == 'C') {
+        if (sys == 'C' && _version == 3.02){
           hlp.replace('2', '1');
         }
@@ -214,11 +215,25 @@
     }
     else if (key == "SYS / PHASE SHIFT"){
-      QTextStream in(value.toAscii(), QIODevice::ReadOnly);
-      char sys;
-      QString obstype;
-      double shift;
-      in >> sys >> obstype >> shift;
-      if (obstype.size())
-        _phaseShifts.insert(sys, QPair<QString, double>(obstype, shift));
+      QTextStream* in = new QTextStream(value.toAscii(), QIODevice::ReadOnly);
+      char        sys;
+      QString     obstype;
+      double      shift;
+      int         satnum = 0;
+      QStringList satList;
+      QString     sat;
+      *in >> sys >> obstype >> shift >> satnum;
+      if (obstype.size()) {
+        for (int ii = 0; ii < satnum; ii++) {
+          if (ii > 0 && ii % 10 == 0) {
+            line = stream->readLine(); ++numLines;
+            delete in;
+            in = new QTextStream(line.left(60).toAscii(), QIODevice::ReadOnly);
+          }
+          *in >> sat;
+          satList.append(sat);
+        }
+        _phaseShifts.insert(sys+obstype, QPair<double, QStringList>(shift, satList));
+        delete in;
+      }
     }
     else if (key == "GLONASS COD/PHS/BIS"){
@@ -302,7 +317,9 @@
   else {
     _obsTypes['G'] << "C1C" << "L1C"  << "S1C" 
+                   << "C1W" << "L1W"  << "S1W"
+                   << "C2X" << "L2X"  << "S2X"
                    << "C2W" << "L2W"  << "S2W" 
-                   << "C5"  << "L5"   << "S5";
-    
+                   << "C5X" << "L5X"  << "S5X";
+
     _obsTypes['J'] = _obsTypes['G'];
     
@@ -310,15 +327,16 @@
                    << "C2P" << "L2P" << "S2P";
     
-    _obsTypes['E'] << "C1" << "L1" << "S1"
-                   << "C5" << "L5" << "S5" 
-                   << "C7" << "L7" << "S7"
-                   << "C8" << "L8" << "S8";
+    _obsTypes['E'] << "C1X" << "L1X" << "SX1"
+                   << "C5X" << "L5X" << "SX5"
+                   << "C7X" << "L7X" << "SX7"
+                   << "C8X" << "L8X" << "SX8";
     
-    _obsTypes['S'] << "C1" << "L1" << "S1" 
-                   << "C5" << "L5" << "S5";
+    _obsTypes['S'] << "C1C" << "L1C" << "S1C"
+                   << "C5I" << "L5I" << "S5I"
+                   << "C5Q" << "L5Q" << "S5Q";
     
-    _obsTypes['C'] << "C1" << "L1" << "S1"
-                   << "C6" << "L6" << "S6"
-                   << "C7" << "L7" << "S7";
+    _obsTypes['C'] << "C2I" << "L2I" << "S2I"
+                   << "C6I" << "L6I" << "S6I"
+                   << "C7I" << "L7I" << "S7I";
   }
 }
@@ -353,5 +371,5 @@
   _usedSystems     = header._usedSystems;
   if (_version >= 3.0) {
-    _phaseShifts   = header._phaseShifts;
+    _phaseShifts    = header._phaseShifts;
     _gloPhaseBiases = header._gloPhaseBiases;
     _gloSlots       = header._gloSlots;
@@ -561,21 +579,65 @@
   if (_version >= 3.0) {
     if (_phaseShifts.empty()) {
-      QString sys = _usedSystems;
-      for (int ii = 0; ii < sys.size(); ii++) {
-        *stream << QString("%1")
-          .arg(sys[ii], 0)
+      QMap<char, QStringList>::const_iterator it;
+      for (it = _obsTypes.begin(); it != _obsTypes.end(); ++it) {
+        char sys = it.key();
+        double shift = 0.0;
+        foreach (const QString &obstype, it.value()) {
+          if (obstype.left(1).contains('L')) {
+          *stream << QString("%1 %2 %3")
+            .arg(sys, 0)
+            .arg(obstype, 0)
+            .arg(shift, 9, 'f', 5)
+            .leftJustified(60)
+             << "SYS / PHASE SHIFT\n";
+          }
+        }
+      }
+    } else {
+      QMap<QString, QPair<double, QStringList> >::const_iterator it;
+      QString emptyFillStr;
+      for(it = _phaseShifts.begin(); it!= _phaseShifts.end(); ++it) {
+        QString sys         = it.key().left(1);
+        QString obstype     = it.key().mid(1);
+        double shift        = it.value().first;
+        QStringList satList =  it.value().second;
+        QString hlp = QString("%1 %2 %3 ")
+          .arg(sys.toStdString().c_str(), 0)
+          .arg(obstype, 4)
+          .arg(shift, 9, 'f', 5);
+        if (!satList.empty()) {
+          hlp += QString("%1 ").arg(satList.size(), 2);
+        }
+        else {
+          *stream << QString("%1")
+            .arg(hlp, 0)
+            .leftJustified(60)
+             << "SYS / PHASE SHIFT\n";
+          hlp = "";
+        }
+        int ii = 0;
+        QStringList::const_iterator it_s;
+        for (it_s = satList.begin(); it_s != satList.end(); ++it_s) {
+          (hlp.contains(obstype)) ?
+             emptyFillStr = "":
+             emptyFillStr = "                    ";
+          hlp += QString("%1 ").arg(*it_s);
+          ii++;
+          if (ii % 10 == 0) {
+            *stream << QString("%1%2")
+              .arg(emptyFillStr, 0)
+              .arg(hlp, 0)
+              .leftJustified(60)
+              << "SYS / PHASE SHIFT\n";
+            hlp = "";
+          }
+        }
+        if (hlp.size()) {
+        *stream <<  QString("%1%2")
+          .arg(emptyFillStr, 0)
+          .arg(hlp, 0)
           .leftJustified(60)
-           << "SYS / PHASE SHIFT\n";
-      }
-    } else {
-      QMultiHash<char, QPair<QString, double> >::const_iterator it = _phaseShifts.begin();
-      while(it != _phaseShifts.end()) {
-        *stream << QString("%1%2%3")
-          .arg(it.key(), 0)
-          .arg(it.value().first, 4)
-          .arg(it.value().second, 9, 'f', 5)
-          .leftJustified(60)
-           << "SYS / PHASE SHIFT\n";
-        it++;
+          << "SYS / PHASE SHIFT\n";
+        }
       }
     }
@@ -623,5 +685,4 @@
     }
   }
-
 
   *stream << QString()
Index: trunk/BNC/src/rinex/rnxobsfile.h
===================================================================
--- trunk/BNC/src/rinex/rnxobsfile.h	(revision 6809)
+++ trunk/BNC/src/rinex/rnxobsfile.h	(revision 6815)
@@ -44,5 +44,5 @@
  public:
   static const double  defaultRnxObsVersion2 = 2.11;
-  static const double  defaultRnxObsVersion3 = 3.02;
+  static const double  defaultRnxObsVersion3 = 3.03;
   static const QString defaultSystems;
 
@@ -87,5 +87,5 @@
   int                     _wlFactorsL2[t_prn::MAXPRN_GPS+1];
   bncTime                 _startTime;
-  QMultiHash<char, QPair<QString, double> > _phaseShifts;
+  QMap<QString, QPair<double, QStringList> > _phaseShifts;
 };
 
