Index: trunk/BNC/RTCM/GPSDecoder.h
===================================================================
--- trunk/BNC/RTCM/GPSDecoder.h	(revision 620)
+++ trunk/BNC/RTCM/GPSDecoder.h	(revision 621)
@@ -26,7 +26,8 @@
 #define GPSDECODER_H
 
-#include <list>
+#include <QPointer>
+#include <QList>
 
-class Observation {
+class Observation : public QObject{
   public:
   Observation() {
@@ -68,9 +69,11 @@
 };
 
+typedef QPointer<Observation> p_obs;
+
 class GPSDecoder {
   public:
     virtual void Decode(char* buffer, int bufLen) = 0;
     virtual ~GPSDecoder() {}
-    std::list<Observation*> _obsList;
+    QList<p_obs> _obsList;
 };
 
Index: trunk/BNC/RTCM/RTCM2Decoder.cpp
===================================================================
--- trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 620)
+++ trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 621)
@@ -58,5 +58,9 @@
 
 RTCM2Decoder::~RTCM2Decoder() {
-
+  QListIterator<p_obs> it(_obsList);
+  while (it.hasNext()) {
+    delete it.next();
+  }
+  _obsList.clear();
 }
 
Index: trunk/BNC/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 620)
+++ trunk/BNC/RTCM3/RTCM3Decoder.cpp	(revision 621)
@@ -84,4 +84,9 @@
 ////////////////////////////////////////////////////////////////////////////
 RTCM3Decoder::~RTCM3Decoder() {
+  QListIterator<p_obs> it(_obsList);
+  while (it.hasNext()) {
+    delete it.next();
+  }
+  _obsList.clear();
 }
 
Index: trunk/BNC/RTIGS/RTIGSDecoder.cpp
===================================================================
--- trunk/BNC/RTIGS/RTIGSDecoder.cpp	(revision 620)
+++ trunk/BNC/RTIGS/RTIGSDecoder.cpp	(revision 621)
@@ -55,4 +55,9 @@
 ////////////////////////////////////////////////////////////////////////////
 RTIGSDecoder::~RTIGSDecoder() {
+  QListIterator<p_obs> it(_obsList);
+  while (it.hasNext()) {
+    delete it.next();
+  }
+  _obsList.clear();
 }
 
Index: trunk/BNC/bnc.pro
===================================================================
--- trunk/BNC/bnc.pro	(revision 620)
+++ trunk/BNC/bnc.pro	(revision 621)
@@ -2,6 +2,6 @@
 # Switch to debug configuration
 # -----------------------------
-### CONFIG -= release
-### CONFIG += debug
+CONFIG -= release
+CONFIG += debug
 
 DEFINES += NO_RTCM3_MAIN
Index: trunk/BNC/bncapp.cpp
===================================================================
--- trunk/BNC/bncapp.cpp	(revision 620)
+++ trunk/BNC/bncapp.cpp	(revision 621)
@@ -73,4 +73,5 @@
   _logFile     = 0;
   _logStream   = 0;
+  _caster      = 0;
 
   // Lists of Ephemeris
@@ -617,2 +618,11 @@
 }
 
+// 
+////////////////////////////////////////////////////////////////////////////
+void bncApp::slotQuit() {
+  cout << "bncApp::slotQuit" << endl;
+  delete _caster;
+  quit();
+}
+
+
Index: trunk/BNC/bncapp.h
===================================================================
--- trunk/BNC/bncapp.h	(revision 620)
+++ trunk/BNC/bncapp.h	(revision 621)
@@ -40,8 +40,11 @@
     QString bncVersion() const {return _bncVersion;}
     void    setPort(int port);
+    void setCaster(bncCaster* caster) {_caster = caster;}
   public slots:
     void slotMessage(const QByteArray msg);
     void slotNewGPSEph(gpsephemeris* gpseph);
     void slotNewGlonassEph(glonassephemeris* glonasseph);
+    void slotQuit();
+    
  private slots:
    void slotNewConnection();
@@ -70,4 +73,5 @@
     QTcpServer*         _server;
     QList<QTcpSocket*>* _sockets;
+    bncCaster*          _caster;
 };
 #endif
Index: trunk/BNC/bncgetthread.cpp
===================================================================
--- trunk/BNC/bncgetthread.cpp	(revision 620)
+++ trunk/BNC/bncgetthread.cpp	(revision 621)
@@ -377,4 +377,13 @@
   // ------------------
   while (true) {
+
+    if (_decoder) {
+      QListIterator<p_obs> it(_decoder->_obsList);
+      while (it.hasNext()) {
+        delete it.next();
+      }
+      _decoder->_obsList.clear();
+    }
+
     try {
       if (_socket->state() != QAbstractSocket::ConnectedState) {
@@ -394,6 +403,8 @@
         delete [] data;
         
-        for (list<Observation*>::iterator it = _decoder->_obsList.begin(); 
-             it != _decoder->_obsList.end(); it++) {
+
+        QListIterator<p_obs> it(_decoder->_obsList);
+        while (it.hasNext()) {
+          p_obs obs = it.next();
 
           // Check observation epoch
@@ -406,16 +417,16 @@
           const double maxDt      = 600.0;            
 
-          if (week < (*it)->GPSWeek) {
+          if (week < obs->GPSWeek) {
             week += 1;
             sec  -= secPerWeek;
           }
-          if (week > (*it)->GPSWeek) {
+          if (week > obs->GPSWeek) {
             week -= 1;
             sec  += secPerWeek;
           }
-          double dt = fabs(sec - (*it)->GPSWeeks);
-          if (week != (*it)->GPSWeek || dt > maxDt) {
+          double dt = fabs(sec - obs->GPSWeeks);
+          if (week != obs->GPSWeek || dt > maxDt) {
             emit( newMessage("Wrong observation epoch") );
-            delete (*it);
+            delete obs;
             continue;
           }
@@ -424,14 +435,14 @@
           // ------------
           if (_rnx) {
-             long iSec    = long(floor((*it)->GPSWeeks+0.5));
-             long newTime = (*it)->GPSWeek * 7*24*3600 + iSec;
+             long iSec    = long(floor(obs->GPSWeeks+0.5));
+             long newTime = obs->GPSWeek * 7*24*3600 + iSec;
             if (_samplingRate == 0 || iSec % _samplingRate == 0) {
-              _rnx->deepCopy(*it);
+              _rnx->deepCopy(obs);
             }
             _rnx->dumpEpoch(newTime);
           }
 
-          bool firstObs = (it == _decoder->_obsList.begin());
-          emit newObs(_staID, firstObs, *it);
+          bool firstObs = (obs == _decoder->_obsList.first());
+          emit newObs(_staID, firstObs, obs);
         }
         _decoder->_obsList.clear();
Index: trunk/BNC/bncmain.cpp
===================================================================
--- trunk/BNC/bncmain.cpp	(revision 620)
+++ trunk/BNC/bncmain.cpp	(revision 621)
@@ -50,10 +50,7 @@
 using namespace std;
 
-bncCaster* _caster = 0;
-
 void catch_signal(int) {
-  delete _caster;
   cout << "Program Interrupted by Ctrl-C" << endl;
-  ((bncApp*)qApp)->quit();
+  ((bncApp*)qApp)->slotQuit();
 }
 
@@ -109,15 +106,22 @@
   // ----------------------------
   else {
+
+    bncCaster* caster = new bncCaster(settings.value("outFile").toString(),
+                                      settings.value("outPort").toInt());
+    
+    app.setCaster(caster);
+
     // Ctrl-C Signal Handling
     // ----------------------
     signal(SIGINT, catch_signal);
 
-    _caster = new bncCaster(settings.value("outFile").toString(),
-                            settings.value("outPort").toInt());
-    
+    //// beg test
+    QTimer::singleShot(30000, &app, SLOT(slotQuit()));
+    //// end test
+
     app.setPort(settings.value("outEphPort").toInt());
 
-    app.connect(_caster, SIGNAL(getThreadErrors()), &app, SLOT(quit()));
-    app.connect(_caster, SIGNAL(newMessage(const QByteArray&)), 
+    app.connect(caster, SIGNAL(getThreadErrors()), &app, SLOT(quit()));
+    app.connect(caster, SIGNAL(newMessage(const QByteArray&)), 
                 &app, SLOT(slotMessage(const QByteArray&)));
   
@@ -139,9 +143,9 @@
                   &app, SLOT(slotMessage(const QByteArray&)));
 
-      _caster->addGetThread(getThread);
+      caster->addGetThread(getThread);
 
       getThread->start();
     }
-    if (_caster->numStations() == 0) {
+    if (caster->numStations() == 0) {
       return 0;
     }
