Index: trunk/BNC/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/rinex/rnxobsfile.cpp	(revision 4054)
+++ trunk/BNC/rinex/rnxobsfile.cpp	(revision 4055)
@@ -716,32 +716,5 @@
   }
 
-  if (_header._version < 3.0) {
-    QString hlp;
-    QTextStream(&hlp) << QString("%1").arg(_header._obsTypesV2.size(), 6);
-    for (int ii = 0; ii < _header._obsTypesV2.size(); ii++) {
-      QTextStream(&hlp) << QString("%1").arg(_header._obsTypesV2[ii], 6);   
-      if (ii > 0 && (ii % 8 == 0 || ii == _header._obsTypesV2.size()-1)) {
-        *_stream << hlp.leftJustified(60) << "# / TYPES OF OBSERV\n";
-        hlp = QString().leftJustified(6);
-      }
-    }
-  }
-  else {
-    QMapIterator<char, QVector<QString> > it(_header._obsTypesV3);
-    while (it.hasNext()) {
-      it.next();
-      char sys                      = it.key();
-      const QVector<QString>& types = it.value();
-      QString hlp;
-      QTextStream(&hlp) << QString("%1  %2").arg(sys).arg(types.size(), 3);
-      for (int ii = 0; ii < types.size(); ii++) {
-        QTextStream(&hlp) << QString(" %1").arg(types[ii], -3);   
-        if (ii > 0 && (ii % 12 == 0 || ii == types.size()-1)) {
-          *_stream << hlp.leftJustified(60) << "SYS / # / OBS TYPES\n";
-          hlp = QString().leftJustified(6);
-        }
-      }
-    }
-  }
+  *_stream << obsTypesStrings().join("");
 
   *_stream << QString("%1")
@@ -768,4 +741,42 @@
     .leftJustified(60)
            << "END OF HEADER\n";
+}
+
+// Write Observation Types
+////////////////////////////////////////////////////////////////////////////
+QStringList t_rnxObsFile::obsTypesStrings() {
+
+  QStringList strList;
+
+  if (_header._version < 3.0) {
+    QString hlp;
+    QTextStream(&hlp) << QString("%1").arg(_header._obsTypesV2.size(), 6);
+    for (int ii = 0; ii < _header._obsTypesV2.size(); ii++) {
+      QTextStream(&hlp) << QString("%1").arg(_header._obsTypesV2[ii], 6);   
+      if (ii > 0 && (ii % 8 == 0 || ii == _header._obsTypesV2.size()-1)) {
+        strList.append(hlp.leftJustified(60) + "# / TYPES OF OBSERV\n");
+        hlp = QString().leftJustified(6);
+      }
+    }
+  }
+  else {
+    QMapIterator<char, QVector<QString> > it(_header._obsTypesV3);
+    while (it.hasNext()) {
+      it.next();
+      char sys                      = it.key();
+      const QVector<QString>& types = it.value();
+      QString hlp;
+      QTextStream(&hlp) << QString("%1  %2").arg(sys).arg(types.size(), 3);
+      for (int ii = 0; ii < types.size(); ii++) {
+        QTextStream(&hlp) << QString(" %1").arg(types[ii], -3);   
+        if (ii > 0 && (ii % 12 == 0 || ii == types.size()-1)) {
+          strList.append(hlp.leftJustified(60) + "SYS / # / OBS TYPES\n");
+          hlp = QString().leftJustified(6);
+        }
+      }
+    }
+  }
+
+  return strList;
 }
 
@@ -1034,5 +1045,5 @@
 
   if (!same) {
-    writeHeader();
-  }
-}
+    *_stream << obsTypesStrings().join("");
+  }
+}
Index: trunk/BNC/rinex/rnxobsfile.h
===================================================================
--- trunk/BNC/rinex/rnxobsfile.h	(revision 4054)
+++ trunk/BNC/rinex/rnxobsfile.h	(revision 4055)
@@ -142,4 +142,5 @@
   void checkNewHeader(const t_rnxObsHeader& header);
   void writeHeader();
+  QStringList obsTypesStrings();
   void writeEpoch(const t_rnxEpo* epo);
 
