Index: trunk/BNC/src/bnccore.cpp
===================================================================
--- trunk/BNC/src/bnccore.cpp	(revision 9757)
+++ trunk/BNC/src/bnccore.cpp	(revision 9760)
@@ -288,10 +288,5 @@
   if (_rinexVers == 0) {
 
-    if ( Qt::CheckState(settings.value("ephV2").toInt()) == Qt::Checked) {
-      _rinexVers = 2;
-    }
-    else {
-      _rinexVers = 3;
-    }
+    _rinexVers = settings.value("ephVersion").toInt();
 
     _ephPath = settings.value("ephPath").toString();
@@ -313,10 +308,8 @@
     QString ephFileNameGPS = _ephPath + "BRDC";
 
-    bool ephV2 = (_rinexVers == 2)? true : false;
-
     QString hlpStr = bncRinex::nextEpochStr(datTim,
-                         settings.value("ephIntr").toString(), ephV2);
-
-    if (_rinexVers == 3) {
+                         settings.value("ephIntr").toString(), _rinexVers);
+
+    if (_rinexVers > 2) {
       QString country = "WRD"; // WORLD
       QString monNum = "0";
@@ -359,5 +352,5 @@
     _ephStreamGPS->setDevice(_ephFileGPS);
 
-    if      (_rinexVers == 3) {
+    if      (_rinexVers > 2) {
       _ephFileGlonass   = _ephFileGPS;
       _ephStreamGlonass = _ephStreamGPS;
@@ -367,5 +360,5 @@
       _ephStreamSBAS    = _ephStreamGPS;
     }
-    else if (_rinexVers == 2) {
+    else {
       QString ephFileNameGlonass = _ephPath + "BRDC" +
           QString("%1").arg(datTim.date().dayOfYear(), 3, 10, QChar('0')) +
@@ -388,5 +381,5 @@
     // Header - RINEX Version 3
     // ------------------------
-    if (_rinexVers == 3) {
+    if (_rinexVers > 2) {
       if ( ! (appendFlagGPS & QIODevice::Append)) {
         QString line = QString().asprintf("%9.2f%11sN: GNSS NAV DATA    M: Mixed%12sRINEX VERSION / TYPE\n",
@@ -415,5 +408,5 @@
     // Headers - RINEX Version 2
     // -------------------------
-    else if (_rinexVers == 2) {
+    else {
       if (! (appendFlagGPS & QIODevice::Append)) {
         QString line = QString().asprintf("%9.2f%11sN: GPS NAV DATA%25sRINEX VERSION / TYPE\n",
@@ -470,13 +463,14 @@
   QString strV2 = eph.toString(defaultRnxNavVersion2);
   QString strV3 = eph.toString(defaultRnxNavVersion3);
+  QString strV4 = eph.toString(defaultRnxNavVersion4);
 
   if     (_rinexVers == 2 && eph.type() == t_eph::GLONASS) {
-    printOutputEph(printFile, _ephStreamGlonass, strV2, strV3);
+    printOutputEph(printFile, _ephStreamGlonass, strV2, strV3, strV4);
   }
   else if(_rinexVers == 2 && eph.type() == t_eph::GPS)  {
-    printOutputEph(printFile, _ephStreamGPS, strV2, strV3);
+    printOutputEph(printFile, _ephStreamGPS, strV2, strV3, strV4);
   }
   else if (_rinexVers == 3) {
-    printOutputEph(printFile, _ephStreamGPS, strV2, strV3);
+    printOutputEph(printFile, _ephStreamGPS, strV2, strV3, strV4);
   }
 }
@@ -485,14 +479,18 @@
 ////////////////////////////////////////////////////////////////////////////
 void t_bncCore::printOutputEph(bool printFile, QTextStream* stream,
-                               const QString& strV2, const QString& strV3) {
+                               const QString& strV2, const QString& strV3,
+                               const QString& strV4) {
 
   // Output into file
   // ----------------
   if (printFile && stream) {
-    if (_rinexVers == 2) {
+    if     (_rinexVers == 2) {
       *stream << strV2.toLatin1();
     }
-    else {
+    else if (_rinexVers == 3) {
       *stream << strV3.toLatin1();
+    }
+    else if (_rinexVers == 4) {
+      *stream << strV4.toLatin1();
     }
     stream->flush();
Index: trunk/BNC/src/bnccore.h
===================================================================
--- trunk/BNC/src/bnccore.h	(revision 9757)
+++ trunk/BNC/src/bnccore.h	(revision 9760)
@@ -117,5 +117,6 @@
   void  printEph(const t_eph& eph, bool printFile);
   void  printOutputEph(bool printFile, QTextStream* stream,
-                       const QString& strV2, const QString& strV3);
+                       const QString& strV2, const QString& strV3,
+                       const QString& strV4);
   void  messagePrivate(const QByteArray& msg);
 
Index: trunk/BNC/src/bncmain.cpp
===================================================================
--- trunk/BNC/src/bncmain.cpp	(revision 9757)
+++ trunk/BNC/src/bncmain.cpp	(revision 9760)
@@ -116,5 +116,5 @@
       "   rnxScript      {File upload script, full path [character string]}\n"
       "   rnxV2Priority  {Priority of signal attributes [character string, list separated by blank character, example: G:12&PWCSLXYN G:5&IQX C:IQX]}\n"
-      "   rnxV2          {Produce version 2 file contents [integer number: 0=no,2=yes]}\n"
+      "   rnxVersion     {Specifies the RINEX version of the file contents [integer number: 2|3|4 ]}\n"
       "\n"
       "RINEX Ephemeris Panel keys:\n"
@@ -122,5 +122,5 @@
       "   ephIntr        {File interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
       "   ephOutPort     {Output port [integer number]}\n"
-      "   ephV2          {Produce version 2 file contents [integer number: 0=no,2=yes]}\n"
+      "   ephVersion     {Specifies the RINEX version of the file contents [integer number: 2|3|4]}\n"
       "\n"
       "RINEX Editing and QC Panel keys:\n"
Index: trunk/BNC/src/bncrinex.cpp
===================================================================
--- trunk/BNC/src/bncrinex.cpp	(revision 9757)
+++ trunk/BNC/src/bncrinex.cpp	(revision 9760)
@@ -116,5 +116,5 @@
   _writeRinexFileOnlyWithSkl = settings.value("rnxOnlyWithSKL").toBool();
 
-  _rnxV2 = (Qt::CheckState(settings.value("rnxV2").toInt()) == Qt::Checked) ? true : false;
+  _rnxVersion = settings.value("rnxVersion").toInt();
 }
 
@@ -250,5 +250,5 @@
 ////////////////////////////////////////////////////////////////////////////
 QString bncRinex::nextEpochStr(const QDateTime& datTim,
-                               const QString& intStr, bool rnxV2,
+                               const QString& intStr, int rnxVersion,
                                QDateTime* nextEpoch) {
 
@@ -262,5 +262,5 @@
   if ( indHlp != -1) {
     int step = intStr.left(indHlp-1).toInt();
-    if (!rnxV2) {
+    if (rnxVersion > 2) {
       epoStr +=  QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0')); // H
     } else {
@@ -289,5 +289,5 @@
       }
     }
-    if (!rnxV2) {
+    if (rnxVersion > 2) {
       epoStr += QString("_%1M").arg(step, 2, 10, QChar('0'));                // period
     }
@@ -295,5 +295,5 @@
   else if (intStr == "1 hour") {
     int step = intStr.left(indHlp-1).toInt();
-    if (!rnxV2) {
+    if (rnxVersion > 2) {
       epoStr += QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0'));  // H
       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                     // M
@@ -313,5 +313,5 @@
   else {
     int step = intStr.left(indHlp-1).toInt();
-    if (!rnxV2) {
+    if (rnxVersion > 2) {
       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // H
       epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // M
@@ -344,5 +344,5 @@
 
   QString hlpStr = nextEpochStr(datTim, settings.value("rnxIntr").toString(),
-                                _rnxV2, &_nextCloseEpoch);
+                                _rnxVersion, &_nextCloseEpoch);
 
   int n = _statID.size();
@@ -390,5 +390,5 @@
   _localSklNameAlternative = sklPath + ID.toLower() + distStr + "." + sklExt;
 
-  if (!_rnxV2) {
+  if (_rnxVersion > 2) {
     QString country;
     QString monNum = "0";
@@ -438,5 +438,5 @@
   // Set RINEX Version
   // -----------------
-  int intHeaderVers = (Qt::CheckState(settings.value("rnxV2").toInt()) == Qt::Checked ? 2 : 3);
+  int intHeaderVers = settings.value("rnxVersion").toInt();
 
   // Open the Output File
Index: trunk/BNC/src/bncrinex.h
===================================================================
--- trunk/BNC/src/bncrinex.h	(revision 9757)
+++ trunk/BNC/src/bncrinex.h	(revision 9760)
@@ -47,5 +47,5 @@
    static QString nextEpochStr(const QDateTime& datTim,
                                const QString& intStr,
-                               bool rnxV2,
+                               int rnxVersion,
                                QDateTime* nextEpoch = 0);
    static std::string asciiSatLine(const t_satObs& obs, bool outLockTime);
@@ -71,5 +71,5 @@
    QString         _localSklNameAlternative;
    bool            _writeRinexFileOnlyWithSkl;
-   bool            _rnxV2;
+   int             _rnxVersion;
    QByteArray      _latitude;
    QByteArray      _longitude;
Index: trunk/BNC/src/bncsettings.cpp
===================================================================
--- trunk/BNC/src/bncsettings.cpp	(revision 9757)
+++ trunk/BNC/src/bncsettings.cpp	(revision 9760)
@@ -92,10 +92,10 @@
     setValue_p("rnxV2Priority",       "");
     setValue_p("rnxScript",           "");
-    setValue_p("rnxV2",              "0");
+    setValue_p("rnxVersion",         "3");
     // RINEX Ephemeris
     setValue_p("ephPath",             "");
     setValue_p("ephIntr",        "1 day");
     setValue_p("ephOutPort",          "");
-    setValue_p("ephV2",              "0");
+    setValue_p("ephVersion",         "3");
     // Reqc
     setValue_p("reqcAction",          "");
Index: trunk/BNC/src/bncwindow.cpp
===================================================================
--- trunk/BNC/src/bncwindow.cpp	(revision 9757)
+++ trunk/BNC/src/bncwindow.cpp	(revision 9760)
@@ -210,7 +210,7 @@
   _onTheFlyComboBox->setEditable(false);
   _onTheFlyComboBox->addItems(QString("no,1 day,1 hour,5 min,1 min").split(","));
-  int ii = _onTheFlyComboBox->findText(settings.value("onTheFlyInterval").toString());
-  if (ii != -1) {
-    _onTheFlyComboBox->setCurrentIndex(ii);
+  int go = _onTheFlyComboBox->findText(settings.value("onTheFlyInterval").toString());
+  if (go != -1) {
+    _onTheFlyComboBox->setCurrentIndex(go);
   }
   _autoStartCheckBox  = new QCheckBox();
@@ -220,13 +220,13 @@
   // RINEX Observations Options
   // --------------------------
-  _rnxPathLineEdit    = new QLineEdit(settings.value("rnxPath").toString());
-  _rnxIntrComboBox    = new QComboBox();
+  _rnxPathLineEdit = new QLineEdit(settings.value("rnxPath").toString());
+  _rnxIntrComboBox = new QComboBox();
   _rnxIntrComboBox->setEditable(false);
   _rnxIntrComboBox->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(","));
-  ii = _rnxIntrComboBox->findText(settings.value("rnxIntr").toString());
+  int ii = _rnxIntrComboBox->findText(settings.value("rnxIntr").toString());
   if (ii != -1) {
     _rnxIntrComboBox->setCurrentIndex(ii);
   }
-  _rnxSamplComboBox    = new QComboBox();
+  _rnxSamplComboBox = new QComboBox();
   _rnxSamplComboBox->setEditable(false);
   _rnxSamplComboBox->addItems(QString("0.1 sec,1 sec,5 sec,10 sec,15 sec,30 sec,60 sec").split(","));
@@ -240,12 +240,18 @@
   _rnxSkelExtComboBox->setEditable(false);
   _rnxSkelExtComboBox->addItems(QString("skl, SKL").split(","));
-  int il = _rnxSkelExtComboBox->findText(settings.value("rnxSkel").toString());
+  int ik = _rnxSkelExtComboBox->findText(settings.value("rnxSkel").toString());
+  if (ik != -1) {
+    _rnxSkelExtComboBox->setCurrentIndex(ik);
+  }
+  _rnxSkelPathLineEdit = new QLineEdit(settings.value("rnxSkelPath").toString());
+  _rnxScrpLineEdit = new QLineEdit(settings.value("rnxScript").toString());
+  _rnxVersComboBox = new QComboBox();
+  _rnxVersComboBox->setEditable(false);
+  _rnxVersComboBox->addItems(QString("4,3,2").split(","));
+  _rnxVersComboBox->setMaximumWidth(7*ww);
+  int il = _rnxVersComboBox->findText(settings.value("rnxVersion").toString());
   if (il != -1) {
-    _rnxSkelExtComboBox->setCurrentIndex(il);
-  }
-  _rnxSkelPathLineEdit  = new QLineEdit(settings.value("rnxSkelPath").toString());
-  _rnxScrpLineEdit    = new QLineEdit(settings.value("rnxScript").toString());
-  _rnxV2CheckBox      = new QCheckBox();
-  _rnxV2CheckBox->setCheckState(Qt::CheckState(settings.value("rnxV2").toInt()));
+    _rnxVersComboBox->setCurrentIndex(il);
+  }
   QString hlp = settings.value("rnxV2Priority").toString();
   if (hlp.isEmpty()) {
@@ -256,19 +262,25 @@
   connect(_rnxPathLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(slotBncTextChanged()));
   connect(_rnxSkelPathLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(slotBncTextChanged()));
-  connect(_rnxV2CheckBox, SIGNAL(stateChanged(int)), this, SLOT(slotBncTextChanged()));
+  connect(_rnxVersComboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(slotBncTextChanged()));
 
   // RINEX Ephemeris Options
   // -----------------------
-  _ephPathLineEdit    = new QLineEdit(settings.value("ephPath").toString());
-  _ephIntrComboBox    = new QComboBox();
+  _ephPathLineEdit = new QLineEdit(settings.value("ephPath").toString());
+  _ephIntrComboBox = new QComboBox();
   _ephIntrComboBox->setEditable(false);
   _ephIntrComboBox->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(","));
-  int jj = _ephIntrComboBox->findText(settings.value("ephIntr").toString());
-  if (jj != -1) {
-    _ephIntrComboBox->setCurrentIndex(jj);
-  }
-  _ephOutPortLineEdit    = new QLineEdit(settings.value("ephOutPort").toString());
-  _ephV2CheckBox = new QCheckBox();
-  _ephV2CheckBox->setCheckState(Qt::CheckState(settings.value("ephV2").toInt()));
+  int ji = _ephIntrComboBox->findText(settings.value("ephIntr").toString());
+  if (ji != -1) {
+    _ephIntrComboBox->setCurrentIndex(ji);
+  }
+  _ephOutPortLineEdit = new QLineEdit(settings.value("ephOutPort").toString());
+  _ephVersComboBox = new QComboBox();
+  _ephVersComboBox->setEditable(false);
+  _ephVersComboBox->addItems(QString("4,3,2").split(","));
+  _ephVersComboBox->setMaximumWidth(7*ww);
+  int jk = _ephVersComboBox->findText(settings.value("ephVersion").toString());
+  if (jk != -1) {
+    _ephVersComboBox->setCurrentIndex(jk);
+  }
 
   connect(_ephOutPortLineEdit, SIGNAL(textChanged(const QString &)),
@@ -284,7 +296,7 @@
   _corrIntrComboBox->setEditable(false);
   _corrIntrComboBox->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(","));
-  int mm = _corrIntrComboBox->findText(settings.value("corrIntr").toString());
-  if (mm != -1) {
-    _corrIntrComboBox->setCurrentIndex(mm);
+  int bi = _corrIntrComboBox->findText(settings.value("corrIntr").toString());
+  if (bi != -1) {
+    _corrIntrComboBox->setCurrentIndex(bi);
   }
   _corrPortLineEdit    = new QLineEdit(settings.value("corrPort").toString());
@@ -298,6 +310,6 @@
   // Feed Engine Options
   // -------------------
-  _outPortLineEdit    = new QLineEdit(settings.value("outPort").toString());
-  _outWaitSpinBox   = new QSpinBox();
+  _outPortLineEdit = new QLineEdit(settings.value("outPort").toString());
+  _outWaitSpinBox = new QSpinBox();
   _outWaitSpinBox->setMinimum(0);
   _outWaitSpinBox->setMaximum(30);
@@ -305,5 +317,5 @@
   _outWaitSpinBox->setSuffix(" sec");
   _outWaitSpinBox->setValue(settings.value("outWait").toInt());
-  _outSamplComboBox    = new QComboBox();
+  _outSamplComboBox = new QComboBox();
   _outSamplComboBox->addItems(QString("0.1 sec,1 sec,5 sec,10 sec,15 sec,30 sec,60 sec").split(","));
   int nn = _outSamplComboBox->findText(settings.value("outSampl").toString());
@@ -311,6 +323,6 @@
       _outSamplComboBox->setCurrentIndex(nn);
     }
-  _outFileLineEdit    = new QLineEdit(settings.value("outFile").toString());
-  _outUPortLineEdit   = new QLineEdit(settings.value("outUPort").toString());
+  _outFileLineEdit = new QLineEdit(settings.value("outFile").toString());
+  _outUPortLineEdit = new QLineEdit(settings.value("outUPort").toString());
   _outLockTimeCheckBox = new QCheckBox();
   _outLockTimeCheckBox->setCheckState(Qt::CheckState(settings.value("outLockTime").toInt()));
@@ -497,7 +509,7 @@
   _cmbMethodComboBox->setEditable(false);
   _cmbMethodComboBox->addItems(QString("Kalman Filter,Single-Epoch").split(","));
-  int im = _cmbMethodComboBox->findText(settings.value("cmbMethod").toString());
-  if (im != -1) {
-    _cmbMethodComboBox->setCurrentIndex(im);
+  int cm = _cmbMethodComboBox->findText(settings.value("cmbMethod").toString());
+  if (cm != -1) {
+    _cmbMethodComboBox->setCurrentIndex(cm);
   }
 
@@ -802,6 +814,6 @@
   oLayout->addWidget(new QLabel("Script (full path)"),             5, 0);
   oLayout->addWidget(_rnxScrpLineEdit,                             5, 1, 1, 15);
-  oLayout->addWidget(new QLabel("Version 2"),                      6, 0);
-  oLayout->addWidget(_rnxV2CheckBox,                               6, 1);
+  oLayout->addWidget(new QLabel("Version"),                        6, 0);
+  oLayout->addWidget(_rnxVersComboBox,                             6, 1);
   oLayout->addWidget(new QLabel("Signal priority"),                6, 2, Qt::AlignRight);
   oLayout->addWidget(_rnxV2Priority,                               6, 3, 1, 13);
@@ -825,6 +837,6 @@
   eLayout->addWidget(new QLabel("Port"),                          3, 0);
   eLayout->addWidget(_ephOutPortLineEdit,                         3, 1);
-  eLayout->addWidget(new QLabel("Version 2"),                     4, 0);
-  eLayout->addWidget(_ephV2CheckBox,                              4, 1);
+  eLayout->addWidget(new QLabel("Version"),                       4, 0);
+  eLayout->addWidget(_ephVersComboBox,                            4, 1);
   eLayout->setRowStretch(5, 999);
 
@@ -1131,7 +1143,7 @@
   _reqcActionComboBox->setEditable(false);
   _reqcActionComboBox->addItems(QString(",Edit/Concatenate,Analyze").split(","));
-  int ik = _reqcActionComboBox->findText(settings.value("reqcAction").toString());
-  if (ik != -1) {
-    _reqcActionComboBox->setCurrentIndex(ik);
+  int ip = _reqcActionComboBox->findText(settings.value("reqcAction").toString());
+  if (ip != -1) {
+    _reqcActionComboBox->setCurrentIndex(ip);
   }
   connect(_reqcActionComboBox, SIGNAL(currentIndexChanged(const QString &)),
@@ -1379,5 +1391,5 @@
   _rnxScrpLineEdit->setWhatsThis(tr("<p>Whenever a RINEX Observation file is finally saved, you may want to compress, copy or upload it immediately, for example via FTP. BNC allows you to execute a script/batch file to carry out such operation.</p><p>Specify the full path of a script or batch file. BNC will pass the full RINEX Observation file path to the script as command line parameter (%1 on Windows systems, $1 on Unix/Linux/Mac systems). <i>[key: rnxScript]</i></p>"));
   _rnxV2Priority->setWhatsThis(tr("<p>Specify a priority list of characters defining signal attributes as defined in RINEX Version 3. Priorities will be used to map observations with RINEX Version 3 attributes from incoming streams to Version 2. The underscore character '_' stands for undefined attributes. A question mark '?' can be used as wildcard which represents any one character.</p><p>Signal priorities can be specified as equal for all systems, as system specific or as system and freq. specific. For example: </li><ul><li>'CWPX_?' (General signal priorities valid for all GNSS) </li><li>'I:ABCX' (System specific signal priorities for IRNSS) </li><li>'G:12&PWCSLX G:5&IQX R:12&PC R:3&IQX' (System and frequency specific signal priorities) </li></ul>Default is the following priority list 'G:12&PWCSLX G:5&IQX R:12&PC R:3&IQX R:46&ABX E:16&BCXZ E:578&IQX J:1&SLXCZ J:26&SLX J:5&IQX C:267&IQX C:128&DPX C:7&DPZ I:ABCX S:1&C S:5&IQX'. <i>[key: rnxV2Priority]</i></p>"));
-  _rnxV2CheckBox->setWhatsThis(tr("<p>The default format for RINEX Observation files is RINEX Version 3.</p><p>Select 'Version 2' if you want to save observations in RINEX Version 2 format. <i>[key: rnxV2]</i></p>"));
+  _rnxVersComboBox->setWhatsThis(tr("<p>Select the format for RINEX Observation files. <i>[key: rnxVersion]</i></p>"));
 
   // WhatsThis, RINEX Ephemeris
@@ -1386,5 +1398,5 @@
   _ephIntrComboBox->setWhatsThis(tr("<p>Select the length of the RINEX Navigation file. <i>[key: ephIntr]</i></p>"));
   _ephOutPortLineEdit->setWhatsThis(tr("<p>BNC can produce ephemeris data in RINEX Navigation ASCII format on your local host through an IP port.</p><p>Specify a port number here to activate this function. <i>[key: ephOutPort]</i></p>"));
-  _ephV2CheckBox->setWhatsThis(tr("<p>The default format for output of RINEX Navigation data containing Broadcast Ephemeris is RINEX Version 3.</p><p>Select 'Version 2' if you want to output ephemeris in RINEX Version 2 format. <i>[key: ephV2]</i></p>"));
+  _ephVersComboBox->setWhatsThis(tr("<p>Select the format for RINEX Navigation files. <i>[key: ephVersion]</i></p>"));
 
   // WhatsThis, RINEX Editing & QC
@@ -1593,10 +1605,10 @@
   delete _rnxFileCheckBox;
   delete _rnxScrpLineEdit;
-  delete _rnxV2CheckBox;
+  delete _rnxVersComboBox;
   delete _rnxV2Priority;
   delete _ephPathLineEdit;
   delete _ephIntrComboBox;
   delete _ephOutPortLineEdit;
-  delete _ephV2CheckBox;
+  delete _ephVersComboBox;
   delete _corrPathLineEdit;
   delete _corrIntrComboBox;
@@ -2058,10 +2070,10 @@
   settings.setValue("rnxScript",    _rnxScrpLineEdit->text());
   settings.setValue("rnxV2Priority",_rnxV2Priority->text());
-  settings.setValue("rnxV2",        _rnxV2CheckBox->checkState());
+  settings.setValue("rnxVersion",   _rnxVersComboBox->currentText());
 // RINEX Ephemeris
   settings.setValue("ephPath",       _ephPathLineEdit->text());
   settings.setValue("ephIntr",       _ephIntrComboBox->currentText());
   settings.setValue("ephOutPort",    _ephOutPortLineEdit->text());
-  settings.setValue("ephV2",         _ephV2CheckBox->checkState());
+  settings.setValue("ephVersion",    _ephVersComboBox->currentText());
 // Broadcast Corrections
   settings.setValue("corrPath",    _corrPathLineEdit->text());
@@ -2555,8 +2567,8 @@
     enableWidget(enable, _rnxScrpLineEdit);
     enableWidget(enable, _rnxV2Priority);
-    enableWidget(enable, _rnxV2CheckBox);
+    enableWidget(enable, _rnxVersComboBox);
 
     bool enable1 = true;
-    enable1 = _rnxV2CheckBox->isChecked();
+    enable1 = _rnxVersComboBox->currentText() == "2";
     if (enable && enable1) {
       enableWidget(true, _rnxV2Priority);
@@ -2569,8 +2581,8 @@
   // RINEX Observations, Signal Priority
   // -----------------------------------
-  if (sender() == 0 || sender() == _rnxV2CheckBox) {
+  if (sender() == 0 || sender() == _rnxVersComboBox) {
     if (!_rnxPathLineEdit->text().isEmpty()) {
       enableWidget(enable, _rnxIntrComboBox);
-      enable = _rnxV2CheckBox->isChecked();
+      enable = _rnxVersComboBox->currentText() == "2";
       enableWidget(enable, _rnxV2Priority);
     }
@@ -2582,5 +2594,5 @@
     enable = !_ephPathLineEdit->text().isEmpty() || !_ephOutPortLineEdit->text().isEmpty();
     enableWidget(enable, _ephIntrComboBox);
-    enableWidget(enable, _ephV2CheckBox);
+    enableWidget(enable, _ephVersComboBox);
   }
 
Index: trunk/BNC/src/bncwindow.h
===================================================================
--- trunk/BNC/src/bncwindow.h	(revision 9757)
+++ trunk/BNC/src/bncwindow.h	(revision 9760)
@@ -163,7 +163,7 @@
     QLineEdit*     _sp3CompLogLineEdit;
 
-    QCheckBox* _rnxV2CheckBox;
+    QComboBox* _rnxVersComboBox;
     QLineEdit* _rnxV2Priority;
-    QCheckBox* _ephV2CheckBox;
+    QComboBox* _ephVersComboBox;
     QCheckBox* _rnxFileCheckBox;
     QLineEdit* _rnxScrpLineEdit;
@@ -173,7 +173,7 @@
     QComboBox* _ephIntrComboBox;
     QComboBox* _corrIntrComboBox;
-    QComboBox*  _rnxSamplComboBox;
-    QComboBox*  _rnxSkelExtComboBox;
-    QComboBox*  _outSamplComboBox;
+    QComboBox* _rnxSamplComboBox;
+    QComboBox* _rnxSkelExtComboBox;
+    QComboBox* _outSamplComboBox;
     QCheckBox* _rnxAppendCheckBox;
     QCheckBox* _autoStartCheckBox;
Index: trunk/BNC/src/reqcdlg.cpp
===================================================================
--- trunk/BNC/src/reqcdlg.cpp	(revision 9757)
+++ trunk/BNC/src/reqcdlg.cpp	(revision 9760)
@@ -95,5 +95,5 @@
 
   _reqcRnxVersion->setEditable(false);
-  _reqcRnxVersion->addItems(QString("3,2").split(","));
+  _reqcRnxVersion->addItems(QString("4,3,2").split(","));
   _reqcRnxVersion->setMaximumWidth(7*ww);
 
Index: trunk/BNC/src/rinex/rnxnavfile.h
===================================================================
--- trunk/BNC/src/rinex/rnxnavfile.h	(revision 9757)
+++ trunk/BNC/src/rinex/rnxnavfile.h	(revision 9760)
@@ -38,4 +38,5 @@
 #define defaultRnxNavVersion2 2.11
 #define defaultRnxNavVersion3 3.05
+#define defaultRnxNavVersion4 4.00
 
 class t_rnxNavFile {
Index: trunk/BNC/src/rinex/rnxobsfile.cpp
===================================================================
--- trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 9757)
+++ trunk/BNC/src/rinex/rnxobsfile.cpp	(revision 9760)
@@ -164,7 +164,16 @@
       in >> _antBSG[0] >> _antBSG[1] >> _antBSG[2];
     }
+    else if (key == "DOI") {
+      _digitalObjectId = line.mid(0,60).trimmed();
+    }
+    else if (key == "LICENSE OF USE") {
+      _licenseOfUse.append(line.mid(0,60).trimmed());
+    }
+    else if (key == "STATION INFORMATION") {
+     _stationInformation.append(line.mid(0,60).trimmed());
+    }
     else if (key == "# / TYPES OF OBSERV") {
       if (_version == 0.0) {
-        _version = defaultRnxObsVersion2;
+        _version = defaultRnxObsVersion3;
       }
       QTextStream* in = new QTextStream(value.toLatin1(), QIODevice::ReadOnly);
@@ -306,9 +315,12 @@
   _markerName = markerName;
 
-  if (version <= 2) {
+  if (version == 2) {
     _version = defaultRnxObsVersion2;
   }
-  else {
+  else if (version == 3) {
     _version = defaultRnxObsVersion3;
+  }
+  else if (version == 4) {
+    _version = defaultRnxObsVersion4;
   }
 
@@ -389,9 +401,12 @@
                          const QStringList* gloSlots) {
 
-  if (version <= 2) {
+  if (version == 2) {
     _version = defaultRnxObsVersion2;
   }
-  else {
+  else if (version == 3) {
     _version = defaultRnxObsVersion3;
+  }
+  else if (version == 4) {
+    _version = defaultRnxObsVersion4;
   }
   _interval        = header._interval;
@@ -914,5 +929,5 @@
       return t_rnxObsFile::type3to2(sys, origType);
     }
-    else if (int(version) == 3) {
+    else {
       return t_rnxObsFile::type2to3(sys, origType);
     }
Index: trunk/BNC/src/rinex/rnxobsfile.h
===================================================================
--- trunk/BNC/src/rinex/rnxobsfile.h	(revision 9757)
+++ trunk/BNC/src/rinex/rnxobsfile.h	(revision 9760)
@@ -40,4 +40,5 @@
 #define defaultRnxObsVersion2 2.11
 #define defaultRnxObsVersion3 3.05
+#define defaultRnxObsVersion4 4.00
 
 class t_rnxObsHeader {
@@ -80,4 +81,5 @@
   QString         _markerName;
   QString         _markerNumber;
+
   QString         _markerType;
   QString         _observer;
@@ -86,4 +88,7 @@
   QString         _receiverType;
   QString         _receiverVersion;
+  QString         _digitalObjectId;
+  QStringList     _licenseOfUse;
+  QStringList     _stationInformation;
   QStringList     _comments;
   ColumnVector    _antNEU;
@@ -162,4 +167,7 @@
   const QString& receiverType() const {return _header._receiverType;}
   const QString& receiverNumber() const {return _header._receiverNumber;}
+  const QString& digitalObjectId() const {return _header._digitalObjectId;}
+  const QStringList licenseOfUse() const {return _header._licenseOfUse;}
+  const QStringList stationInformation() const {return _header._stationInformation;}
 
   void setInterval(double interval) {_header._interval = interval;}
@@ -173,4 +181,8 @@
   void setReceiverType(const QString& receiverType) {_header._receiverType = receiverType;}
   void setReceiverNumber(const QString& receiverNumber) {_header._receiverNumber = receiverNumber;}
+
+  void setDigitalObjectId(const QString& digitalObjectId) {_header._digitalObjectId = digitalObjectId;}
+  void setLicenseOfUse(const QString& licenseOfUse) {_header._licenseOfUse.append(licenseOfUse);}
+  void setStationInformation(const QString& stationInformation) {_header._stationInformation.append(stationInformation);}
 
   const ColumnVector& xyz() const {return _header._xyz;}
