Index: trunk/BNC/bncgetthread.cpp
===================================================================
--- trunk/BNC/bncgetthread.cpp	(revision 3558)
+++ trunk/BNC/bncgetthread.cpp	(revision 3559)
@@ -346,4 +346,6 @@
 ////////////////////////////////////////////////////////////////////////////
 GPSDecoder* bncGetThread::decoder() {
+  QMutexLocker locker(&_mutexDecoder);
+
   if (_decoders.contains(_staID) || initDecoder() == success) {
     return _decoders[_staID];
@@ -755,4 +757,5 @@
 //////////////////////////////////////////////////////////////////////////////
 void bncGetThread::slotNewEphGPS(gpsephemeris gpseph) {
+  QMutexLocker locker(&_mutexSlot);
 
   if (!decoder()) {
@@ -764,6 +767,4 @@
 
   if ( decoder2 ) {
-    QMutexLocker locker(&_mutex);
-  
     string storedPRN;
     vector<int> IODs;
@@ -783,6 +784,4 @@
 
   if ( decoder3 ) {
-    QMutexLocker locker(&_mutex);
-  
     if ( decoder3->storeEph(gpseph) ) {
 #ifdef DEBUG_RTCM3
Index: trunk/BNC/bncgetthread.h
===================================================================
--- trunk/BNC/bncgetthread.h	(revision 3558)
+++ trunk/BNC/bncgetthread.h	(revision 3559)
@@ -123,5 +123,6 @@
    QFile*                     _serialOutFile;
    t_serialNMEA               _serialNMEA;
-   QMutex                     _mutex;
+   QMutex                     _mutexSlot;
+   QMutex                     _mutexDecoder;
    bncPPPclient*              _PPPclient;
    bool                       _rawOutput;
