diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 8e89433b70c7f1eb314d133dbd5f9853bd707a57..0700c43dcf9090c3a46c1744d05a3a8b8454a9bc 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -690,7 +690,8 @@ typedef enum {
 typedef enum {
   EMPTY     = 0,
   STOP_RU   = 1,
-  RU_FRAME_RESYNCH = 2
+  RU_FRAME_RESYNCH = 2,
+  WAIT_RESYNCH = 3
 } rru_cmd_t;
 
 typedef struct RU_t_s{
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index e36bde783c0bbc5f5ed812ab4773602a3547c0e0..35cd8a95721eea81ffe283cd2e28339b6160b3ca 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -225,7 +225,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
 
   // UE-specific RX processing for subframe n
   if (nfapi_mode == 0 || nfapi_mode == 1) {
-    LOG_I(PHY,"Calling RX procedures for SFNSF %d.%d\n",proc->frame_rx,proc->subframe_rx);
+    LOG_D(PHY,"Calling RX procedures for SFNSF %d.%d\n",proc->frame_rx,proc->subframe_rx);
     phy_procedures_eNB_uespec_RX(eNB, proc, no_relay );
   }
 
@@ -251,7 +251,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
   
   if (oai_exit) return(-1);
 
-  LOG_I(PHY,"Calling eNB_procedures_TX for SFN.SF %d.%d\n",proc->frame_tx,proc->subframe_tx);  
+  LOG_D(PHY,"Calling eNB_procedures_TX for SFN.SF %d.%d\n",proc->frame_tx,proc->subframe_tx);  
   phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
 
   stop_meas( &softmodem_stats_rxtx_sf );
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 9a8b8d1902af945ac5f8c47759bdc8d782316ae5..98aac4eff9f7f781c26f073330b939cacc078f0d 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -488,10 +488,14 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
       LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d)\n",proc->subframe_rx,*subframe);
       exit_fun("Exiting");
     }
-    if (proc->frame_rx != *frame) {
+    if (ru->cmd != WAIT_RESYNCH && proc->frame_rx != *frame) {
       LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->frame_rx %d frame %d)\n",proc->frame_rx,*frame);
       exit_fun("Exiting");
     }
+    else if (ru->cmd == WAIT_RESYNCH && proc->frame_rx != *frame){
+       ru->cmd=EMPTY;
+       *frame=proc->frame_rx; 
+    }
   } else {
     proc->first_rx = 0;
     *frame = proc->frame_rx;
@@ -1275,7 +1279,8 @@ void wakeup_eNBs(RU_t *ru) {
     sprintf(string,"Incoming RU %d",ru->idx);
     
     pthread_mutex_lock(&proc->mutex_RU);
-    LOG_D(PHY,"Frame %d, Subframe %d: RU %d done,RU_mask[%d] %x\n",ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx]);
+    LOG_I(PHY,"Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask[%d] %x\n",
+          ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,ru->wait_cnt,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx]);
 
     if (proc->RU_mask[ru->proc.subframe_rx] == 0)
       clock_gettime(CLOCK_MONOTONIC,&proc->t[ru->proc.subframe_rx]);
@@ -1293,13 +1298,13 @@ void wakeup_eNBs(RU_t *ru) {
     if (proc->RU_mask[ru->proc.subframe_rx] == (1<<eNB->num_RU)-1) {
       proc->RU_mask[ru->proc.subframe_rx] = 0;
       clock_gettime(CLOCK_MONOTONIC,&t);
-      AssertFatal(t.tv_nsec > proc->t[ru->proc.subframe_rx].tv_nsec+500000,
+      AssertFatal(t.tv_nsec < proc->t[ru->proc.subframe_rx].tv_nsec+500000,
                   "Time difference for subframe %d => %d > 5ms\n",
                   ru->proc.subframe_rx,t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec);
     }
     
     pthread_mutex_unlock(&proc->mutex_RU);
-    LOG_D(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
+    LOG_I(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
     ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
   }
   else { // multiple eNB case for later
@@ -1749,6 +1754,7 @@ static void* ru_thread_control( void* param ) {
               else {
                  ru->cmd = RU_FRAME_RESYNCH;
                  ru->cmdval = ((uint16_t*)&rru_config_msg.msg[0])[0];
+                 LOG_I(PHY,"Received Frame Resynch messaage with value %d\n",ru->cmdval);
               }
               break;
 
@@ -1884,12 +1890,13 @@ static void* ru_thread( void* param ) {
       if (ru->wait_cnt > 0) {
          ru->wait_cnt--;
 
-         if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=20 && subframe == 5 && frame != RC.ru[0]->proc.frame_rx) {
+         if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=10 && subframe == 5 && frame != RC.ru[0]->proc.frame_rx) {
            // Send RRU_frame adjust
            RRU_CONFIG_msg_t rru_config_msg;
            rru_config_msg.type = RRU_frame_resynch;
            rru_config_msg.len  = sizeof(RRU_CONFIG_msg_t); // TODO: set to correct msg len
            ((uint16_t*)&rru_config_msg.msg[0])[0] = RC.ru[0]->proc.frame_rx;
+           ru->cmd=WAIT_RESYNCH;
            LOG_I(PHY,"Sending Frame Resynch %d to RRU\n", ru->idx,RC.ru[0]->proc.frame_rx);
            AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),"Failed to send msg to RAU %d\n",ru->idx);