diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 4eb34321d71248ee37cb5d2b6583a4f53aa16e8f..c9aa16441ff908f08c6512d6385dd80fcc179af4 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -424,10 +424,16 @@ void exit_fun(const char* s)
   oai_exit = 1;
   
   for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-    if (PHY_vars_eNB_g[0][CC_id]->rfdevice.trx_end_func)
-      PHY_vars_eNB_g[0][CC_id]->rfdevice.trx_end_func(&PHY_vars_eNB_g[0][CC_id]->rfdevice);
-    if (PHY_vars_eNB_g[0][CC_id]->ifdevice.trx_end_func)
-      PHY_vars_eNB_g[0][CC_id]->ifdevice.trx_end_func(&PHY_vars_eNB_g[0][CC_id]->ifdevice);  
+    if (UE_flag == 0) {
+      if (PHY_vars_eNB_g[0][CC_id]->rfdevice.trx_end_func)
+	PHY_vars_eNB_g[0][CC_id]->rfdevice.trx_end_func(&PHY_vars_eNB_g[0][CC_id]->rfdevice);
+      if (PHY_vars_eNB_g[0][CC_id]->ifdevice.trx_end_func)
+	PHY_vars_eNB_g[0][CC_id]->ifdevice.trx_end_func(&PHY_vars_eNB_g[0][CC_id]->ifdevice);  
+    }
+    else {
+      if (PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func)
+	PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][CC_id]->rfdevice);
+    }
   }
 
 #if defined(ENABLE_ITTI)
@@ -1789,14 +1795,16 @@ int main( int argc, char **argv )
 
   // start the main thread
   if (UE_flag == 1) init_UE(1);
-  else init_eNB(node_function,node_timing,1,eth_params,single_thread_flag);
+  else { 
+    init_eNB(node_function,node_timing,1,eth_params,single_thread_flag);
   // Sleep to allow all threads to setup
 
-  number_of_cards = 1;
-
-  for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-    PHY_vars_eNB_g[0][CC_id]->rf_map.card=0;
-    PHY_vars_eNB_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
+    number_of_cards = 1;
+    
+    for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
+      PHY_vars_eNB_g[0][CC_id]->rf_map.card=0;
+      PHY_vars_eNB_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
+    }
   }
 
   // connect the TX/RX buffers
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index c33005ebabc95d337e8805dc6ba2803c37cc8eef..190951bf004df48d9f6c9b9d5d7b90c0319c2d5a 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -188,7 +188,7 @@ void init_UE(int nb_inst) {
 
     ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]);
     UE->rfdevice.host_type = BBU_HOST;
-    UE->rfdevice.type      = NONE_DEV;
+    //    UE->rfdevice.type      = NONE_DEV;
     error_code = pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue, UE_thread, NULL);
     
     if (error_code!= 0) {
@@ -369,10 +369,7 @@ static void *UE_thread_synch(void *arg)
 
   }
 
-  if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { 
-    LOG_E(HW,"Could not start the device\n");
-    oai_exit=1;
-  }
+
   pthread_mutex_lock(&sync_mutex);
   printf("Locked sync_mutex, waiting (UE_sync_thread)\n");
 
@@ -382,6 +379,11 @@ static void *UE_thread_synch(void *arg)
   pthread_mutex_unlock(&sync_mutex);
   printf("Started device, unlocked sync_mutex (UE_sync_thread)\n");
 
+  if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { 
+    LOG_E(HW,"Could not start the device\n");
+    oai_exit=1;
+  }
+
   while (oai_exit==0) {
 
     if (pthread_mutex_lock(&UE->proc.mutex_synch) != 0) {
@@ -941,7 +943,14 @@ void *UE_thread(void *arg) {
 					   rxp,
 					   UE->frame_parms.samples_per_tti*10,
 					   UE->frame_parms.nb_antennas_rx);
+
+	  
+	  if (rxs!=UE->frame_parms.samples_per_tti*10) {
+	    exit_fun("problem in rx");
+	    return &UE_thread_retval;
+	  }
 	}
+
 	instance_cnt_synch = ++UE->proc.instance_cnt_synch;
 	if (instance_cnt_synch == 0) {
 	  if (pthread_cond_signal(&UE->proc.cond_synch) != 0) {
@@ -968,6 +977,12 @@ void *UE_thread(void *arg) {
 					     rxp,
 					     UE->frame_parms.samples_per_tti,
 					     UE->frame_parms.nb_antennas_rx);
+
+	    if (rxs!=UE->frame_parms.samples_per_tti){
+	      exit_fun("problem in rx");
+	      return &UE_thread_retval;
+	    }
+
 	  }
 	}
       }
@@ -1065,12 +1080,12 @@ void *UE_thread(void *arg) {
 	  proc->frame_tx = proc->frame_rx + ((proc->subframe_rx>5)?1:0);
 	  proc->timestamp_tx = timestamp+(4*UE->frame_parms.samples_per_tti)-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0;
 
-
+	  /*
 	  if (sf != (timestamp/UE->frame_parms.samples_per_tti)%10) {
 	    LOG_E(PHY,"steady-state UE_thread error : frame_rx %d, subframe_rx %d, frame_tx %d, subframe_tx %d, rx subframe %d\n",proc->frame_rx,proc->subframe_rx,proc->frame_tx,proc->subframe_tx,(timestamp/UE->frame_parms.samples_per_tti)%10);
 	    exit(-1);
 	  }
-
+	  */
 	  if (pthread_mutex_unlock(&proc->mutex_rxtx) != 0) {
 	    LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RX\n" );
 	    exit_fun("nothing to add");