Index: /trunk/BNC/RTCM/GPSDecoder.h
===================================================================
--- /trunk/BNC/RTCM/GPSDecoder.h	(revision 245)
+++ /trunk/BNC/RTCM/GPSDecoder.h	(revision 246)
@@ -2,4 +2,6 @@
 #ifndef GPSDECODER_H
 #define GPSDECODER_H
+
+#include <QMutexLocker>
 
 #include <list>
@@ -40,4 +42,6 @@
     virtual ~GPSDecoder() {}
     std::list<Observation*> _obsList;
+  protected:
+    QMutex _mutex;
 };
 
Index: /trunk/BNC/RTCM/RTCM2.cpp
===================================================================
--- /trunk/BNC/RTCM/RTCM2.cpp	(revision 245)
+++ /trunk/BNC/RTCM/RTCM2.cpp	(revision 246)
@@ -276,4 +276,6 @@
 
 void ThirtyBitWord::getHeader(string& buf) {
+
+  if (buf.length() == 0) return;
 
   unsigned int W_old = W;
Index: /trunk/BNC/RTCM/RTCM2Decoder.cpp
===================================================================
--- /trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 245)
+++ /trunk/BNC/RTCM/RTCM2Decoder.cpp	(revision 246)
@@ -4,4 +4,6 @@
 // 
 //------------------------------------------------------------------------------
+
+#include <QMutexLocker>
 
 #include "../bncutils.h"
@@ -32,4 +34,6 @@
 
 void RTCM2Decoder::Decode(char* buffer, int bufLen) {
+
+  QMutexLocker locker(&_mutex);
 
   _buffer.append(buffer, bufLen);
Index: /trunk/BNC/RTCM3/rtcm3.cpp
===================================================================
--- /trunk/BNC/RTCM3/rtcm3.cpp	(revision 245)
+++ /trunk/BNC/RTCM3/rtcm3.cpp	(revision 246)
@@ -31,4 +31,5 @@
 ////////////////////////////////////////////////////////////////////////////
 rtcm3::rtcm3() : GPSDecoder() {
+  QMutexLocker locker(&_mutex);
   memset(&_Parser, 0, sizeof(_Parser));
   time_t tim;
@@ -46,4 +47,5 @@
 ////////////////////////////////////////////////////////////////////////////
 void rtcm3::Decode(char* buffer, int bufLen) {
+  QMutexLocker locker(&_mutex);
   for (int ii = 0; ii < bufLen; ii++) {
 
Index: /trunk/BNC/RTIGS/rtigs.cpp
===================================================================
--- /trunk/BNC/RTIGS/rtigs.cpp	(revision 245)
+++ /trunk/BNC/RTIGS/rtigs.cpp	(revision 246)
@@ -26,5 +26,5 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
-rtigs::rtigs() : GPSDecoder() {
+rtigs::rtigs() {
 }
 
@@ -37,4 +37,6 @@
 ////////////////////////////////////////////////////////////////////////////
 void rtigs::Decode(char* buffer, int bufLen) {
+
+  QMutexLocker locker(&_mutex);
 
   // Append the incomming data to the internal buffer
