Index: /trunk/BNC/bnccaster.cpp
===================================================================
--- /trunk/BNC/bnccaster.cpp	(revision 407)
+++ /trunk/BNC/bnccaster.cpp	(revision 408)
@@ -92,11 +92,4 @@
   if (_waitTime < 1) {
     _waitTime = 1;
-  }
-
-  if ( settings.value("rnxPath").toString().isEmpty() ) { 
-    _rinexWriters = 0;
-  }
-  else {
-    _rinexWriters = new QMap<QString, bncRinex*>;
   }
 
@@ -123,26 +116,10 @@
   delete _sockets;
   delete _epochs;
-  delete _rinexWriters;
-}
-
-// Reconnecting
-////////////////////////////////////////////////////////////////////////////
-void bncCaster::reconnecting(const QByteArray& staID) {
-  QMutexLocker locker(&_mutex);
-
-  if (_rinexWriters && _rinexWriters->find(staID) != _rinexWriters->end()) {
-    bncRinex* rnx = _rinexWriters->find(staID).value();
-    rnx->setReconnectFlag(true);
-  }
 }
 
 // New Observations
 ////////////////////////////////////////////////////////////////////////////
-void bncCaster::newObs(const QByteArray& staID, const QUrl& mountPoint,
-                       bool firstObs, Observation* obs,
-                       const QByteArray& format,
-                       const QByteArray& latitude,
-                       const QByteArray& longitude,
-                       const QByteArray& nmea) {
+void bncCaster::newObs(const QByteArray& staID, bool firstObs, 
+                       Observation* obs) {
 
   QMutexLocker locker(&_mutex);
@@ -157,18 +134,4 @@
   obs->StatID[sizeof(obs->StatID)-1] = '\0';
         
-  // Prepare RINEX Output
-  // --------------------
-  if (_rinexWriters) {
-    if (_rinexWriters->find(obs->StatID) == _rinexWriters->end()) {
-      _rinexWriters->insert(obs->StatID, new bncRinex(obs->StatID, mountPoint, 
-                                           format, latitude, longitude, nmea));
-    }
-    bncRinex* rnx = _rinexWriters->find(obs->StatID).value();
-    if (_samplingRate == 0 || iSec % _samplingRate == 0) {
-      rnx->deepCopy(obs);
-    }
-    rnx->dumpEpoch(_newTime);
-  }
-
   // First time, set the _lastDumpSec immediately
   // --------------------------------------------
Index: /trunk/BNC/bnccaster.h
===================================================================
--- /trunk/BNC/bnccaster.h	(revision 407)
+++ /trunk/BNC/bnccaster.h	(revision 408)
@@ -32,5 +32,4 @@
 
 #include "RTCM/GPSDecoder.h"
-#include "bncrinex.h"
 
 class bncGetThread;
@@ -44,9 +43,5 @@
    void addGetThread(bncGetThread* getThread);
    int  numStations() const {return _staIDs.size();}
-   void newObs(const QByteArray& staID, const QUrl& mountPoint,
-               bool firstObs, Observation* obs, const QByteArray& format,
-               const QByteArray& latitude, const QByteArray& longitude,
-               const QByteArray& nmea);
-   void reconnecting(const QByteArray& staID);
+   void newObs(const QByteArray& staID, bool firstObs, Observation* obs);
 
  signals:
@@ -70,5 +65,4 @@
    QList<QTcpSocket*>*            _sockets;
    QList<QByteArray>              _staIDs;
-   QMap<QString, bncRinex*>*      _rinexWriters;
    QList<bncGetThread*>           _threads;
    int                            _samplingRate;
Index: /trunk/BNC/bncgetthread.cpp
===================================================================
--- /trunk/BNC/bncgetthread.cpp	(revision 407)
+++ /trunk/BNC/bncgetthread.cpp	(revision 408)
@@ -51,4 +51,5 @@
 #include "bncapp.h"
 #include "bncutils.h"
+#include "bncrinex.h"
 
 #include "RTCM/RTCM2Decoder.h"
@@ -100,4 +101,15 @@
     _staID = _staID.left(_staID.length()-1) + QString("%1").arg(num).toAscii();
   }    
+
+  // RINEX writer
+  // ------------
+  _samplingRate = settings.value("rnxSampl").toInt();
+  if ( settings.value("rnxPath").toString().isEmpty() ) { 
+    _rnx = 0;
+  }
+  else {
+    _rnx = new bncRinex(_staID, mountPoint, format, latitude, longitude, nmea);
+  }
+
   msleep(100); //sleep 0.1 sec
 }
@@ -382,5 +394,17 @@
           emit newObs(_staID, *it);
           bool firstObs = (it == _decoder->_obsList.begin());
-          _global_caster->newObs(_staID, _mountPoint, firstObs, *it, _format, _latitude, _longitude, _nmea);
+          _global_caster->newObs(_staID, firstObs, *it);
+
+          // RINEX Output
+          // ------------
+          if (_rnx) {
+             long iSec    = long(floor((*it)->GPSWeeks+0.5));
+             long newTime = (*it)->GPSWeek * 7*24*3600 + iSec;
+            if (_samplingRate == 0 || iSec % _samplingRate == 0) {
+              _rnx->deepCopy(*it);
+            }
+            _rnx->dumpEpoch(newTime);
+          }
+
         }
         _decoder->_obsList.clear();
@@ -411,5 +435,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncGetThread::tryReconnect() {
-  _global_caster->reconnecting(_staID);
+  if (_rnx) {
+    _rnx->setReconnectFlag(true);
+  }
   while (1) {
     delete _socket; _socket = 0;
Index: /trunk/BNC/bncgetthread.h
===================================================================
--- /trunk/BNC/bncgetthread.h	(revision 407)
+++ /trunk/BNC/bncgetthread.h	(revision 408)
@@ -32,4 +32,6 @@
 #include "RTCM/GPSDecoder.h"
 #include "bncconst.h"
+
+class bncRinex;
 
 class bncGetThread : public QThread {
@@ -75,4 +77,6 @@
    int         _iMount;
    bool        _zeroDecoder;
+   int         _samplingRate;
+   bncRinex*   _rnx;
 };
 
Index: /trunk/BNC/bncrinex.cpp
===================================================================
--- /trunk/BNC/bncrinex.cpp	(revision 407)
+++ /trunk/BNC/bncrinex.cpp	(revision 408)
@@ -61,8 +61,8 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
-bncRinex::bncRinex(const char* StatID, const QUrl& mountPoint, 
+bncRinex::bncRinex(const QByteArray& statID, const QUrl& mountPoint, 
                    const QByteArray& format, const QByteArray& latitude,
                    const QByteArray& longitude, const QByteArray& nmea) {
-  _statID        = StatID;
+  _statID        = statID;
   _mountPoint    = mountPoint;
   _format        = format.left(6);
Index: /trunk/BNC/bncrinex.h
===================================================================
--- /trunk/BNC/bncrinex.h	(revision 407)
+++ /trunk/BNC/bncrinex.h	(revision 408)
@@ -38,5 +38,5 @@
 class bncRinex {
  public:
-   bncRinex(const char* StatID, const QUrl& mountPoint, 
+   bncRinex(const QByteArray& statID, const QUrl& mountPoint, 
             const QByteArray& format, const QByteArray& latitude,
             const QByteArray& longitude, const QByteArray& nmea);
