Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h	(revision 11034)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h	(revision 11035)
@@ -494,6 +494,6 @@
       struct FrequencyPart {
         unsigned int NadirCorrectionIndicator;
-        int NadirCorrection;
-        int NadirAngleCorrection[ANT_MAXNADIRDEGREES];
+        double NadirCorrection; /* m */
+        double NadirAngleCorrection[ANT_MAXNADIRDEGREES]; /* m */
       } Freq[ANT_MAXFREQUENCIES];
     } Sat[CLOCKORBIT_COUNTSAT];
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 11034)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp	(revision 11035)
@@ -1156,7 +1156,9 @@
         D_GNSS_FREQUENCY_MASK(satBlock.GnssFrequencyMask)
 
+        /* DF+018 frequency mask uses the same MSB-first convention as the
+           satellite mask above: bit 5 (MSB) = frequency 0. */
         numFreqPositions = 0;
         for (k = 0; k < ANT_MAXFREQUENCIES; ++k) {
-          if ((satBlock.GnssFrequencyMask >> k) & 1U)
+          if ((satBlock.GnssFrequencyMask >> (ANT_MAXFREQUENCIES - 1 - k)) & 1U)
             freqPositions[numFreqPositions++] = k;
         }
@@ -1174,5 +1176,5 @@
           }
 #ifdef BNC_DEBUG_SSR
-          fprintf(stderr, "  freq %d nadirCorrInd %d nadirCorr %d\n",
+          fprintf(stderr, "  freq %d nadirCorrInd %d nadirCorr %f\n",
             f, satBlock.Freq[f].NadirCorrectionIndicator, satBlock.Freq[f].NadirCorrection);
 #endif
