Index: /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 9305)
+++ /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 9306)
@@ -1749,12 +1749,12 @@
         if (!_coDecoders.contains(_staID.toLatin1())) {
           _coDecoders[_staID.toLatin1()] = new RTCM3coDecoder(_staID);
+          if (id == 4076) {
+            _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::IGSssr);
+          }
+          else {
+            _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::RTCMssr);
+          }
         }
         RTCM3coDecoder* coDecoder = _coDecoders[_staID.toLatin1()];
-        if (id == 4076) {
-          coDecoder->setSsrFormatType(RTCM3coDecoder::IGSssr);
-        }
-        else {
-          coDecoder->setSsrFormatType(RTCM3coDecoder::RTCMssr);
-        }
         if (coDecoder->Decode(reinterpret_cast<char *>(_Message), _BlockSize, errmsg) == success) {
           decoded = true;
Index: /trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- /trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 9305)
+++ /trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 9306)
@@ -179,12 +179,7 @@
 
     int bytesused = 0;
-    if (_type == RTCMssr) {
-      _ssrCorr = new SsrCorrRtcm();
-    }
-    else {
-      _ssrCorr = new SsrCorrIgs();
-    }
+
     GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias,
-                             _buffer.data(), _buffer.size(), &bytesused);
+                                       _buffer.data(), _buffer.size(), &bytesused);
 
     if      (irc <= -30) { // not enough data - restore state and exit loop
Index: /trunk/BNC/src/RTCM3/RTCM3coDecoder.h
===================================================================
--- /trunk/BNC/src/RTCM3/RTCM3coDecoder.h	(revision 9305)
+++ /trunk/BNC/src/RTCM3/RTCM3coDecoder.h	(revision 9306)
@@ -42,5 +42,13 @@
   virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg);
   virtual int corrGPSEpochTime() const {return int(_lastTime.gpssec());}
-  virtual void setSsrFormatType(const e_type type) {_type = type;}
+  virtual void initSsrFormatType(const e_type type) {
+    _type = type;
+    if      (_type == RTCMssr) {
+      _ssrCorr = new SsrCorrRtcm();
+    }
+    else {
+      _ssrCorr = new SsrCorrIgs();
+    }
+  }
 
  signals:
