Index: /trunk/BNC/RTCM/RTCM2Decoder.cpp
===================================================================
--- /trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 242)
+++ /trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 243)
@@ -7,5 +7,5 @@
 #include "../bncutils.h"
 #include "GPSDecoder.h"
-#include "RTCM2.h"
+#include "RTCM2Decoder.h"
 
 using namespace std;
Index: /trunk/BNC/RTCM/RTCM2Decoder.h
===================================================================
--- /trunk/BNC/RTCM/RTCM2Decoder.h	(revision 242)
+++ /trunk/BNC/RTCM/RTCM2Decoder.h	(revision 243)
@@ -15,5 +15,5 @@
   public:
     RTCM2Decoder();
-    ~RTCMDecoder2();
+    ~RTCM2Decoder();
     virtual void Decode(char* buffer, int bufLen);
 
Index: /trunk/BNC/bnc.pro
===================================================================
--- /trunk/BNC/bnc.pro	(revision 242)
+++ /trunk/BNC/bnc.pro	(revision 243)
@@ -14,5 +14,5 @@
           bnccaster.h bncrinex.h bncapp.h bncutils.h   bnchlpdlg.h    \
           bncconst.h bnchtml.h bnctableitem.h                         \
-          RTCM/GPSDecoder.h RTCM/RTCM2.h                              \
+          RTCM/GPSDecoder.h RTCM/RTCM2.h RTCM/RTCM2Decoder.h          \
           RTCM3/rtcm3.h RTCM3/rtcm3torinex.h                          \
           RTIGS/rtigs.h RTIGS/cgps_transform.h RTIGS/rtacp.h          \
@@ -23,5 +23,5 @@
           bnccaster.cpp bncrinex.cpp bncapp.cpp bncutils.cpp          \
           bncconst.cpp bnchtml.cpp bnchlpdlg.cpp bnctableitem.cpp     \
-          RTCM/RTCM2.cpp                                              \
+          RTCM/RTCM2.cpp RTCM/RTCM2Decoder.cpp                        \
           RTCM3/rtcm3.cpp RTCM3/rtcm3torinex.cpp                      \
           RTIGS/rtigs.cpp RTIGS/cgps_transform.cpp
Index: /trunk/BNC/bncapp.cpp
===================================================================
--- /trunk/BNC/bncapp.cpp	(revision 242)
+++ /trunk/BNC/bncapp.cpp	(revision 243)
@@ -48,4 +48,6 @@
 void bncApp::slotMessage(const QByteArray msg) {
 
+  QMutexLocker locker(&_mutex);
+
   // First time resolve the log file name
   // ------------------------------------
Index: /trunk/BNC/bncapp.h
===================================================================
--- /trunk/BNC/bncapp.h	(revision 242)
+++ /trunk/BNC/bncapp.h	(revision 243)
@@ -6,4 +6,8 @@
 #include <QFile>
 #include <QTextStream>
+
+#include "bnccaster.h"
+
+extern bncCaster* _global_caster;
 
 class bncApp : public QApplication {
@@ -20,4 +24,5 @@
     int          _logFileFlag;
     QString      _bncVersion;
+    QMutex       _mutex;
 };
 #endif
Index: /trunk/BNC/bnccaster.cpp
===================================================================
--- /trunk/BNC/bnccaster.cpp	(revision 242)
+++ /trunk/BNC/bnccaster.cpp	(revision 243)
@@ -83,13 +83,9 @@
 }
 
-// Run
-////////////////////////////////////////////////////////////////////////////
-void bncCaster::run() {
-  exec();
-}
-
 // New Observations
 ////////////////////////////////////////////////////////////////////////////
-void bncCaster::slotNewObs(const QByteArray& staID, Observation* obs) {
+void bncCaster::newObs(const QByteArray& staID, Observation* obs) {
+
+  QMutexLocker locker(&_mutex);
 
   long iSec    = long(floor(obs->GPSWeeks+0.5));
@@ -149,7 +145,4 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncCaster::addGetThread(bncGetThread* getThread) {
-  connect(getThread, SIGNAL(newObs(const QByteArray&, Observation*)),
-          this, SLOT(slotNewObs(const QByteArray&, Observation*)));
-
   connect(getThread, SIGNAL(error(const QByteArray&)), 
           this, SLOT(slotGetThreadError(const QByteArray&)));
@@ -162,4 +155,5 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncCaster::slotGetThreadError(const QByteArray& staID) {
+  QMutexLocker locker(&_mutex);
   _staIDs.removeAll(staID);
   emit( newMessage(
Index: /trunk/BNC/bnccaster.h
===================================================================
--- /trunk/BNC/bnccaster.h	(revision 242)
+++ /trunk/BNC/bnccaster.h	(revision 243)
@@ -4,5 +4,4 @@
 
 #include <QFile>
-#include <QThread>
 #include <QtNetwork>
 #include <QMultiMap>
@@ -13,5 +12,5 @@
 class bncGetThread;
 
-class bncCaster : public QThread {
+class bncCaster : public QObject {
  Q_OBJECT
 
@@ -21,4 +20,6 @@
    void addGetThread(bncGetThread* getThread);
    int  numStations() const {return _staIDs.size();}
+   void newObs(const QByteArray& staID, Observation* obs);
+
 
  signals:
@@ -26,13 +27,7 @@
    void newMessage(const QByteArray& msg);
 
- public slots:
-   void slotNewObs(const QByteArray& staID, Observation* obs);
-
  private slots:
    void slotNewConnection();
    void slotGetThreadError(const QByteArray& staID);
-
- protected:
-   virtual void run();
 
  private:
@@ -51,4 +46,5 @@
    int                            _samplingRate;
    long                           _waitTime;
+   QMutex                         _mutex;
 };
 
Index: /trunk/BNC/bncgetthread.cpp
===================================================================
--- /trunk/BNC/bncgetthread.cpp	(revision 242)
+++ /trunk/BNC/bncgetthread.cpp	(revision 243)
@@ -22,6 +22,7 @@
 #include "bncgetthread.h"
 #include "bnctabledlg.h"
-
-#include "RTCM/RTCM2.h"
+#include "bncapp.h"
+
+#include "RTCM/RTCM2Decoder.h"
 #include "RTCM3/rtcm3.h"
 #include "RTIGS/rtigs.h"
@@ -181,5 +182,5 @@
     if      (_format.indexOf("RTCM_2") != -1) {
       emit(newMessage("Get Data: " + _staID + " in RTCM 2.x format"));
-      _decoder = new RTCM2();
+      _decoder = new RTCM2Decoder();
     }
     else if (_format.indexOf("RTCM_3") != -1) {
@@ -232,5 +233,5 @@
       for (list<Observation*>::iterator it = _decoder->_obsList.begin(); 
            it != _decoder->_obsList.end(); it++) {
-        emit newObs(_staID, *it);
+        _global_caster->newObs(_staID, *it);
       }
       _decoder->_obsList.clear();
Index: /trunk/BNC/bncmain.cpp
===================================================================
--- /trunk/BNC/bncmain.cpp	(revision 242)
+++ /trunk/BNC/bncmain.cpp	(revision 243)
@@ -24,4 +24,6 @@
 
 using namespace std;
+
+bncCaster* _global_caster = 0;
 
 // Main Program
@@ -75,13 +77,11 @@
   // ----------------------------
   else {
-    bncCaster* caster = new bncCaster(settings.value("outFile").toString(),
-                                      settings.value("outPort").toInt());
+    _global_caster = new bncCaster(settings.value("outFile").toString(),
+                                   settings.value("outPort").toInt());
 
-    app.connect(caster, SIGNAL(getThreadErrors()), &app, SLOT(quit()));
-    app.connect(caster, SIGNAL(newMessage(const QByteArray&)), 
+    app.connect(_global_caster, SIGNAL(getThreadErrors()), &app, SLOT(quit()));
+    app.connect(_global_caster, SIGNAL(newMessage(const QByteArray&)), 
                 &app, SLOT(slotMessage(const QByteArray&)));
 
-    caster->start();
-    
     QListIterator<QString> it(settings.value("mountPoints").toStringList());
     while (it.hasNext()) {
@@ -94,9 +94,9 @@
                   &app, SLOT(slotMessage(const QByteArray&)));
 
-      caster->addGetThread(getThread);
+      _global_caster->addGetThread(getThread);
 
       getThread->start();
     }
-    if (caster->numStations() == 0) {
+    if (_global_caster->numStations() == 0) {
       return 0;
     }
Index: /trunk/BNC/bncwindow.cpp
===================================================================
--- /trunk/BNC/bncwindow.cpp	(revision 242)
+++ /trunk/BNC/bncwindow.cpp	(revision 243)
@@ -221,6 +221,4 @@
   layout->addWidget(_logFileLineEdit,                           10, 2, 1, 3);
   layout->addWidget(_log,                                       11, 0, 1, 5);
-
-  _bncCaster = 0;
 }
 
@@ -369,16 +367,14 @@
   _actStop->setEnabled(true);
 
-  _bncCaster = new bncCaster(_outFileLineEdit->text(), 
+  _global_caster = new bncCaster(_outFileLineEdit->text(), 
                              _outPortLineEdit->text().toInt());
 
-  connect(_bncCaster, SIGNAL(getThreadErrors()), 
+  connect(_global_caster, SIGNAL(getThreadErrors()), 
           this, SLOT(slotGetThreadErrors()));
 
-  connect(_bncCaster, SIGNAL(newMessage(const QByteArray&)), 
+  connect(_global_caster, SIGNAL(newMessage(const QByteArray&)), 
           this, SLOT(slotMessage(const QByteArray&)));
-  connect(_bncCaster, SIGNAL(newMessage(const QByteArray&)), 
+  connect(_global_caster, SIGNAL(newMessage(const QByteArray&)), 
           (bncApp*)qApp, SLOT(slotMessage(const QByteArray&)));
-
-  _bncCaster->start();
 
   for (int iRow = 0; iRow < _mountPointsTable->rowCount(); iRow++) {
@@ -399,5 +395,5 @@
             SLOT(slotNewObs(const QByteArray&, Observation*)));
 
-    _bncCaster->addGetThread(getThread);
+    _global_caster->addGetThread(getThread);
 
     getThread->start();
@@ -412,8 +408,5 @@
                                    QMessageBox::NoButton);
   if (iRet == QMessageBox::Yes) {
-    _bncCaster->terminate();
-    _bncCaster->wait();
-    delete _bncCaster; 
-    _bncCaster = 0;
+    delete _global_caster; _global_caster = 0;
     _actGetData->setEnabled(true);
     _actStop->setEnabled(false);
Index: /trunk/BNC/bncwindow.h
===================================================================
--- /trunk/BNC/bncwindow.h	(revision 242)
+++ /trunk/BNC/bncwindow.h	(revision 243)
@@ -6,5 +6,4 @@
 
 #include "bncgetthread.h"
-#include "bnccaster.h"
 
 class bncWindow : public QMainWindow {
@@ -64,6 +63,4 @@
 
     QWidget*   _canvas;
-
-    bncCaster* _bncCaster;
 };
 #endif
