Index: branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 8180)
+++ branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 8184)
@@ -1049,6 +1049,7 @@
     _gloFrq = QString("%1 %2").arg(eph._prn.toString().c_str()).arg(
         eph._frequency_number, 2, 'f', 0);
-    SKIPBITS(4)
-    /* almanac healthy, almanac health ok, P1 */
+    GETBITS(eph._almanac_health, 1) /* almanac healthy */
+    GETBITS(eph._almanac_health_availablility_indicator, 1) /* almanac health ok */
+    GETBITS(eph._P1, 2) /*  P1 */
     GETBITS(i, 5)
     tk = i * 60 * 60;
@@ -1058,7 +1059,6 @@
     tk += i * 30;
     eph._tki = tk < 3 * 60 * 60 ? tk - 3 * 60 * 60 + 86400 : tk - 3 * 60 * 60;
-    GETBITS(eph._health, 1)
-    SKIPBITS(1)
-    /* P2 */
+    GETBITS(eph._health, 1) /* MSB of Bn*/
+    GETBITS(eph._P2, 1)  /* P2 */
     GETBITS(i, 7)
     eph._TOC.setTk(i * 15 * 60 * 1000); /* tb */
@@ -1073,24 +1073,21 @@
     GETFLOATSIGNM(eph._z_pos, 27, 1.0 / (double )(1 << 11))
     GETFLOATSIGNM(eph._z_acceleration, 5, 1.0 / (double )(1 << 30))
-    SKIPBITS(1)
-    /* P3 */
+    GETBITS(eph._P3, 1)    /* P3 */
     GETFLOATSIGNM(eph._gamma, 11, 1.0 / (double )(1 << 30) / (double )(1 << 10))
-    SKIPBITS(3)
-    /* GLONASS-M P, GLONASS-M ln (third string) */
-    GETFLOATSIGNM(eph._tau, 22, 1.0 / (double )(1 << 30))
-    /* GLONASS tau n(tb) */
-    SKIPBITS(5)
-    /* GLONASS-M delta tau n(tb) */
+    GETBITS(eph._M_P, 2) /* GLONASS-M P, */
+    GETBITS(eph._M_l3, 1) /*GLONASS-M ln (third string) */
+    GETFLOATSIGNM(eph._tau, 22, 1.0 / (double )(1 << 30)) /* GLONASS tau n(tb) */
+    GETFLOATSIGNM(eph._M_delta_tau, 5, 1.0 / (double )(1 << 30))  /* GLONASS-M delta tau n(tb) */
     GETBITS(eph._E, 5)
-    /* GETBITS(i, 1) / * GLONASS-M P4 */
-    /* GETBITS(i, 4) / * GLONASS-M Ft */
-    /* GETBITS(i, 11) / * GLONASS-M Nt */
-    /* GETBITS(i, 2) / * GLONASS-M M */
-    /* GETBITS(i, 1) / * GLONASS-M The Availability of Additional Data */
-    /* GETBITS(i, 11) / * GLONASS-M Na */
-    /* GETFLOATSIGNM(i, 32, 1.0/(double)(1<<30)/(double)(1<<1)) / * GLONASS tau c */
-    /* GETBITS(i, 5) / * GLONASS-M N4 */
-    /* GETFLOATSIGNM(i, 22, 1.0/(double)(1<<30)) / * GLONASS-M tau GPS */
-    /* GETBITS(i, 1) / * GLONASS-M ln (fifth string) */
+    GETBITS(eph._M_P4, 1) /* GLONASS-M P4 */
+    GETBITS(eph._M_FT, 4) /* GLONASS-M Ft */
+    GETBITS(eph._M_NT, 11) /* GLONASS-M Nt */
+    GETBITS(eph._M_M, 2) /* GLONASS-M M */
+    GETBITS(eph._additional_data_availability, 1) /* GLONASS-M The Availability of Additional Data */
+    GETBITS(eph._NA, 11) /* GLONASS-M Na */
+    GETFLOATSIGNM(eph._tauC, 32, 1.0/(double)(1<<30)/(double)(1<<1)) /* GLONASS tau c */
+    GETBITS(eph._M_N4, 5) /* GLONASS-M N4 */
+    GETFLOATSIGNM(eph._M_tau_GPS, 22, 1.0/(double)(1<<30)) /* GLONASS-M tau GPS */
+    GETBITS(eph._M_l5, 1) /* GLONASS-M ln (fifth string) */
 
     unsigned year, month, day;
Index: branches/BNC_2.12/src/RTCM3/ephEncoder.cpp
===================================================================
--- branches/BNC_2.12/src/RTCM3/ephEncoder.cpp	(revision 8180)
+++ branches/BNC_2.12/src/RTCM3/ephEncoder.cpp	(revision 8184)
@@ -123,7 +123,7 @@
   GLONASSADDBITS(6, eph._prn.number())
   GLONASSADDBITS(5, 7+eph._frequency_number)
-  GLONASSADDBITS(1, 0)
-  GLONASSADDBITS(1, 0)
-  GLONASSADDBITS(2, 0)
+  GLONASSADDBITS(1, eph._almanac_health)
+  GLONASSADDBITS(1, eph._almanac_health_availablility_indicator)
+  GLONASSADDBITS(2, eph._P1)
   int tki = static_cast<int>(eph._tki)+3*60*60;
   if (tki > 86400) {tki -= 86400;}
@@ -132,5 +132,5 @@
   GLONASSADDBITS(1, (static_cast<int>(tki)/30)%30)
   GLONASSADDBITS(1, eph._health)
-  GLONASSADDBITS(1, 0)
+  GLONASSADDBITS(1, eph._P2)
   unsigned long long timeofday = (static_cast<int>(eph._tt.gpssec()+3*60*60-eph._gps_utc)%86400);
   GLONASSADDBITS(7, timeofday/60/15)
@@ -144,22 +144,21 @@
   GLONASSADDBITSFLOATM(27,eph._z_pos*1000, 1000.0/static_cast<double>(1<<11))
   GLONASSADDBITSFLOATM(5, eph._z_acceleration*1000, 1000.0/static_cast<double>(1<<30))
-  GLONASSADDBITS(1, 0)
-  GLONASSADDBITSFLOATM(11, eph._gamma, 1.0/static_cast<double>(1<<30)
-  /static_cast<double>(1<<10))
-  GLONASSADDBITS(2, 0) /* GLONASS-M P */
-  GLONASSADDBITS(1, 0) /* GLONASS-M ln(3) */
+  GLONASSADDBITS(1, eph._P3)
+  GLONASSADDBITSFLOATM(11, eph._gamma, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<10))
+  GLONASSADDBITS(2, eph._M_P) /* GLONASS-M P */
+  GLONASSADDBITS(1, eph._M_l3) /* GLONASS-M ln(3) */
   GLONASSADDBITSFLOATM(22, eph._tau, 1.0/static_cast<double>(1<<30))
-  GLONASSADDBITS(5, 0) /* GLONASS-M delta tau */
+  GLONASSADDBITSFLOATM(5, eph._M_delta_tau, 1.0/static_cast<double>(1<<30)) /* GLONASS-M delta tau */
   GLONASSADDBITS(5, eph._E)
-  GLONASSADDBITS(1, 0) /* GLONASS-M P4 */
-  GLONASSADDBITS(4, 0) /* GLONASS-M FT */
-  GLONASSADDBITS(11, 0) /* GLONASS-M NT */
-  GLONASSADDBITS(2, 0) /* GLONASS-M active? */
-  GLONASSADDBITS(1, 0) /* GLONASS additional data */
-  GLONASSADDBITS(11, 0) /* GLONASS NA */
-  GLONASSADDBITS(32, 0) /* GLONASS tau C */
-  GLONASSADDBITS(5, 0) /* GLONASS-M N4 */
-  GLONASSADDBITS(22, 0) /* GLONASS-M tau GPS */
-  GLONASSADDBITS(1, 0) /* GLONASS-M ln(5) */
+  GLONASSADDBITS(1, eph._M_P4) /* GLONASS-M P4 */
+  GLONASSADDBITS(4, eph._M_FT) /* GLONASS-M FT */
+  GLONASSADDBITS(11, eph._M_NT) /* GLONASS-M NT */
+  GLONASSADDBITS(2, eph._M_M) /* GLONASS-M active? */
+  GLONASSADDBITS(1, eph._additional_data_availability) /* GLONASS additional data */
+  GLONASSADDBITS(11, eph._NA) /* GLONASS NA */
+  GLONASSADDBITSFLOATM(32, eph._tauC, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1)) /* GLONASS tau C */
+  GLONASSADDBITS(5, eph._M_N4) /* GLONASS-M N4 */
+  GLONASSADDBITSFLOATM(22, eph._M_tau_GPS, 1.0/static_cast<double>(1<<30)) /* GLONASS-M tau GPS */
+  GLONASSADDBITS(1, eph._M_l5) /* GLONASS-M ln(5) */
   GLONASSADDBITS(7, 0) /* Reserved */
 
