Index: /branches/BNC_2.12/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.c
===================================================================
--- /branches/BNC_2.12/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.c	(revision 8941)
+++ /branches/BNC_2.12/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.c	(revision 8942)
@@ -101,10 +101,10 @@
 
 #define T_GPS_IODE(a)                    ADDBITS(8, a)      /* DF071 */
-#define T_GLONASS_IOD(a)                 ADDBITS(8, a)      /* DF237 */
+#define T_GLONASS_IOD(a)                 ADDBITS(8, a)      /* DF239 */
 #define T_GALILEO_IOD(a)                 ADDBITS(10, a)     /* DF459 */
 #define T_SBAS_T0MOD(a)                  ADDBITS(9, (a/16)) /* DF468 */
 #define T_SBAS_IODCRC(a)                 ADDBITS(24, a)     /* DF469 */
 #define T_BDS_TOEMOD(a)                  ADDBITS(10, (a/8)) /* DF470 */
-#define T_BDS_IODCRC(a)                  ADDBITS(24, a)     /* DF471 */
+#define T_BDS_IOD(a)                     ADDBITS(8, a)      /* DF471 */
 
 #define T_DELTA_RADIAL(a)                SCALEADDBITS(22,    10000.0, a)
@@ -265,5 +265,5 @@
           T_GPS_SATELLITE_ID(co->Sat[i].ID)
           T_BDS_TOEMOD(co->Sat[i].toe)
-          T_BDS_IODCRC(co->Sat[i].IOD)
+          T_BDS_IOD(co->Sat[i].IOD)
           break;
         }
@@ -393,5 +393,5 @@
             T_GPS_SATELLITE_ID(co->Sat[i].ID)
             T_BDS_TOEMOD(co->Sat[i].toe)
-            T_BDS_IODCRC(co->Sat[i].IOD)
+            T_BDS_IOD(co->Sat[i].IOD)
             break;
           }
@@ -732,5 +732,5 @@
 #define G_SBAS_IODCRC(a)                 GETBITS(a, 24)          /* DF469 */
 #define G_BDS_TOEMOD(a)                  GETBITSFACTOR(a, 10, 8) /* DF470 */
-#define G_BDS_IODCRC(a)                  GETBITS(a, 24)          /* DF471 */
+#define G_BDS_IOD(a)                     GETBITS(a, 8)           /* DF471 */
 
 /* defined values */
@@ -993,5 +993,5 @@
           case CLOCKORBIT_SATBDS:
             G_BDS_TOEMOD(co->Sat[pos].toe)
-            G_BDS_IODCRC(co->Sat[pos].IOD)
+            G_BDS_IOD(co->Sat[pos].IOD)
             break;
           }
@@ -1130,5 +1130,5 @@
           case CLOCKORBIT_SATBDS:
             G_BDS_TOEMOD(co->Sat[pos].toe)
-            G_BDS_IODCRC(co->Sat[pos].IOD)
+            G_BDS_IOD(co->Sat[pos].IOD)
             break;
           }
Index: /branches/BNC_2.12/src/ephemeris.cpp
===================================================================
--- /branches/BNC_2.12/src/ephemeris.cpp	(revision 8941)
+++ /branches/BNC_2.12/src/ephemeris.cpp	(revision 8942)
@@ -1504,32 +1504,5 @@
 ////////////////////////////////////////////////////////////////////////////
 unsigned int t_ephBDS::IOD() const {
-  unsigned char buffer[80];
-  int size = 0;
-  int numbits = 0;
-  long long bitbuffer = 0;
-  unsigned char *startbuffer = buffer;
-
-  BDSADDBITSFLOAT(14, this->_IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
-  BDSADDBITSFLOAT(11, this->_clock_driftrate, 1.0/static_cast<double>(1<<30)
-      /static_cast<double>(1<<30)/static_cast<double>(1<<6))
-  BDSADDBITSFLOAT(22, this->_clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<20))
-  BDSADDBITSFLOAT(24, this->_clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
-  BDSADDBITSFLOAT(18, this->_Crs, 1.0/static_cast<double>(1<<6))
-  BDSADDBITSFLOAT(16, this->_Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
-  BDSADDBITSFLOAT(32, this->_M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(18, this->_Cuc, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(32, this->_e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
-  BDSADDBITSFLOAT(18, this->_Cus, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(32, this->_sqrt_A, 1.0/static_cast<double>(1<<19))
-  BDSADDBITSFLOAT(18, this->_Cic, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(32, this->_OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(18, this->_Cis, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(32, this->_i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(18, this->_Crc, 1.0/static_cast<double>(1<<6))
-  BDSADDBITSFLOAT(32, this->_omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
-  BDSADDBITSFLOAT(24, this->_OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
-  BDSADDBITS(5, 0)  // the last byte is filled by 0-bits to obtain a length of an integer multiple of 8
-
-  return CRC24(size, startbuffer);
+  return (int(_TOEsec)/720) % 240;
 }
 
