Index: /branches/BNC_2.12/src/GPSDecoder.h
===================================================================
--- /branches/BNC_2.12/src/GPSDecoder.h	(revision 8199)
+++ /branches/BNC_2.12/src/GPSDecoder.h	(revision 8200)
@@ -80,4 +80,5 @@
   QList<int>       _typeList;  // RTCM message types
   QStringList      _antType;   // RTCM antenna descriptor
+  QStringList      _recType;   // RTCM receiver descriptor
   QList<t_antInfo> _antList;   // RTCM antenna XYZ
   QString          _gloFrq;    // GLONASS slot
Index: /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 8199)
+++ /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.cpp	(revision 8200)
@@ -1046,7 +1046,4 @@
     GETBITS(i, 5)
     eph._frequency_number = i - 7;
-    GLOFreq[sv - 1] = 100 + i - 7; /* store frequency for other users (MSM) */
-    _gloFrq = QString("%1 %2").arg(eph._prn.toString().c_str()).arg(
-        eph._frequency_number, 2, 'f', 0);
     GETBITS(eph._almanac_health, 1) /* almanac healthy */
     GETBITS(eph._almanac_health_availablility_indicator, 1) /* almanac health ok */
@@ -1103,4 +1100,7 @@
     eph._xv(6) = eph._z_velocity * 1.e3;
 
+   GLOFreq[sv - 1] = 100 + eph._frequency_number ; /* store frequency for other users (MSM) */
+    _gloFrq = QString("%1 %2").arg(eph._prn.toString().c_str()).arg(eph._frequency_number, 2, 'f', 0);
+    
     emit newGlonassEph(eph);
     decoded = true;
@@ -1381,19 +1381,39 @@
 //
 ////////////////////////////////////////////////////////////////////////////
-bool RTCM3Decoder::DecodeAntenna(unsigned char* data, int size) {
-  char *antenna, type[256];
+bool RTCM3Decoder::DecodeAntennaReceiver(unsigned char* data, int size) {
+  char *antenna, anttype[256];
+  char *dummy;
+  char *receiver, rectype[256];
+
+  int type;
+
+  int dnum = -1;
   int antnum = -1;
+  int recnum = -1;
   uint64_t numbits = 0, bitfield = 0;
 
-  data += 4; /* header */
+  data += 3; /* header*/
   size -= 6; /* header + crc */
 
+  GETBITS(type, 12)
   SKIPBITS(12)
   GETSTRING(antnum, antenna)
   if (antnum > -1 && antnum < 265) {
-    memcpy(type, antenna, antnum);
-    type[antnum] = 0;
-    if (!_antType.contains(type)) {
-      _antType.push_back(type);
+    memcpy(anttype, antenna, antnum);
+    anttype[antnum] = 0;
+    if (!_antType.contains(anttype)) {
+      _antType.push_back(anttype);
+    }
+  }
+  if (type == 1033) {
+    SKIPBITS(8)
+    GETSTRING(dnum, dummy)
+    GETSTRING(recnum, receiver)
+    if (recnum > -1 && recnum < 265) {
+      memcpy(rectype, receiver, recnum);
+      rectype[recnum] = 0;
+      if (!_recType.contains(rectype)) {
+        _recType.push_back(rectype);
+      }
     }
   }
@@ -1526,5 +1546,5 @@
           case 1008:
           case 1033:
-            DecodeAntenna(_Message, _BlockSize);
+            DecodeAntennaReceiver(_Message, _BlockSize);
             break;
           case 1005:
Index: /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.h
===================================================================
--- /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.h	(revision 8199)
+++ /branches/BNC_2.12/src/RTCM3/RTCM3Decoder.h	(revision 8200)
@@ -146,10 +146,11 @@
   bool DecodeBDSEphemeris(unsigned char* buffer, int bufLen);
   /**
-   * Extract antenna type from 1007, 1008 or 1033 RTCM3 messages.
-   * @param buffer the buffer containing an antenna RTCM block
+   * Extract antenna type from 1007, 1008 or 1033 RTCM3 messages
+   * and extract receiver type from 1033 RTCM3 messages
+   * @param buffer the buffer containing an antenna (and receiver) RTCM block
    * @param bufLen the length of the buffer (the message length including header+crc)
    * @return <code>true</code> when data block was decodable
    */
-  bool DecodeAntenna(unsigned char* buffer, int bufLen);
+  bool DecodeAntennaReceiver(unsigned char* buffer, int bufLen);
   /**
    * Extract antenna type from 1005 or 1006 RTCM3 messages.
Index: /branches/BNC_2.12/src/bncgetthread.cpp
===================================================================
--- /branches/BNC_2.12/src/bncgetthread.cpp	(revision 8199)
+++ /branches/BNC_2.12/src/bncgetthread.cpp	(revision 8200)
@@ -888,4 +888,11 @@
       }
 
+      // RTCMv3 receiver descriptor
+      // --------------------------
+      for (int ii = 0; ii < decoder()->_recType.size(); ii++) {
+        QString rec1 = QString("%1 ").arg(decoder()->_recType[ii]);
+        emit(newMessage(_staID + ": Receiver descriptor " + rec1.toLatin1(), true));
+      }
+
       // RTCM GLONASS slots
       // ------------------
@@ -934,4 +941,5 @@
   decoder()->_typeList.clear();
   decoder()->_antType.clear();
+  decoder()->_recType.clear();
   decoder()->_antList.clear();
 }
