diff --git a/Transceiver52M/DriveLoop.cpp b/Transceiver52M/DriveLoop.cpp
index b35810c..c235c70 100644
--- a/Transceiver52M/DriveLoop.cpp
+++ b/Transceiver52M/DriveLoop.cpp
@@ -239,7 +239,7 @@
   RadioClock *radioClock = (mRadioInterface->getClock());
   timeDiff = radioClock->get() + mTransmitLatency - mTransmitDeadlineClock;
   while (timeDiff > 0) {
-    RTMD_VAL("DriveTimeDiff", timeDiff.FN()*8+timeDiff.TN());
+    RTMD_VAL("DrvTxFIFO-TDiff", timeDiff.FN()*8+timeDiff.TN());
     pushRadioVector(mTransmitDeadlineClock);
     mTransmitDeadlineClock.incTN();
     timeDiff = radioClock->get() + mTransmitLatency - mTransmitDeadlineClock;
@@ -252,6 +252,7 @@
 
 void DriveLoop::writeClockInterface()
 {
+  RTMD_SET("TRX-writeClk");
   char command[50];
   // FIXME -- This should be adaptive.
   sprintf(command,"IND CLOCK %llu",
@@ -262,6 +263,8 @@
   mClockSocket.write(command,strlen(command)+1);
 
   mLastClockUpdateTime = mTransmitDeadlineClock;
+
+  RTMD_CLEAR("TRX-writeClk");
 }
 
 void DriveLoop::runThread()
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 39cad3a..6606906 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -32,6 +32,7 @@
 #include <stdio.h>
 #include "Transceiver.h"
 #include <Logger.h>
+#include "RTMD.h"
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -122,11 +123,16 @@
 				      int &RSSI,
 				      int &timingOffset)
 {
+  RTMD_SET("TRX-pullRadioVector");
   bool needDFE = (mMaxExpectedDelay > 1);
 
   radioVector *rxBurst = (radioVector *) mReceiveFIFO->read();
 
-  if (!rxBurst) return NULL;
+  if (!rxBurst) {
+    RTMD_VAL("TRX-pullRadioVector", -1);
+    RTMD_CLEAR("TRX-pullRadioVector");
+    return NULL;
+  }
 
   LOG(DEBUG) << "receiveFIFO: read radio vector at time: " << rxBurst->getTime() << ", new size: " << mReceiveFIFO->size();
 
@@ -136,6 +142,8 @@
 
   if ((corrType == DriveLoop::OFF) || (corrType == DriveLoop::IDLE)) {
     delete rxBurst;
+    RTMD_VAL("TRX-pullRadioVector", -2);
+    RTMD_CLEAR("TRX-pullRadioVector");
     return NULL;
   }
  
@@ -156,6 +164,8 @@
         prevFalseDetectionTime = rxBurst->getTime();
      }
      delete rxBurst;
+     RTMD_VAL("TRX-pullRadioVector", -3);
+     RTMD_CLEAR("TRX-pullRadioVector");
      return NULL;
   }
   LOG(DEBUG) << "Estimated Energy: " << sqrt(avgPwr) << ", at time " << rxBurst->getTime();
@@ -233,6 +243,7 @@
     }
   }
   LOG(DEBUG) << "energy Threshold = " << mEnergyThreshold; 
+  RTMD_VAL("TRX-EnergyThresh", int(mEnergyThreshold*10));
 
   // demodulate burst
   SoftVector *burst = NULL;
@@ -261,11 +272,13 @@
 
   delete rxBurst;
 
+  RTMD_CLEAR("TRX-pullRadioVector");
   return burst;
 }
 
 void Transceiver::pullFIFO()
 {
+  RTMD_SET("TRX-pullFIFO");
   SoftVector *rxBurst = NULL;
   int RSSI;
   int TOA;  // in 1/256 of a symbol
@@ -279,6 +292,10 @@
                << " RSSI: " << RSSI
                << " TOA: "  << TOA
                << " bits: " << *rxBurst;
+    RTMD_VAL("TRX-RSSI", RSSI);
+    RTMD_CLEAR("TRX-RSSI");
+    RTMD_VAL("TRX-TOA", TOA);
+    RTMD_CLEAR("TRX-TOA");
 
     char burstString[gSlotLen+10];
     burstString[0] = burstTime.TN();
@@ -300,6 +317,7 @@
 
     mDataSocket.write(burstString,gSlotLen+10);
   }
+  RTMD_CLEAR("TRX-pullFIFO");
 }
 
 void Transceiver::start()
@@ -331,6 +349,7 @@
   
 void Transceiver::driveControl()
 {
+  RTMD_SET("driveControl");
 
   int MAX_PACKET_LENGTH = 100;
 
@@ -342,15 +361,21 @@
   try { 
     msgLen = mControlSocket.read(buffer);
     if (msgLen < 1) {
+      RTMD_VAL("driveControl", -1);
+      RTMD_CLEAR("driveControl");
       return;
     }
   } catch (...) {
     /* Ignore the read exception on shutdown */
     if (!mRunning) {
+      RTMD_VAL("driveControl", -2);
+      RTMD_CLEAR("driveControl");
       return;
     }
 
     LOG(ALERT) << "Caught UHD socket exception";
+    RTMD_VAL("driveControl", -3);
+    RTMD_CLEAR("driveControl");
     return;
   }
 
@@ -364,6 +389,8 @@
 
   if (strcmp(cmdcheck,"CMD")!=0) {
     LOG(WARNING) << "bogus message on control interface";
+    RTMD_VAL("driveControl", -4);
+    RTMD_CLEAR("driveControl");
     return;
   }
   LOG(INFO) << "command is " << buffer;
@@ -486,6 +513,8 @@
     if ((timeslot < 0) || (timeslot > 7)) {
       LOG(WARNING) << "bogus message on control interface";
       sprintf(response,"RSP SETSLOT 1 %d %d",timeslot,corrCode);
+      RTMD_VAL("driveControl", -5);
+      RTMD_CLEAR("driveControl");
       return;
     }     
     mDriveLoop->setTimeslot(mChannel, timeslot, (DriveLoop::ChannelCombination) corrCode);
@@ -500,28 +529,39 @@
 
   mControlSocket.write(response,strlen(response)+1);
 
+  RTMD_CLEAR("driveControl");
 }
 
 bool Transceiver::driveTransmitPriorityQueue() 
 {
+  RTMD_SET("TRX-drvTxPQueue");
   char buffer[gSlotLen+50];
 
-  if (!mOn)
+  if (!mOn) {
+    RTMD_VAL("TRX-drvTxPQueue", -1);
+    RTMD_CLEAR("TRX-drvTxPQueue");
     return true;
+  }
 
   try { 
     size_t msgLen = mDataSocket.read(buffer);
     if (msgLen!=gSlotLen+1+4+1) {
       LOG(ERR) << "badly formatted packet on GSM->TRX interface";
+      RTMD_VAL("TRX-drvTxPQueue", -2);
+      RTMD_CLEAR("TRX-drvTxPQueue");
       return false;
     }
   } catch (...) {
     if (!mOn) {
       /* Shutdown condition. End the thread. */
+      RTMD_VAL("TRX-drvTxPQueue", -3);
+      RTMD_CLEAR("TRX-drvTxPQueue");
       return true;
     }
 
     LOG(ALERT) << "Caught UHD socket exception";
+    RTMD_VAL("TRX-drvTxPQueue", -4);
+    RTMD_CLEAR("TRX-drvTxPQueue");
     return false;
   }
 
@@ -552,6 +592,7 @@
   
   LOG(DEBUG) "added burst - time: " << currTime << ", RSSI: " << RSSI; // << ", data: " << newBurst; 
 
+  RTMD_CLEAR("TRX-drvTxPQueue");
   return true;
 
 
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index 4fcb28d..bf64996 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -249,16 +249,16 @@
 
 void RadioInterface::driveReceiveRadio()
 {
-  RTMD_SET("driveReceiveRadio");
+  RTMD_SET("drvRxRadio");
   if (!mOn) {
-    RTMD_VAL("driveReceiveRadio", -1);
-    RTMD_CLEAR("driveReceiveRadio");
+    RTMD_VAL("drvRxRadio", -1);
+    RTMD_CLEAR("drvRxRadio");
     return;
   }
 
   if (mReceiveFIFO[0].size() > 8) {
-    RTMD_VAL("driveReceiveRadio", 2);
-    RTMD_CLEAR("driveReceiveRadio");
+    RTMD_VAL("drvRxRadio", 2);
+    RTMD_CLEAR("drvRxRadio");
     return;
   }
 
@@ -294,7 +294,7 @@
     rcvCursor -= readSz;
     shiftRxBuffers(rcvBuffer, 2 * readSz, 2 * rcvCursor, mChanM);
   }
-  RTMD_CLEAR("driveReceiveRadio");
+  RTMD_CLEAR("drvRxRadio");
 }
 
 double RadioInterface::setRxGain(double dB, int chan)
@@ -333,7 +333,7 @@
 void RadioInterface::pullBuffer()
 {
   bool local_underrun;
-  RTMD_SET("RIPullBuff");
+  RTMD_SET("RI-PullBuff");
 
   /* Read samples. Fail if we don't get what we want. */
   int num_rd = mRadio->readSamples(rx_buf, mChanM, OUTCHUNK, readTimestamp);
@@ -348,16 +348,16 @@
     shortToFloat(rcvBuffer[i] + 2 * rcvCursor, rx_buf[i], num_rd);
 
   rcvCursor += num_rd;
-  RTMD_CLEAR("RIPullBuff");
+  RTMD_CLEAR("RI-PullBuff");
 }
 
 /* Send timestamped chunk to the device with arbitrary size */ 
 void RadioInterface::pushBuffer()
 {
-  RTMD_SET("RIPushBuff");
+  RTMD_SET("RI-PushBuff");
   if (sendCursor < INCHUNK) {
-    RTMD_VAL("RIPushBuff", -1);
-    RTMD_CLEAR("RIPushBuff");
+    RTMD_VAL("RI-PushBuff", -1);
+    RTMD_CLEAR("RI-PushBuff");
     return;
   }
 
@@ -371,5 +371,5 @@
 
   writeTimestamp += (TIMESTAMP) num_smpls;
   sendCursor = 0;
-  RTMD_CLEAR("RIPushBuff");
+  RTMD_CLEAR("RI-PushBuff");
 }
