Index: trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 10997)
+++ trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 10998)
@@ -314,5 +314,6 @@
       orbCorr._dotXr[1]  = _clkOrb.Sat[ii].Orbit.DotDeltaAlongTrack;
       orbCorr._dotXr[2]  = _clkOrb.Sat[ii].Orbit.DotDeltaCrossTrack;
-      orbCorr._rtcmSsr   = (_type == RTCMssr || _type == RTCMnewssr);
+      orbCorr._ssrFormat = (_type == RTCMssr) ? ssrRtcmOld :
+                            (_type == RTCMnewssr) ? ssrRtcmNew : ssrUnknown;
 
       _orbCorrections[_lastTime].append(orbCorr);
@@ -502,4 +503,6 @@
     satPhaseBias._time       = _lastTime;
     satPhaseBias._updateInt  = _phaseBias.UpdateInterval;
+    satPhaseBias._ssrFormat  = (_type == RTCMssr) ? ssrRtcmOld :
+                                (_type == RTCMnewssr) ? ssrRtcmNew : ssrUnknown;
     satPhaseBias._dispBiasConstistInd = _phaseBias.DispersiveBiasConsistencyIndicator;
     satPhaseBias._MWConsistInd        = _phaseBias.MWConsistencyIndicator;
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp	(revision 10997)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp	(revision 10998)
@@ -353,36 +353,5 @@
 
   for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
-    /* Extended Satellite Phase Bias Message 
-       The Widelane Signal Group Indicator shall be releated for every satellite and signal 
-       included in the corresponding Satellite Phase Bias Message in the same order. The 
-       Extended Satellite Phase Bias Message shall be sent BEFORE the corresponding 
-       Satellite Phase Bias Message */
-    if (b->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) {
-      INITBLOCK
-      E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBEXT])
-      switch (s) {
-        case CLOCKORBIT_SATGPS:
-        case CLOCKORBIT_SATGALILEO:
-        case CLOCKORBIT_SATQZSS:
-        case CLOCKORBIT_SATSBAS:
-        case CLOCKORBIT_SATBDS:
-          E_GPS_EPOCH_TIME(b->EpochTime[s])
-          break;
-        case CLOCKORBIT_SATGLONASS:
-          E_GLONASS_EPOCH_TIME(b->EpochTime[s])
-          break;
-      }
-      E_SSR_IOD(b->SSRIOD)
-      E_SSR_PROVIDER_ID(b->SSRProviderID)
-      E_SSR_SOLUTION_ID(b->SSRSolutionID)
-      E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID)
-      for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
-        for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
-          E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator)
-        }
-      }
-      ENDBLOCK
-    }
-    /* Satellite Phase Bias Message */
+     /* Satellite Phase Bias Message */
     if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corType[s][COBOFS_PBIAS])) {
       INITBLOCK
@@ -422,4 +391,35 @@
       ENDBLOCK
     }
+    /* Extended Satellite Phase Bias Message 
+       The Widelane Signal Group Indicator shall be releated for every satellite and signal 
+       included in the corresponding Satellite Phase Bias Message in the same order. The 
+       Extended Satellite Phase Bias Message shall be sent BEFORE the corresponding 
+       Satellite Phase Bias Message VICE VERSA??*/
+    if (b->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) {
+      INITBLOCK
+      E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBEXT])
+      switch (s) {
+        case CLOCKORBIT_SATGPS:
+        case CLOCKORBIT_SATGALILEO:
+        case CLOCKORBIT_SATQZSS:
+        case CLOCKORBIT_SATSBAS:
+        case CLOCKORBIT_SATBDS:
+          E_GPS_EPOCH_TIME(b->EpochTime[s])
+          break;
+        case CLOCKORBIT_SATGLONASS:
+          E_GLONASS_EPOCH_TIME(b->EpochTime[s])
+          break;
+      }
+      E_SSR_IOD(b->SSRIOD)
+      E_SSR_PROVIDER_ID(b->SSRProviderID)
+      E_SSR_SOLUTION_ID(b->SSRSolutionID)
+      E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID)
+      for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
+        for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
+          E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator)
+        }
+      }
+      ENDBLOCK
+    }
   }
   return ressize;
@@ -561,8 +561,9 @@
     /* COBOFS_* are per-instance (set in setCorType()), not compile-time
        constants, so this has to be an if/else-if chain rather than a switch. */
-    if (kind == COBOFS_PBIAS) {
+    if      (kind == COBOFS_PBIAS) {
           if (!pb)
             return GCOBR_NOPHASEBIASPARAMETER;
           pb->messageType = type;
+          /* Header Part*/
           switch (s) {
             case CLOCKORBIT_SATGPS:
@@ -586,9 +587,10 @@
           D_NO_OF_SATELLITES(nums)
 #ifdef BNC_DEBUG_SSR
-          fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d dispInd %d mwInd %d\n",
-        		  pb->EpochTime[s], pb->UpdateInterval,mmi,pb->NumberOfSat[s],nums,
-				  pb->SSRIOD, pb->SSRProviderID, pb->SSRSolutionID,
-				  pb->DispersiveBiasConsistencyIndicator, pb->MWConsistencyIndicator);
-#endif
+          fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d yawInd %d extpbInd %d\n",
+        		      pb->EpochTime[s], pb->UpdateInterval,mmi,pb->NumberOfSat[s],nums,
+				          pb->SSRIOD, pb->SSRProviderID, pb->SSRSolutionID,
+				          pb->SatelliteYawInformationIndicator, pb->ExtendedPhaseBiasPropertyID);
+#endif
+          /* Satellite Specific Part*/
           for (i = 0; i < nums; ++i) {
             D_GPS_SATELLITE_ID(id)
@@ -608,17 +610,75 @@
             fprintf(stderr, "id %2d #%d y %10.6f yr %10.6f ",
                     pb->Sat[pos].ID, pb->Sat[pos].NumberOfPhaseBiases,
-					pb->Sat[pos].YawAngle/MPI, pb->Sat[pos].YawRate/MPI);
-#endif
+					          pb->Sat[pos].YawAngle/MPI, pb->Sat[pos].YawRate/MPI);
+#endif
+            /* Signal Specific Part */
             for (j = 0; j < pb->Sat[pos].NumberOfPhaseBiases; ++j) {
               D_GNSS_SIGNAL_IDENTIFIER(pb->Sat[pos].Biases[j].Type)
               D_INTEGER_INDICATOR(pb->Sat[pos].Biases[j].IntegerIndicator)
-             // D_WIDE_LANE_INDICATOR(pb->Sat[pos].Biases[j].WidelaneGroupIndicator)
               D_DISCONTINUITY_COUNTER(pb->Sat[pos].Biases[j].DiscontinuityCounter)
               D_PHASE_BIAS_CORRECTION(pb->Sat[pos].Biases[j].Bias)
+#ifdef BNC_DEBUG_SSR
+              fprintf(stderr, "t%02d int %d disc %d b %8.4f ",
+                      pb->Sat[pos].Biases[j].Type,
+					            pb->Sat[pos].Biases[j].IntegerIndicator,
+		          			  pb->Sat[pos].Biases[j].DiscontinuityCounter,
+					            pb->Sat[pos].Biases[j].Bias);
+#endif
+            }
+#ifdef BNC_DEBUG_SSR
+            fprintf(stderr, "\n");
+#endif
+          }
+    }
+    else if (kind == COBOFS_PBEXT) {
+      unsigned int EpochTime, SSRIOD, SSRProviderID, SSRSolutionID, ExtendedPhaseBiasPropertyID;
+        if (!pb)
+          return GCOBR_NOPHASEBIASPARAMETER;
+        pb->messageExtType = type;
+        switch (s) {
+          case CLOCKORBIT_SATGPS:
+          case CLOCKORBIT_SATGALILEO:
+          case CLOCKORBIT_SATQZSS:
+          case CLOCKORBIT_SATSBAS:
+          case CLOCKORBIT_SATBDS:
+            D_GPS_EPOCH_TIME(EpochTime)
+            break;
+          case CLOCKORBIT_SATGLONASS:
+            D_GLONASS_EPOCH_TIME(EpochTime)
+            break;
+        }
+        D_SSR_IOD(SSRIOD)
+        D_SSR_PROVIDER_ID(SSRProviderID)
+        D_SSR_SOLUTION_ID(SSRSolutionID)
+        D_EXTENDED_PHASE_BIAS_ID(ExtendedPhaseBiasPropertyID)
+#ifdef BNC_DEBUG_SSR
+        fprintf(stderr, "epochTime %d/%d ssrIod %d/%d  providerId %d/%d  solId %d/%d  extpbInd %d/%d \n",
+      		      EpochTime, pb->EpochTime[s], 
+		            SSRIOD, pb->SSRIOD, 
+                SSRProviderID, pb->SSRProviderID, 
+                SSRSolutionID, pb->SSRSolutionID,
+		            ExtendedPhaseBiasPropertyID, pb->ExtendedPhaseBiasPropertyID);
+#endif
+        if (EpochTime == pb->EpochTime[s] && 
+            ExtendedPhaseBiasPropertyID == pb->ExtendedPhaseBiasPropertyID) {
+          for (i = 0; i < pb->NumberOfSat[s]; ++i) {
+            for (pos = satoffset[s];
+                pos < satoffset[s] + pb->NumberOfSat[s];
+                ++pos)
+              ;
+            if (pos >= satoffset[s + 1])
+              return GCOBR_DATAMISMATCH;
+            else if (pos == pb->NumberOfSat[s] + satoffset[s])
+              ++pb->NumberOfSat[s];
+#ifdef BNC_DEBUG_SSR
+            fprintf(stderr, "id %2d ", pb->Sat[pos].ID);
+#endif
+            for (j = 0; j < pb->Sat[pos].NumberOfPhaseBiases; ++j) {
+              D_WIDE_LANE_INDICATOR(pb->Sat[pos].Biases[j].WidelaneGroupIndicator)
 #ifdef BNC_DEBUG_SSR
               fprintf(stderr, "t%02d int %d /*wl %d*/ disc %d b %8.4f ",
                       pb->Sat[pos].Biases[j].Type,
 					  pb->Sat[pos].Biases[j].IntegerIndicator,
-					  //pb->Sat[pos].Biases[j].WidelaneGroupIndicator,
+					  pb->Sat[pos].Biases[j].WidelaneGroupIndicator,
 					  pb->Sat[pos].Biases[j].DiscontinuityCounter,
 					  pb->Sat[pos].Biases[j].Bias);
@@ -629,4 +689,5 @@
 #endif
           }
+        }
     }
     else if (kind == COBOFS_ORBIT) {
@@ -954,6 +1015,6 @@
 #ifdef BNC_DEBUG_SSR
           fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
-        		  b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums,
-				  b->SSRIOD, b->SSRProviderID, b->SSRSolutionID);
+        	    	  b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums,
+				          b->SSRIOD, b->SSRProviderID, b->SSRSolutionID);
 #endif
           for (i = 0; i < nums; ++i) {
