Index: /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 9306)
+++ /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 9307)
@@ -1732,18 +1732,17 @@
         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) {
+        if (coDecoder->Decode(reinterpret_cast<char *>(_Message), _BlockSize, errmsg) == success) {
           decoded = true;
         }
       }
-     else if (id >= 1070 && id <= 1237) { /* MSM */
+      else if (id >= 1070 && id <= 1237) { /* MSM */
         if (DecodeRTCM3MSM(_Message, _BlockSize))
           decoded = true;
@@ -1828,5 +1827,5 @@
   uint32_t crc = 0;
   int ii;
- while (size--) {
+  while (size--) {
     crc ^= (*buf++) << (16);
     for (ii = 0; ii < 8; ii++) {
Index: /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.cpp	(revision 9306)
+++ /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.cpp	(revision 9307)
@@ -179,10 +179,5 @@
 
     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);
Index: /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.h
===================================================================
--- /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.h	(revision 9306)
+++ /branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.h	(revision 9307)
@@ -41,5 +41,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:
