diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 4f34667b646adb34f68f2761c2b9acca6fad21b7..3775b7e1dc06f939c018ac7e582cec0e2bfc8ce1 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -101,6 +101,8 @@ const char* eurecomVariablesNames[] = {
   "itti_alloc_msg",
   "mp_alloc",
   "mp_free",
+  "ue_inst_cnt_rx",
+  "ue_inst_cnt_tx"
 };
 
 const char* eurecomFunctionsNames[] = {
@@ -128,6 +130,8 @@ const char* eurecomFunctionsNames[] = {
   "eNB_thread_rx8",
   "eNB_thread_tx9",
   "eNB_thread_rx9",
+  "ue_thread_tx",
+  "ue_thread_rx",
 
   /* PHY signals  */
   "ue_synch",
@@ -198,6 +202,7 @@ const char* eurecomFunctionsNames[] = {
   "mac_dlsch_preprocessor",
   "mac_schedule_dlsch",
   "mac_fill_dlsch_dci",
+
   "macxface_out_of_sync_ind",
   "macxface_ue_decode_si",
   "macxface_ue_decode_ccch",
@@ -210,7 +215,6 @@ const char* eurecomFunctionsNames[] = {
   "macxface_ue_get_sr",
 
   "ue_send_mch_sdu",
-  "ue_synch",
 
   /*RLC signals   */
   "rlc_data_req",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index 6c9845de6f84f138d6f384bfe0205ea74a4d9baf..2d8560d615e642bd494cb20cb815daf691c141a5 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -73,6 +73,8 @@ typedef enum {
   VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG,
   VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC,
   VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE,
+  VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX,
+  VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX,
   VCD_SIGNAL_DUMPER_VARIABLES_LAST,
   VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST,
 } vcd_signal_dump_variables;
@@ -102,6 +104,8 @@ typedef enum {
   VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX8,
   VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX9,
   VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX9,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX,
 
   /* PHY signals  */
   VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index ec6caaa945e4f46572e468166cbdea91e08a564d..3bf63d365330f121fe02f2c9830a9ac6a27e5cee 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -623,6 +623,7 @@ static void *UE_thread_tx(void *arg)
       exit_fun("nothing to add");
       return &UE_thread_tx_retval;
     }
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, 1 );
 
     if ((subframe_select( &UE->lte_frame_parms, UE->slot_tx>>1 ) == SF_UL) ||
         (UE->lte_frame_parms.frame_type == FDD)) {
@@ -661,6 +662,17 @@ static void *UE_thread_tx(void *arg)
     }
 
 #endif
+    UE->slot_tx += 2;
+
+    if (UE->slot_tx >= 20) {
+      UE->slot_tx -= 20;
+      UE->frame_tx++;
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_UE, UE->frame_tx );
+    }
+
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX_UE, UE->slot_tx>>1 );
+
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, 0 );
 
     if (pthread_mutex_lock(&UE->mutex_tx) != 0) {
       LOG_E( PHY, "[SCHED][UE] error locking mutex for UE TX thread\n" );
@@ -669,6 +681,7 @@ static void *UE_thread_tx(void *arg)
     }
 
     UE->instance_cnt_tx--;
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, UE->instance_cnt_tx);
 
     if (pthread_mutex_unlock(&UE->mutex_tx) != 0) {
       LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE TX thread\n" );
@@ -676,15 +689,6 @@ static void *UE_thread_tx(void *arg)
       return &UE_thread_tx_retval;
     }
 
-    UE->slot_tx += 2;
-
-    if (UE->slot_tx >= 20) {
-      UE->slot_tx -= 20;
-      UE->frame_tx++;
-      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_UE, UE->frame_tx );
-    }
-
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX_UE, UE->slot_tx>>1 );
   }
 
   return &UE_thread_tx_retval;
@@ -794,6 +798,7 @@ static void *UE_thread_rx(void *arg)
       return &UE_thread_rx_retval;
     }
 
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, 1 );
     for (i=0; i<2; i++) {
       if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_DL) ||
           (UE->lte_frame_parms.frame_type == FDD)) {
@@ -908,6 +913,8 @@ static void *UE_thread_rx(void *arg)
 
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX_UE, UE->slot_rx>>1 );
     }
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, 0 );
+
 
     if (pthread_mutex_lock(&UE->mutex_rx) != 0) {
       LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX\n" );
@@ -916,6 +923,7 @@ static void *UE_thread_rx(void *arg)
     }
 
     UE->instance_cnt_rx--;
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, UE->instance_cnt_rx);
 
     if (pthread_mutex_unlock(&UE->mutex_rx) != 0) {
       LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RX\n" );
@@ -1110,6 +1118,9 @@ void *UE_thread(void *arg)
           return &UE_thread_retval;
         }
 
+	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, instance_cnt_rx);
+
+
         if (instance_cnt_rx == 0) {
           if (pthread_cond_signal(&UE->cond_rx) != 0) {
             LOG_E( PHY, "[SCHED][UE] ERROR pthread_cond_signal for UE RX thread\n" );
@@ -1117,6 +1128,8 @@ void *UE_thread(void *arg)
             return &UE_thread_retval;
           }
 
+	  LOG_D(HW,"signalled rx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 );
+
           if (UE->mode == rx_calib_ue) {
             if (frame == 10) {
               LOG_D(PHY,
@@ -1156,6 +1169,8 @@ void *UE_thread(void *arg)
             exit_fun("nothing to add");
             return &UE_thread_retval;
           }
+	  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, instance_cnt_tx);
+
 
           if (instance_cnt_tx == 0) {
             if (pthread_cond_signal(&UE->cond_tx) != 0) {
@@ -1163,6 +1178,8 @@ void *UE_thread(void *arg)
               exit_fun("nothing to add");
               return &UE_thread_retval;
             }
+	  LOG_D(HW,"signalled tx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 );
+
           } else {
             LOG_E( PHY, "[SCHED][UE] UE TX thread busy!!\n" );
             exit_fun("nothing to add");
@@ -1504,11 +1521,13 @@ void *UE_thread(void *arg)
           exit_fun("nothing to add");
         } else {
 
-          UE->instance_cnt_rx++;
-          //printf("UE_thread: Unlocking UE mutex_rx\n");
+	  int instance_cnt_rx = ++UE->instance_cnt_rx;
+
           pthread_mutex_unlock(&UE->mutex_rx);
+	  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, instance_cnt_rx);
+
 
-          if (UE->instance_cnt_rx == 0) {
+          if (instance_cnt_rx == 0) {
             LOG_D(HW,"Scheduling UE RX for frame %d (hw frame %d), subframe %d (%d), mode %d\n",UE->frame_rx,frame,slot>>1,UE->slot_rx>>1,UE->mode);
 
             if (pthread_cond_signal(&UE->cond_rx) != 0) {
@@ -1548,11 +1567,12 @@ void *UE_thread(void *arg)
           exit_fun("nothing to add");
         } else {
 
-          UE->instance_cnt_tx++;
-          //printf("UE_thread: Unlocking UE mutex_rx\n");
+          int instance_cnt_tx = ++UE->instance_cnt_tx;
+
           pthread_mutex_unlock(&UE->mutex_tx);
+	  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, instance_cnt_tx);
 
-          if (UE->instance_cnt_tx == 0) {
+          if (instance_cnt_tx == 0) {
             LOG_D(HW,"Scheduling UE TX for frame %d (hw frame %d), subframe %d (%d), mode %d\n",UE->frame_tx,frame,slot>>1,UE->slot_tx>>1,UE->mode);
 
             if (pthread_cond_signal(&UE->cond_tx) != 0) {
diff --git a/targets/RT/USER/ue_exmimo2.gtkw b/targets/RT/USER/ue_exmimo2.gtkw
index e9cac851003c433f25e24349d95573d190c6bac3..5be62a28de27090c348261125ce1862929758a29 100644
--- a/targets/RT/USER/ue_exmimo2.gtkw
+++ b/targets/RT/USER/ue_exmimo2.gtkw
@@ -1,15 +1,15 @@
 [*]
 [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
-[*] Thu Feb  5 17:45:30 2015
+[*] Tue Jun 23 10:22:38 2015
 [*]
 [dumpfile] "/tmp/openair_dump_UE.vcd"
-[dumpfile_mtime] "Thu Feb  5 17:10:05 2015"
-[dumpfile_size] 18764854
-[savefile] "/home/ephese/openair4G/targets/RT/USER/ue_exmimo2.gtkw"
-[timestart] 4937140000
-[size] 1463 640
+[dumpfile_mtime] "Tue Jun 23 10:21:56 2015"
+[dumpfile_size] 15561726
+[savefile] "/home/stevens/openair4G/targets/RT/USER/ue_exmimo2.gtkw"
+[timestart] 10448200000
+[size] 1215 640
 [pos] 105 102
-*-22.000000 4947033063 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+*-23.292629 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 [sst_width] 224
 [signals_width] 262
 [sst_expanded] 1
@@ -26,9 +26,15 @@ functions.rt_sleep
 variables.subframe_number_RX_UE[63:0]
 variables.subframe_number_TX_UE[63:0]
 variables.slot_number_RX_UE[63:0]
-@25
 variables.slot_number_RX_UE[63:0]
 @28
+functions.ue_thread_rx
+functions.ue_thread_tx
+@420
+variables.ue_inst_cnt_rx[63:0]
+@421
+variables.ue_inst_cnt_tx[63:0]
+@28
 functions.phy_procedures_ue_rx
 functions.phy_procedures_ue_tx
 @24