diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 0a20060af855783f86c013e0817a9974253d3783..3ec21faed5f424dcb1dccced2bddcf9e20505d09 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -183,8 +183,8 @@ set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${CMAKE_CU
 #########################
 # set a flag for changes in the source code
 # these changes are related to hardcoded path to include .h files
-set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3")
-set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3 -O2")
 
 
 set(GIT_BRANCH        "UNKNOWN")
diff --git a/openair1/PHY/CODING/lte_segmentation.c b/openair1/PHY/CODING/lte_segmentation.c
index 5116c765b86a7e7afdb2c19195fc260a0537e5ac..7b8308656ad88020536e9d7dbd7d66053dd41003 100644
--- a/openair1/PHY/CODING/lte_segmentation.c
+++ b/openair1/PHY/CODING/lte_segmentation.c
@@ -59,7 +59,7 @@ int lte_segmentation(unsigned char *input_buffer,
   }
 
   if ((*C)>MAX_NUM_DLSCH_SEGMENTS) {
-    printf("%d\n",*(int*)0);
+    printf("%d\n",*(int *)0);
     LOG_E(PHY,"lte_segmentation.c: too many segments %d, B %d, L %d, Bprime %d\n",*C,B,L,Bprime);
     return(-1);
   }
@@ -105,7 +105,7 @@ int lte_segmentation(unsigned char *input_buffer,
 #endif
     *Kminus = (*Kplus - 64);
   } else {
-    printf("lte_segmentation.c: Illegal codeword size !!!\n");
+    LOG_E(PHY,"lte_segmentation.c: Illegal codeword size !!!\n");
     return(-1);
   }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
index c301c8510f03f4ab7d22b50496cdf507435336de..f8ade9afc86f8bb6a0f233d6bc078ccc95896a48 100644
--- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
@@ -31,7 +31,7 @@
 */
 #include "PHY/defs_eNB.h"
 #ifdef DEBUG_UCI_TOOLS
-#include "PHY/vars.h"
+  #include "PHY/vars.h"
 #endif
 
 //#define DEBUG_UCI 1
@@ -41,15 +41,21 @@ int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_
   uint16_t i;
   int16_t first_free_index=-1;
   AssertFatal(eNB!=NULL,"eNB is null\n");
+
   for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
     if ((eNB->uci_vars[i].active >0) &&
-	(eNB->uci_vars[i].rnti==rnti) &&
-	(eNB->uci_vars[i].frame==frame) &&
-	(eNB->uci_vars[i].subframe==subframe)) return(i); 
+        (eNB->uci_vars[i].rnti==rnti) &&
+        (eNB->uci_vars[i].frame==frame) &&
+        (eNB->uci_vars[i].subframe==subframe)) return(i);
     else if ((eNB->uci_vars[i].active == 0) && (first_free_index==-1)) first_free_index=i;
   }
+
   if (type == SEARCH_EXIST) return(-1);
-  else return(first_free_index);
+
+  if (first_free_index==-1)
+    LOG_E(MAC,"UCI table is full\n");
+
+  return(first_free_index);
 }
 
 
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index 5d23c3c23ddd44b2eb2ddbdb784b0859e892b806..14117307b870d92c4227be0209c6faed4b8e05bc 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -563,8 +563,8 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
   else
     tc = *decoder8;
 
-  if(ulsch_harq->repetition_number == 1){
-	  memset(pusch_rep_buffer,0,(sizeof(int32_t)*3*(6144+64))) ;  // reset the buffer every new repetitions
+  if(ulsch_harq->repetition_number == 1) {
+    memset(pusch_rep_buffer,0,(sizeof(int32_t)*3*(6144+64))) ;  // reset the buffer every new repetitions
   }
 
   for (r=0; r<ulsch_harq->C; r++) {
@@ -581,11 +581,10 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
                                           (uint8_t *)&dummy_w[r][0],
                                           (r==0) ? ulsch_harq->F : 0);
 #ifdef DEBUG_ULSCH_DECODING
-    printf("Rate Matching Segment %u (coded bits (G) %d,unpunctured/repeated bits %u, Q_m %d, nb_rb %d, Nl %d)...\n",
+    printf("Rate Matching Segment %u (coded bits (G) %d,unpunctured/repeated bits %u, Q_m %d, Nl %d)...\n",
            r, G,
            Kr*3,
-           Q_m,
-           nb_rb,
+           ulsch_harq->Qm,
            ulsch_harq->Nl);
 #endif
     start_meas(&eNB->ulsch_rate_unmatching_stats);
@@ -610,26 +609,22 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
     }
 
     stop_meas(&eNB->ulsch_rate_unmatching_stats);
-
     max_Ncb = 3*ulsch_harq->RTC[r]*32 ;
 
-    if(ulsch_harq->total_number_of_repetitions > 1)
-    {
-    	if (ulsch_harq->rvidx==1)
-    	{ 					// Store the result of HARQ combining in the last emtc repetitions of sequence 0,2,3,1
-    		for (int nn=0;nn<max_Ncb;nn++)
-    		{
-    			pusch_rep_buffer[nn] += ulsch_harq->w[r][nn] ;
-    		}
+    if(ulsch_harq->total_number_of_repetitions > 1) {
+      if (ulsch_harq->rvidx==1) {
+        // Store the result of HARQ combining in the last emtc repetitions of sequence 0,2,3,1
+        for (int nn=0; nn<max_Ncb; nn++) {
+          pusch_rep_buffer[nn] += ulsch_harq->w[r][nn] ;
+        }
+      }
+
+      if (ulsch_harq->repetition_number == ulsch_harq->total_number_of_repetitions) {
+        for (int nn=0; nn<max_Ncb; nn++) {
+          ulsch_harq->w[r][nn] =  pusch_rep_buffer[nn] ;
         }
-    	if (ulsch_harq->repetition_number == ulsch_harq->total_number_of_repetitions)
-    	{
-    		for (int nn=0;nn<max_Ncb;nn++)
-    		{
-    			ulsch_harq->w[r][nn] =  pusch_rep_buffer[nn] ;
-      		}
-      	}
       }
+    }
 
     r_offset += E;
     start_meas(&eNB->ulsch_deinterleaving_stats);
@@ -764,18 +759,17 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
   int frame = proc->frame_rx;
   int subframe = proc->subframe_rx;
   LTE_UL_eNB_HARQ_t *ulsch_harq;
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   LOG_D(PHY,"ue_type %d\n",ulsch->ue_type);
+
   if (ulsch->ue_type>0)     harq_pid = 0;
   else
 #endif
-    {
-      harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
-    }
+  {
+    harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
+  }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,1);
-
   // x1 is set in lte_gold_generic
   x2 = ((uint32_t)ulsch->rnti<<14) + ((uint32_t)subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
   ulsch_harq = ulsch->harq_processes[harq_pid];
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
index 968597bfb8fdc5ada6342b9f497ab3b12be3ba31..3478d522ab42fed26647e8046245e3afd9d4365a 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
@@ -50,7 +50,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
   uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
   LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   char phich_resource[6];
-
   LOG_D(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
         ue->rx_offset);
 
@@ -95,7 +94,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
                         0);
   }
 
-
   LOG_D(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
         ue->Mod_id,
         ue->measurements.rx_rssi_dBm[0] - ((ue->frame_parms.nb_antennas_rx==2) ? 3 : 0),
@@ -106,7 +104,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
         ue->measurements.rx_power_avg_dB[0],
         ue->measurements.rx_power_avg[0],
         ue->rx_total_gain_dB);
-
   LOG_D(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n",
         ue->Mod_id,
         ue->measurements.n0_power_tot_dBm,
@@ -116,57 +113,60 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
         ue->measurements.n0_power[1],
         ue->measurements.n0_power_avg_dB,
         ue->measurements.n0_power_avg);
-
   pbch_decoded = 0;
 
   for (frame_mod4=0; frame_mod4<4; frame_mod4++) {
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    if (ue->FeMBMS_active != 2){	
+
+    if (ue->FeMBMS_active != 2) {
 #endif
-    	pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          SISO,
-                          ue->high_speed_flag,
-                          frame_mod4);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[0],
+                            frame_parms,
+                            0,
+                            SISO,
+                            ue->high_speed_flag,
+                            frame_mod4);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	}else{
-    	pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          SISO,
-                          ue->high_speed_flag,
-                          frame_mod4);
-	}
+    } else {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[0],
+                                   frame_parms,
+                                   0,
+                                   SISO,
+                                   ue->high_speed_flag,
+                                   frame_mod4);
+    }
+
 #endif
 
-    	if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
-      		pbch_decoded = 1;
-      	break;
+    if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
+      pbch_decoded = 1;
+      break;
     }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    if (ue->FeMBMS_active != 2){
+
+    if (ue->FeMBMS_active != 2) {
 #endif
-    	pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          ALAMOUTI,
-                          ue->high_speed_flag,
-                          frame_mod4);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[0],
+                            frame_parms,
+                            0,
+                            ALAMOUTI,
+                            ue->high_speed_flag,
+                            frame_mod4);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    }else{
-	    pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          ALAMOUTI,
-                          ue->high_speed_flag,
-                          frame_mod4);
+    } else {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[0],
+                                   frame_parms,
+                                   0,
+                                   ALAMOUTI,
+                                   ue->high_speed_flag,
+                                   frame_mod4);
     }
+
 #endif
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
@@ -218,73 +218,72 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
     }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  if(ue->FeMBMS_active != 2) {
-#endif
-    // now check for PHICH parameters
-    frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
-    dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
-
-    switch (dummy) {
-      case 0:
-        frame_parms->phich_config_common.phich_resource = oneSixth;
-        sprintf(phich_resource,"1/6");
-        break;
-
-      case 1:
-        frame_parms->phich_config_common.phich_resource = half;
-        sprintf(phich_resource,"1/2");
-        break;
-
-      case 2:
-        frame_parms->phich_config_common.phich_resource = one;
-        sprintf(phich_resource,"1");
-        break;
-
-      case 3:
-        frame_parms->phich_config_common.phich_resource = two;
-        sprintf(phich_resource,"2");
-        break;
-
-      default:
-        LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
-        return -1;
-        break;
-    }
-
-    for(int i=0; i<RX_NB_TH; i++) {
-      ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
-      ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
-      ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
-    }
 
+    if(ue->FeMBMS_active != 2) {
+#endif
+      // now check for PHICH parameters
+      frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
+      dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
+
+      switch (dummy) {
+        case 0:
+          frame_parms->phich_config_common.phich_resource = oneSixth;
+          sprintf(phich_resource,"1/6");
+          break;
+
+        case 1:
+          frame_parms->phich_config_common.phich_resource = half;
+          sprintf(phich_resource,"1/2");
+          break;
+
+        case 2:
+          frame_parms->phich_config_common.phich_resource = one;
+          sprintf(phich_resource,"1");
+          break;
+
+        case 3:
+          frame_parms->phich_config_common.phich_resource = two;
+          sprintf(phich_resource,"2");
+          break;
+
+        default:
+          LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
+          return -1;
+          break;
+      }
 
-    LOG_D(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
-          ue->Mod_id,
-          frame_parms->nb_antenna_ports_eNB,
-          pbch_tx_ant,
-          ue->proc.proc_rxtx[0].frame_rx,
-          frame_parms->N_RB_DL,
-          frame_parms->phich_config_common.phich_duration,
-          phich_resource);  //frame_parms->phich_config_common.phich_resource);
+      for(int i=0; i<RX_NB_TH; i++) {
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
+        ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
+      }
 
+      LOG_D(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
+            ue->Mod_id,
+            frame_parms->nb_antenna_ports_eNB,
+            pbch_tx_ant,
+            ue->proc.proc_rxtx[0].frame_rx,
+            frame_parms->N_RB_DL,
+            frame_parms->phich_config_common.phich_duration,
+            phich_resource);  //frame_parms->phich_config_common.phich_resource);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
- }else{
-	for(int i=0; i<RX_NB_TH;i++)
-        { 
-          ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&31)<<1) + (ue->pbch_vars[0]->decoded_output[1]>>7))<<4;
-          ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
-	}
-	LOG_D(PHY,"[UE%d] Initial sync: FeMBMS pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, AdditionalNonMBSFN_SF %d, frame_mod4 %d\n",
+    } else {
+      for(int i=0; i<RX_NB_TH; i++) {
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&31)<<1) + (ue->pbch_vars[0]->decoded_output[1]>>7))<<4;
+        ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
+      }
+
+      LOG_D(PHY,"[UE%d] Initial sync: FeMBMS pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, AdditionalNonMBSFN_SF %d, frame_mod4 %d\n",
             ue->Mod_id,
             frame_parms->nb_antenna_ports_eNB,
             pbch_tx_ant,
             ue->proc.proc_rxtx[0].frame_rx,
             frame_parms->N_RB_DL,
-                0,
-                frame_mod4
-        );
-	
- }
+            0,
+            frame_mod4
+           );
+    }
+
 #endif
     return(0);
   } else {
@@ -310,7 +309,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
   frame_parms->frame_type=FDD;
   frame_parms->nb_antenna_ports_eNB = 2;
   init_frame_parms(frame_parms,1);
-
   /*
   LOG_M("rxdata0.m","rxd0",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
   exit(-1);
@@ -325,9 +323,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
   else
     sync_pos2 = sync_pos + FRAME_LENGTH_COMPLEX_SAMPLES - frame_parms->nb_prefix_samples;
 
-
   LOG_D(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
-
   // SSS detection
   // PSS is hypothesized in last symbol of first slot in Frame
   sync_pos_slot = (frame_parms->samples_per_tti>>1) - frame_parms->ofdm_symbol_size - frame_parms->nb_prefix_samples;
@@ -350,22 +346,23 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
     lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
     ret = pbch_detection(ue,mode);
     //   LOG_M("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
     LOG_D(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
           frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if (ret==-1){
-	 ue->FeMBMS_active = 2;
-	 ret = pbch_detection(ue,mode);
-	 if (ret==-1){
-		ue->FeMBMS_active = 0;
-		frame_parms->FeMBMS_active = 0;
-	 }
-	 else frame_parms->FeMBMS_active = 1;
+
+    if (ret==-1) {
+      ue->FeMBMS_active = 2;
+      ret = pbch_detection(ue,mode);
+
+      if (ret==-1) {
+        ue->FeMBMS_active = 0;
+        frame_parms->FeMBMS_active = 0;
+      } else frame_parms->FeMBMS_active = 1;
+
       LOG_D(PHY,"FeMBMS Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-          frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
-      }
+            frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
+    }
+
 #endif
   } else {
     LOG_D(PHY,"FDD Normal prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
@@ -406,23 +403,22 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       //     LOG_M("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
       LOG_D(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
             frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
-	
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if (ret==-1){
-	 ue->FeMBMS_active = 2;
-	 ret = pbch_detection(ue,mode);
-	 if (ret==-1){
-		ue->FeMBMS_active = 0;
-		frame_parms->FeMBMS_active = 0;
-	 }
-	 else frame_parms->FeMBMS_active = 1;
-      LOG_I(PHY,"FeMBMS CAS Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-            frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
 
-      }
-#endif
+      if (ret==-1) {
+        ue->FeMBMS_active = 2;
+        ret = pbch_detection(ue,mode);
 
+        if (ret==-1) {
+          ue->FeMBMS_active = 0;
+          frame_parms->FeMBMS_active = 0;
+        } else frame_parms->FeMBMS_active = 1;
+
+        LOG_I(PHY,"FeMBMS CAS Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
+              frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
+      }
 
+#endif
     } else {
       LOG_D(PHY,"FDD Extended prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
     }
@@ -460,9 +456,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
       ret = pbch_detection(ue,mode);
       //      LOG_M("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
       LOG_D(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-
             frame_parms->Nid_cell,metric_tdd_ncp,phase_tdd_ncp,flip_tdd_ncp,ret);
 
       if (ret==-1) {
@@ -496,9 +490,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
         lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
         ret = pbch_detection(ue,mode);
         //  LOG_M("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
         LOG_D(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-
               frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
       }
     }
@@ -525,7 +517,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       generate_pcfich_reg_mapping(frame_parms);
       generate_phich_reg_mapping(frame_parms);
       ue->pbch_vars[0]->pdu_errors_conseq=0;
-
     }
 
     LOG_I(PHY, "[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm,  rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
@@ -562,7 +553,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
           metric_tdd_ecp,Nid_cell_tdd_ecp);*/
     LOG_D(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",ue->Mod_id,
           frame_parms->Nid_cell,frame_parms->frame_type);
-
     ue->UE_mode[0] = NOT_SYNCHED;
     ue->pbch_vars[0]->pdu_errors_last=ue->pbch_vars[0]->pdu_errors;
     ue->pbch_vars[0]->pdu_errors++;
@@ -587,15 +577,13 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
     // we might add a low-pass filter here later
     ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
     ue->measurements.rx_power_avg_dB[0] = dB_fixed(ue->measurements.rx_power_avg[0]);
-
     LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
   } else {
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
-
   }
 
   return ret;
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
index 8139c496aef3cfeb33ae137beb514d0b9a8f8d82..49fa484c2650cf7d3c5bf095511f32d126528100 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
@@ -80,7 +80,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   int i, prach_len;
   uint16_t first_nonzero_root_idx=0;
 
-  if ( !(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if ( !(IS_SOFTMODEM_BASICSIM ) ) {
     prach_start =  (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
 #ifdef PRACH_DEBUG
     LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
@@ -473,7 +473,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   AssertFatal(prach_fmt<4,
               "prach_fmt4 not fully implemented" );
 
-  if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if (!(IS_SOFTMODEM_BASICSIM ) ) {
     int j;
     int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
     LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c
index 5da97b3a1aff2c19b1b305bf79bf4a8b56ac8b35..84db43933a7ffc49bea400e5374c79c80e5f29bd 100644
--- a/openair1/SCHED_UE/phy_procedures_lte_ue.c
+++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c
@@ -19,17 +19,17 @@
  *      contact@openairinterface.org
  */
 
- /*! \file phy_procedures_lte_ue.c
-  * \brief Implementation of UE procedures from 36.213 LTE specifications / This includes FeMBMS UE procedures from 36.213 v14.2.0 specification
-  * \author R. Knopp, F. Kaltenberger, N. Nikaein, J. Morgade
-  * \date 2011
-  * \version 0.1
-  * \company Eurecom
-  * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr, javier.morgad
+/*! \file phy_procedures_lte_ue.c
+ * \brief Implementation of UE procedures from 36.213 LTE specifications / This includes FeMBMS UE procedures from 36.213 v14.2.0 specification
+ * \author R. Knopp, F. Kaltenberger, N. Nikaein, J. Morgade
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr, javier.morgad
 e@ieee.org
-  * \note
-  * \warning
-  */
+ * \note
+ * \warning
+ */
 
 #define _GNU_SOURCE
 
@@ -166,13 +166,16 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
   int gain_dB;
   double gain_lin;
 
-  if (power_dBm<=power_max_dBm)
+  if ( (power_dBm<=power_max_dBm) && ! IS_SOFTMODEM_RFSIM)
     gain_dB = power_dBm - power_max_dBm;
   else
     gain_dB = 0;
 
   gain_lin = pow(10,.1*gain_dB);
   AssertFatal((nb_rb >0) && (nb_rb <= N_RB_UL),"Illegal nb_rb/N_RB_UL combination (%d/%d)\n",nb_rb,N_RB_UL);
+  LOG_D(PHY," tx gain: %d = %d * sqrt ( pow(10, 0.1*max(0,%d-%d)) * %d/%d ) (gain lin=%f (dB=%d))\n",
+        (int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)),
+        AMP, power_dBm, power_max_dBm,  N_RB_UL, nb_rb, gain_lin, gain_dB);
   return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)));
 }
 
@@ -1099,7 +1102,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
 
   nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
 
-  if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if (!IS_SOFTMODEM_BASICSIM) {
     ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
                    ue->hw_timing_advance-
                    ue->timing_advance-
@@ -1130,7 +1133,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
   }
 
   for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
-    int *Buff = (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
+    int *Buff = IS_SOFTMODEM_BASICSIM ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
 
     if (frame_parms->Ncp == 1) {
       PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
@@ -1151,7 +1154,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
                         &ue->frame_parms);
     }
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM ) {
       apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
       apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
     } else {
@@ -1159,7 +1162,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
       apply_7_5_kHz(ue,dummy_tx_buffer,1);
     }
 
-    if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+    if (!(IS_SOFTMODEM_BASICSIM ) ) {
       overflow = ulsch_start - 9*frame_parms->samples_per_tti;
 
       for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
@@ -1259,7 +1262,7 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
           ue->prach_resources[eNB_id]->ra_RNTI);
     ue->tx_total_RE[subframe_tx] = 96;
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM ) {
       ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
                                     ue->tx_power_max_dBm,
                                     ue->frame_parms.N_RB_UL,
@@ -1630,7 +1633,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
 
       ue->tx_total_RE[subframe_tx] = nb_rb*12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
@@ -1661,8 +1664,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
       for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++)
         generate_drs_pusch(ue,
                            proc,
-			   (LTE_DL_FRAME_PARMS *)NULL,
-			   (int32_t**)NULL,
+                           (LTE_DL_FRAME_PARMS *)NULL,
+                           (int32_t **)NULL,
                            eNB_id,
                            tx_amp,
                            subframe_tx,
@@ -1704,7 +1707,7 @@ void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8
       Po_SRS = ue->tx_power_max_dBm;
     }
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM) {
       tx_amp = AMP;
     } else {
       if (ue->mac_enabled==1) {
@@ -1942,7 +1945,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
       ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
       ue->tx_total_RE[subframe_tx] = 12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp = get_tx_amp(Po_PUCCH,
@@ -2023,7 +2026,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
       ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
       ue->tx_total_RE[subframe_tx] = 12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp =  get_tx_amp(Po_PUCCH,
@@ -2269,7 +2272,7 @@ void ue_measurement_procedures(
     // AGC
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_IN);
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
@@ -2309,24 +2312,23 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
     //for (pbch_phase=0;pbch_phase<4;pbch_phase++) {
     //LOG_I(PHY,"[UE  %d] Frame %d, Trying PBCH %d (NidCell %d, eNB_id %d)\n",ue->Mod_id,frame_rx,pbch_phase,ue->frame_parms.Nid_cell,eNB_id);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-    	 	pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[eNB_id],
-                          &ue->frame_parms,
-                          eNB_id,
-                          ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
-                          ue->high_speed_flag,
-                          pbch_phase);
-
-	}else
+    if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[eNB_id],
+                                   &ue->frame_parms,
+                                   eNB_id,
+                                   ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
+                                   ue->high_speed_flag,
+                                   pbch_phase);
+    } else
 #endif
-    		pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[eNB_id],
-                          &ue->frame_parms,
-                          eNB_id,
-                          ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
-                          ue->high_speed_flag,
-                          pbch_phase);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[eNB_id],
+                            &ue->frame_parms,
+                            eNB_id,
+                            ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
+                            ue->high_speed_flag,
+                            pbch_phase);
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=4)) {
       break;
@@ -2346,8 +2348,6 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
       dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0];
       trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0,
                  frame_rx, subframe_rx, 0, 0);
-      LOG_D(OPT,"[UE %d][PBCH] Frame %d trace pdu for PBCH\n",
-            ue->Mod_id, subframe_rx);
     }
 
     if (pbch_tx_ant>2) {
@@ -2356,21 +2356,21 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
       return;
     }
 
-
     ue->pbch_vars[eNB_id]->pdu_errors_conseq = 0;
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-        if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-		frame_tx  = (int)((ue->pbch_vars[eNB_id]->decoded_output[2]&31)<<1);
-		frame_tx += ue->pbch_vars[eNB_id]->decoded_output[1]>>7;
-		frame_tx +=4*pbch_phase;	
-	}else{
+
+    if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+      frame_tx  = (int)((ue->pbch_vars[eNB_id]->decoded_output[2]&31)<<1);
+      frame_tx += ue->pbch_vars[eNB_id]->decoded_output[1]>>7;
+      frame_tx +=4*pbch_phase;
+    } else {
 #endif
-    		frame_tx = (((int)(ue->pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
-    		frame_tx += ((int)(ue->pbch_vars[eNB_id]->decoded_output[1]&0xfc));
-    		frame_tx += pbch_phase;
+      frame_tx = (((int)(ue->pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
+      frame_tx += ((int)(ue->pbch_vars[eNB_id]->decoded_output[1]&0xfc));
+      frame_tx += pbch_phase;
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	}
+    }
+
 #endif
 
     if (ue->mac_enabled==1) {
@@ -2794,9 +2794,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 
 void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abstraction_flag
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-, uint8_t fembms_flag
+  , uint8_t fembms_flag
 #endif
-) {
+                       ) {
   int subframe_rx = proc->subframe_rx;
   int frame_rx = proc->frame_rx;
   int pmch_mcs=-1;
@@ -2827,72 +2827,75 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
     if (pmch_mcs>=0) {
       LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,frame_rx,subframe_rx,pmch_mcs);
       fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0);
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/){
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_IN);
-	slot_fep_mbsfn_khz_1dot25(ue,subframe_rx,0);	
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_OUT);
-      }
-      else{
+
+      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/) {
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_IN);
+        slot_fep_mbsfn_khz_1dot25(ue,subframe_rx,0);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_OUT);
+      } else {
 #endif
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_IN);
-      for (l=2; l<12; l++) {
-        slot_fep_mbsfn(ue,
-                       l,
-                       subframe_rx,
-                       0,0);//ue->rx_offset,0);
-      }
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_OUT);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_IN);
+
+        for (l=2; l<12; l++) {
+          slot_fep_mbsfn(ue,
+                         l,
+                         subframe_rx,
+                         0,0);//ue->rx_offset,0);
+        }
+
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_OUT);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
       }
-#endif
 
+#endif
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/){
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_IN);
-	rx_pmch_khz_1dot25(ue,0,subframe_rx,pmch_mcs);
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_OUT);
 
-      }
-      else{
+      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/) {
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_IN);
+        rx_pmch_khz_1dot25(ue,0,subframe_rx,pmch_mcs);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_OUT);
+      } else {
 #endif
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_IN);
-      for (l=2; l<12; l++) {
-        rx_pmch(ue,
-                0,
-                subframe_rx,
-                l);
-      }
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_OUT);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_IN);
+
+        for (l=2; l<12; l++) {
+          rx_pmch(ue,
+                  0,
+                  subframe_rx,
+                  l);
+        }
+
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_OUT);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
       }
-#endif
 
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_IN);
+#endif
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_IN);
       ue->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(pmch_mcs);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+
       if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/)
-      	ue->dlsch_MCH[0]->harq_processes[0]->G = get_G_khz_1dot25(&ue->frame_parms,
-	   	ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
-          	ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
-          	ue->dlsch_MCH[0]->harq_processes[0]->Qm,
-          	1,
-          	2,
-          	frame_rx,
-          	subframe_rx,
-          	0);
+        ue->dlsch_MCH[0]->harq_processes[0]->G = get_G_khz_1dot25(&ue->frame_parms,
+            ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+            ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+            ue->dlsch_MCH[0]->harq_processes[0]->Qm,
+            1,
+            2,
+            frame_rx,
+            subframe_rx,
+            0);
       else
 #endif
-      	ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
-          	ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
-          	ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
-          	ue->dlsch_MCH[0]->harq_processes[0]->Qm,
-          	1,
-          	2,
-          	frame_rx,
-          	subframe_rx,
-          	0);
+        ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
+            ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+            ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+            ue->dlsch_MCH[0]->harq_processes[0]->Qm,
+            1,
+            2,
+            frame_rx,
+            subframe_rx,
+            0);
 
       dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
                          ue->dlsch_MCH[0]->harq_processes[0]->G,
@@ -2912,7 +2915,7 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
                            subframe_rx,
                            0,
                            0,1);
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_OUT);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_OUT);
 
       if (mcch_active == 1)
         ue->dlsch_mcch_trials[sync_area][0]++;
@@ -2934,7 +2937,7 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
               ue->dlsch_MCH[0]->max_turbo_iterations,
               ue->dlsch_MCH[0]->harq_processes[0]->G);
         // dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
-	//if(subframe_rx == 3){
+        //if(subframe_rx == 3){
         //dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
         //exit_fun("nothing to add");
         //}
@@ -2959,7 +2962,6 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
               ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
               ue->dlsch_MCH[0]->max_turbo_iterations,
               ue->dlsch_MCH[0]->harq_processes[0]->G);
-
         ue_send_mch_sdu(ue->Mod_id,
                         CC_id,
                         frame_rx,
@@ -3447,24 +3449,24 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 
           case SI_PDSCH:
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-            if(subframe_rx == 0) { 
-               ue_decode_si_mbms(ue->Mod_id,
-                         CC_id,
-                         frame_rx,
-                         eNB_id,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            if(subframe_rx == 0) {
+              ue_decode_si_mbms(ue->Mod_id,
+                                CC_id,
+                                frame_rx,
+                                eNB_id,
+                                ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+                                ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            } else {
+              ue_decode_si(ue->Mod_id,
+                           CC_id,
+                           frame_rx,
+                           eNB_id,
+                           ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+                           ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            }
 
-	    } else {
-            	ue_decode_si(ue->Mod_id,
-                         CC_id,
-                         frame_rx,
-                         eNB_id,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
-	    }
 #else
-       	ue_decode_si(ue->Mod_id,
+            ue_decode_si(ue->Mod_id,
                          CC_id,
                          frame_rx,
                          eNB_id,
@@ -4360,415 +4362,413 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
     start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
   }
 
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  if(is_fembms_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-	ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag,1);
-	return 0;
-  }else{ // this gets closed at end
+
+  if(is_fembms_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+    ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag,1);
+    return 0;
+  } else { // this gets closed at end
 #endif
+    pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
 
+    if (do_pdcch_flag) {
+      // deactivate reception until we scan pdcch
+      if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0])
+        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active = 0;
 
-  pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
+      if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1])
+        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1]->active = 0;
 
-  if (do_pdcch_flag) {
-    // deactivate reception until we scan pdcch
-    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0])
-      ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active = 0;
+      if (ue->dlsch_SI[eNB_id])
+        ue->dlsch_SI[eNB_id]->active = 0;
 
-    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1])
-      ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1]->active = 0;
+      if (ue->dlsch_p[eNB_id])
+        ue->dlsch_p[eNB_id]->active = 0;
 
-    if (ue->dlsch_SI[eNB_id])
-      ue->dlsch_SI[eNB_id]->active = 0;
+      if (ue->dlsch_ra[eNB_id])
+        ue->dlsch_ra[eNB_id]->active = 0;
+    }
 
-    if (ue->dlsch_p[eNB_id])
-      ue->dlsch_p[eNB_id]->active = 0;
+    if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+      LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
+            ue->Mod_id,frame_rx, subframe_rx);
+    }
 
-    if (ue->dlsch_ra[eNB_id])
-      ue->dlsch_ra[eNB_id]->active = 0;
-  }
+    if (ue->frame_parms.Ncp == 0) {  // normal prefix
+      pilot1 = 4;
+    } else { // extended prefix
+      pilot1 = 3;
+    }
 
-  if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
-    LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
-          ue->Mod_id,frame_rx, subframe_rx);
-  }
+    if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
+      l2 = 4;
+    } else if (pmch_flag == 1) { // do first 2 symbols only
+      l2 = 1;
+    } else { // normal subframe, last symbol to be processed is the first of the second slot
+      l2 = (ue->frame_parms.symbols_per_tti/2)-1;
+    }
 
-  if (ue->frame_parms.Ncp == 0) {  // normal prefix
-    pilot1 = 4;
-  } else { // extended prefix
-    pilot1 = 3;
-  }
+    int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1);
 
-  if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
-    l2 = 4;
-  } else if (pmch_flag == 1) { // do first 2 symbols only
-    l2 = 1;
-  } else { // normal subframe, last symbol to be processed is the first of the second slot
-    l2 = (ue->frame_parms.symbols_per_tti/2)-1;
-  }
+    if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) {
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      // RX processing of symbols l=0...l2
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      l=0;
+    } else {
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch)
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      l=1;
+    }
 
-  int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1);
+    LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) {
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    // RX processing of symbols l=0...l2
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    l=0;
-  } else {
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch)
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    l=1;
-  }
+    for (; l<=l2; l++) {
+      if (abstraction_flag == 0) {
+        if (LOG_DEBUGFLAG(UE_TIMING)) {
+          start_meas(&ue->ofdm_demod_stats);
+        }
 
-  LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+        slot_fep(ue,
+                 l,
+                 (subframe_rx<<1),
+                 0,
+                 0,
+                 0);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
 
-  for (; l<=l2; l++) {
-    if (abstraction_flag == 0) {
-      if (LOG_DEBUGFLAG(UE_TIMING)) {
-        start_meas(&ue->ofdm_demod_stats);
+        if (LOG_DEBUGFLAG(UE_TIMING)) {
+          stop_meas(&ue->ofdm_demod_stats);
+        }
       }
 
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
-      slot_fep(ue,
-               l,
-               (subframe_rx<<1),
-               0,
-               0,
-               0);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
+      ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
 
-      if (LOG_DEBUGFLAG(UE_TIMING)) {
-        stop_meas(&ue->ofdm_demod_stats);
-      }
-    }
+      if (do_pdcch_flag) {
+        if ((l==pilot1) ||
+            ((pmch_flag==1)&&(l==l2)))  {
+          LOG_D(PHY,"[UE  %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
 
-    ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
+          //start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
+          if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
+            LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
+            return(-1);
+          }
 
-    if (do_pdcch_flag) {
-      if ((l==pilot1) ||
-          ((pmch_flag==1)&&(l==l2)))  {
-        LOG_D(PHY,"[UE  %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
-
-        //start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
-        if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
-          LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
-          return(-1);
+          //stop_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
+          //printf("subframe %d n_pdcch_sym %d pdcch procedures  %5.3f \n",
+          //        subframe_rx, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+          //     (ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
+          LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
         }
-
-        //stop_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
-        //printf("subframe %d n_pdcch_sym %d pdcch procedures  %5.3f \n",
-        //        subframe_rx, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-        //     (ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
-        LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
       }
-    }
-  } // for l=1..l2
+    } // for l=1..l2
 
-  ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
-  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
+    LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return
-  if (pmch_flag == 1) {
-    ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag
+    // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return
+    if (pmch_flag == 1) {
+      ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-,0
+                         ,0
 #endif
-);
-    int next_subframe_rx = (1+subframe_rx)%10;
+                        );
+      int next_subframe_rx = (1+subframe_rx)%10;
 
-    if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
-      slot_fep(ue,
-               0,
-               (next_subframe_rx<<1),
-               0,
-               0,
-               0);
+      if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
+        slot_fep(ue,
+                 0,
+                 (next_subframe_rx<<1),
+                 0,
+                 0,
+                 0);
+      }
+
+      return 0;
     }
 
-    return 0;
-  }
+    slot_fep(ue,
+             0,
+             1+(subframe_rx<<1),
+             0,
+             0,
+             0);
 
-  slot_fep(ue,
-           0,
-           1+(subframe_rx<<1),
-           0,
-           0,
-           0);
+    // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
+      LOG_I(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+    }
 
-  // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
-    LOG_I(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-  }
+    LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      start_meas(&ue->generic_stat);
+      start_meas(&ue->crnti_procedures_stats);
+    }
 
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    start_meas(&ue->generic_stat);
-    start_meas(&ue->crnti_procedures_stats);
-  }
+    // do procedures for C-RNTI
+    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for C-RNTI
-  if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
-  }
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->crnti_procedures_stats);
+    }
 
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->crnti_procedures_stats);
-  }
+    LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
-  }
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
-  }
+    // do procedures for RA-RNTI
+    if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for RA-RNTI
-  if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
-  }
+    LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) {  // do front-end processing for second slot, and first symbol of next subframe
+      for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
+        if (abstraction_flag == 0) {
+          if (LOG_DEBUGFLAG(UE_TIMING)) {
+            start_meas(&ue->ofdm_demod_stats);
+          }
 
-  if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) {  // do front-end processing for second slot, and first symbol of next subframe
-    for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
-      if (abstraction_flag == 0) {
-        if (LOG_DEBUGFLAG(UE_TIMING)) {
-          start_meas(&ue->ofdm_demod_stats);
+          VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+          slot_fep(ue,
+                   l,
+                   1+(subframe_rx<<1),
+                   0,
+                   0,
+                   0);
+          VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
+
+          if (LOG_DEBUGFLAG(UE_TIMING)) {
+            stop_meas(&ue->ofdm_demod_stats);
+          }
         }
 
-        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+        ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
+      } // for l=1..l2
+
+      ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
+      // do first symbol of next downlink subframe for channel estimation
+      int next_subframe_rx = (1+subframe_rx)%10;
+
+      if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
         slot_fep(ue,
-                 l,
-                 1+(subframe_rx<<1),
+                 0,
+                 (next_subframe_rx<<1),
                  0,
                  0,
                  0);
-        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-
-        if (LOG_DEBUGFLAG(UE_TIMING)) {
-          stop_meas(&ue->ofdm_demod_stats);
-        }
       }
+    } // not an S-subframe
 
-      ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
-    } // for l=1..l2
+    if(LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->generic_stat);
+      LOG_I(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+    }
 
-    ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
-    // do first symbol of next downlink subframe for channel estimation
-    int next_subframe_rx = (1+subframe_rx)%10;
+    LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-    if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
-      slot_fep(ue,
-               0,
-               (next_subframe_rx<<1),
-               0,
-               0,
-               0);
+    if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) {
+      ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
     }
-  } // not an S-subframe
 
-  if(LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->generic_stat);
-    LOG_I(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
-  }
+    // do procedures for C-RNTI
+    LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
 
-  if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) {
-    ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
-  }
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      }
 
-  // do procedures for C-RNTI
-  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+        start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      }
 
-    if (LOG_DEBUGFLAG(UE_TIMING)) {
-      start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-    }
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1],
+                          &ue->dlsch_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
 
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-    LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+        LOG_I(PHY, "[SFN %d] Slot1:       Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+        LOG_I(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+      }
 
-    if (LOG_DEBUGFLAG(UE_TIMING)) {
-      stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-      start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
     }
 
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1],
-                        &ue->dlsch_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-
     if (LOG_DEBUGFLAG(UE_TIMING)) {
-      stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-      LOG_I(PHY, "[SFN %d] Slot1:       Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-      LOG_I(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+      start_meas(&ue->generic_stat);
     }
 
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
-  }
-
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    start_meas(&ue->generic_stat);
-  }
-
-  if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
-    if(subframe_rx==5 &&  ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20) {
-      //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
-      //LOG_M("llr.m","llr",  &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
-      LOG_M("rxdataF0_current.m", "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,
-            1);
-      LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
-      LOG_M("rxdataF_comp00.m","rxdataF_comp00",     &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
-      //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      AssertFatal (0,"");
+    if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
+      if(subframe_rx==5 &&  ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20) {
+        //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
+        //LOG_M("llr.m","llr",  &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
+        LOG_M("rxdataF0_current.m", "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,
+              1);
+        LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+        LOG_M("rxdataF_comp00.m","rxdataF_comp00",     &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+        //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+        //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+        AssertFatal (0,"");
+      }
     }
-  }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        &ue->dlsch_SI_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_SI[eNB_id]->active = 0;
-  }
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          &ue->dlsch_SI_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_SI[eNB_id]->active = 0;
+    }
 
-  // do procedures for P-RNTI
-  if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        &ue->dlsch_p_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_p[eNB_id]->active = 0;
-  }
+    // do procedures for P-RNTI
+    if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          &ue->dlsch_p_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_p[eNB_id]->active = 0;
+    }
 
-  // do procedures for RA-RNTI
-  if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        &ue->dlsch_ra_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_ra[eNB_id]->active = 0;
-  }
+    // do procedures for RA-RNTI
+    if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          &ue->dlsch_ra_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_ra[eNB_id]->active = 0;
+    }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   } // This commes from feMBMS subframe filtering !
-#endif
 
+#endif
   // duplicate harq structure
   uint8_t          current_harq_pid        = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid;
   LTE_DL_UE_HARQ_t *current_harq_processes = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[current_harq_pid];
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 732e7d984fc15ecab5ace980d68a91e59f68cad3..9c20d59d28e54773d5517f862c45cf5ac77d8a2c 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -143,13 +143,14 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t *ra, frame_t frameP,
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = get_TBS_UL (ra->msg3_mcs, ra->msg3_nb_rb);
     // Re13 fields
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = ra->rach_resource_type > 2 ? 2 : 1;
+
     if (ra->rach_resource_type > 0) {
-	pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
-	ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions= pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][ra->pusch_repetition_levels];
-    }
-    else{
-    	ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions=1;
+      pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
+      ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions= pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][ra->pusch_repetition_levels];
+    } else {
+      ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions=1;
     }
+
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = 1;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io = (ra->Msg3_frame * 10) + ra->Msg3_subframe;
     ul_req_body->number_of_pdus++;
@@ -273,10 +274,9 @@ void generate_Msg2(module_id_t module_idP,
   uint16_t        absSF_Msg2 = (10 * ra->Msg2_frame) + ra->Msg2_subframe;
 
   if (ra->rach_resource_type > 0) {
-	PUSCH_Rep_Level= *(rrc->configuration.pusch_repetitionLevelCEmodeA_r13[CC_idP]);
-  }
-  else {
-  	PUSCH_Rep_Level= 0;
+    PUSCH_Rep_Level= *(rrc->configuration.pusch_repetitionLevelCEmodeA_r13[CC_idP]);
+  } else {
+    PUSCH_Rep_Level= 0;
   }
 
   if (absSF > absSF_Msg2) {
@@ -347,9 +347,7 @@ void generate_Msg2(module_id_t module_idP,
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_tansmission_type = 1;   // imposed (9.1.5 in 213) for Type 2 Common search space
       AssertFatal (cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 != NULL, "cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
-
       LOG_E(MAC, "start_symbol = %d \n", dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol);
-
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 2; // RA-RNTI
@@ -421,7 +419,7 @@ void generate_Msg2(module_id_t module_idP,
       }
 
       ra->pusch_repetition_levels = PUSCH_Rep_Level;
-	  
+
       if((ra->Msg2_frame == frameP) && (ra->Msg2_subframe == subframeP)) {
         /* Program PDSCH */
         LOG_D(MAC, "[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming PDSCH\n",
@@ -913,11 +911,10 @@ generate_Msg4(module_id_t module_idP,
       ul_req_body->number_of_pdus++;
       T (T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT (module_idP), T_INT (CC_idP), T_INT (ra->rnti), T_INT (frameP), T_INT (subframeP),
          T_INT (0 /*harq_pid always 0? */ ), T_BUFFER (&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id].payload[0], ra->msg4_TBsize));
-
-      if (opt_enabled == 1) {
-        trace_pdu (1, (uint8_t *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], ra->msg4_rrc_sdu_length, UE_id, 3, UE_RNTI (module_idP, UE_id), mac->frame, mac->subframe, 0, 0);
-        LOG_D (OPT, "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", module_idP, CC_idP, frameP, UE_RNTI (module_idP, UE_id), ra->msg4_rrc_sdu_length);
-      }
+      trace_pdu (DIRECTION_DOWNLINK, (uint8_t *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0],
+                 ra->msg4_rrc_sdu_length,
+                 UE_id, 3, UE_RNTI (module_idP, UE_id),
+                 mac->frame, mac->subframe, 0, 0);
     }                           // Msg4 frame/subframe
   }                             // rach_resource_type > 0
   else
@@ -979,12 +976,10 @@ generate_Msg4(module_id_t module_idP,
                              1, // tpc, none
                              getRIV(N_RB_DL, first_rb, 4),  // resource_block_coding
                              ra->msg4_mcs,  // mcs
-				 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
+                             1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
                              0, // rv
                              0);  // vrb_flag
-    	
-    	UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid] = 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid];
-
+        UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid] = 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid];
         LOG_D(MAC,
               "Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d\n",
               frameP, subframeP, dl_req_body->number_pdu,
@@ -1074,7 +1069,7 @@ generate_Msg4(module_id_t module_idP,
           mac->TX_req[CC_idP].sfn_sf =
             fill_nfapi_tx_req(&mac->TX_req[CC_idP].tx_request_body,
                               (frameP * 10) + subframeP,
-				      rrc_sdu_length+offset,
+                              rrc_sdu_length+offset,
                               mac->pdu_index[CC_idP],
                               mac->UE_list.
                               DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]);
@@ -1094,20 +1089,12 @@ generate_Msg4(module_id_t module_idP,
             T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ),
             T_BUFFER(&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id].
                      payload[0], ra->msg4_TBsize));
-
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK,
-                      (uint8_t *) mac->
-                      UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
-                      rrc_sdu_length, UE_id,  WS_C_RNTI,
-                      UE_RNTI(module_idP, UE_id), mac->frame,
-                      mac->subframe, 0, 0);
-            LOG_D(OPT,
-                  "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
-                  module_idP, CC_idP, frameP, UE_RNTI(module_idP,
-                      UE_id),
-                  rrc_sdu_length);
-          }
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *) mac->
+                    UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
+                    rrc_sdu_length, UE_id,  WS_C_RNTI,
+                    UE_RNTI(module_idP, UE_id), mac->frame,
+                    mac->subframe, 0, 0);
 
           if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR) {
             set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti);
@@ -1219,7 +1206,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
                              1, // tpc, none
                              getRIV(N_RB_DL, first_rb, 4),  // resource_block_coding
                              ra->msg4_mcs,  // mcs
-				     UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
+                             UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
                              round & 3, // rv
                              0);  // vrb_flag
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index d523fb4e17b6f7aa031b6b7849a4a9b51430f756..fcecc4c77d0f01897257aa17a9f3f2237638c74a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -46,7 +46,7 @@
 #include "pdcp.h"
 
 #if defined(ENABLE_ITTI)
-#include "intertask_interface.h"
+  #include "intertask_interface.h"
 #endif
 
 #define ENABLE_MAC_PAYLOAD_DEBUG
@@ -78,228 +78,223 @@ int SIB1_BR_TBS_table[6] = { 208, 256, 328, 504, 712, 936 };
 //------------------------------------------------------------------------------
 void
 schedule_SIB1_MBMS(module_id_t module_idP,
-		 frame_t frameP, sub_frame_t subframeP)
+                   frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
 #ifdef SCHEDULE_SIB1_MBMS
-    int8_t bcch_sdu_length;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    int m, i, N_S_NB;
-    int *Sj;
-    int n_NB = 0;
-    int TBS;
-    int k = 0, rvidx;
-    uint16_t sfn_sf = frameP<<4|subframeP;
+  int8_t bcch_sdu_length;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  int m, i, N_S_NB;
+  int *Sj;
+  int n_NB = 0;
+  int TBS;
+  int k = 0, rvidx;
+  uint16_t sfn_sf = frameP<<4|subframeP;
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    cc = &eNB->common_channels[CC_id];
+    vrb_map = (void *) &cc->vrb_map;
+    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+    int foffset = cc->physCellId & 1;
+    int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
 
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    // Time-domain scheduling
+    if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
+      continue;
+    else
+      switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
+        case 0:   // repetition 4
+          k = (frameP >> 1) & 3;
+
+          if ((subframeP != (4 + sfoffset))
+              || ((frameP & 1) != foffset))
+            continue;
+
+          break;
+
+        case 1:   // repetition 8
+          k = frameP & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((foffset == 0) && (subframeP != (4 + sfoffset)))
+            continue;
+          else if ((foffset == 1)
+                   && (subframeP != ((9 + sfoffset) % 10)))
+            continue;
+
+          break;
+
+        case 2:   // repetition 16
+          k = ((10 * frameP) + subframeP) & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((sfoffset == 1)
+              && ((subframeP != 0) || (subframeP != 5)))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 0)
+                   && (subframeP != 4) && (subframeP != 9))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 1)
+                   && (subframeP != 0) && (subframeP != 9))
+            continue;
+
+          break;
+      }
+
+    // if we get here we have to schedule SIB1_BR in this frame/subframe
+
+    // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
+    if ((frameP & 7) == 0)
+      cc->SIB1_BR_cnt = 0;
+    else
+      cc->SIB1_BR_cnt++;
+
+    // Frequency-domain scheduling
+    switch (N_RB_DL) {
+      case 6:
+      case 15:
+      default:
+        m = 1;
+        n_NB = 0;
+        N_S_NB = 0;
+        Sj = NULL;
+        break;
+
+      case 25:
+        m = 2;
+        N_S_NB = 2;
+        Sj = Sj25;
+        break;
+
+      case 50:
+        m = 2;
+        N_S_NB = 6;
+        Sj = Sj50;
+        break;
+
+      case 75:
+        m = 4;
+        N_S_NB = 10;
+        Sj = Sj75;
+        break;
+
+      case 100:
+        m = 4;
+        N_S_NB = 14;
+        Sj = Sj100;
+        break;
+    }
 
-	cc = &eNB->common_channels[CC_id];
-	vrb_map = (void *) &cc->vrb_map;
-	N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-	dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-	int foffset = cc->physCellId & 1;
-	int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
-
-	// Time-domain scheduling
-	if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
-	    continue;
-	else
-	    switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
-	    case 0:		// repetition 4
-		k = (frameP >> 1) & 3;
-		if ((subframeP != (4 + sfoffset))
-		    || ((frameP & 1) != foffset))
-		    continue;
-		break;
-	    case 1:		// repetition 8
-		k = frameP & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((foffset == 0) && (subframeP != (4 + sfoffset)))
-		    continue;
-		else if ((foffset == 1)
-			 && (subframeP != ((9 + sfoffset) % 10)))
-		    continue;
-		break;
-	    case 2:		// repetition 16
-		k = ((10 * frameP) + subframeP) & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((sfoffset == 1)
-		    && ((subframeP != 0) || (subframeP != 5)))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 0)
-			 && (subframeP != 4) && (subframeP != 9))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 1)
-			 && (subframeP != 0) && (subframeP != 9))
-		    continue;
-		break;
-	    }
-	// if we get here we have to schedule SIB1_BR in this frame/subframe
-
-	// keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
-	if ((frameP & 7) == 0)
-	    cc->SIB1_BR_cnt = 0;
-	else
-	    cc->SIB1_BR_cnt++;
-
-	// Frequency-domain scheduling
-	switch (N_RB_DL) {
-	case 6:
-	case 15:
-	default:
-	    m = 1;
-	    n_NB = 0;
-	    N_S_NB = 0;
-	    Sj = NULL;
-	    break;
-	case 25:
-	    m = 2;
-	    N_S_NB = 2;
-	    Sj = Sj25;
-	    break;
-	case 50:
-	    m = 2;
-	    N_S_NB = 6;
-	    Sj = Sj50;
-	    break;
-	case 75:
-	    m = 4;
-	    N_S_NB = 10;
-	    Sj = Sj75;
-	    break;
-	case 100:
-	    m = 4;
-	    N_S_NB = 14;
-	    Sj = Sj100;
-	    break;
-	}
-	// Note: definition of k above and rvidx from 36.321 section 5.3.1
-	rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
-
-	i = cc->SIB1_BR_cnt & (m - 1);
-
-	n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
-
-
-	bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);	// not used in this case
-
-	AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
-		    "schedulingInfoSIB1_BR_r13 %d > 18\n",
-		    (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
-
-	AssertFatal(bcch_sdu_length > 0,
-		    "RRC returned 0 bytes for SIB1-BR\n");
-
-	TBS =
-	    SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
-			       1) / 3] >> 3;
-
-	AssertFatal(bcch_sdu_length <= TBS,
-		    "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
-		    bcch_sdu_length, TBS);
-
-	if ((frameP & 1023) < 200)
-	    LOG_D(MAC,
-		  "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
-		  module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
-		  n_NB, i, m, N_S_NB, rvidx);
-
-	// allocate all 6 PRBs in narrowband for SIB1_BR
-
-	first_rb = narrowband_to_first_rb(cc, n_NB);
-
-	vrb_map[first_rb] = 1;
-	vrb_map[first_rb + 1] = 1;
-	vrb_map[first_rb + 2] = 1;
-	vrb_map[first_rb + 3] = 1;
-	vrb_map[first_rb + 4] = 1;
-	vrb_map[first_rb + 5] = 1;
-
-	dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	memset((void *) dl_config_pdu, 0,
-	       sizeof(nfapi_dl_config_request_pdu_t));
-	dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-	dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2;	// format 1A/1B/1D
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2;	//QPSK
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;	// first block
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4;	// 0 dB
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
-	// Rel10 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
-	// Rel13 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;	// SIB1-BR
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF;	// absolute SFx
-
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-	dl_req->number_pdu++;
-        dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-	// Program TX Request
-	TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	TX_req->pdu_length = bcch_sdu_length;
-	TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	TX_req->num_segments = 1;
-	TX_req->segments[0].segment_length = bcch_sdu_length;
-	TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
-        eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-        eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-        eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-        eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK,
-		      &cc->BCCH_BR_pdu[0].payload[0],
-		      bcch_sdu_length,
-		      0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-	    LOG_D(OPT,
-		  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-		  module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-	}
-	if (cc->tdd_Config != NULL) {	//TDD
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	} else {
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	}
+    // Note: definition of k above and rvidx from 36.321 section 5.3.1
+    rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
+    i = cc->SIB1_BR_cnt & (m - 1);
+    n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
+    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);  // not used in this case
+    AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
+                "schedulingInfoSIB1_BR_r13 %d > 18\n",
+                (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+    AssertFatal(bcch_sdu_length > 0,
+                "RRC returned 0 bytes for SIB1-BR\n");
+    TBS =
+      SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
+                         1) / 3] >> 3;
+    AssertFatal(bcch_sdu_length <= TBS,
+                "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
+                bcch_sdu_length, TBS);
+
+    if ((frameP & 1023) < 200)
+      LOG_D(MAC,
+            "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
+            module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
+            n_NB, i, m, N_S_NB, rvidx);
+
+    // allocate all 6 PRBs in narrowband for SIB1_BR
+    first_rb = narrowband_to_first_rb(cc, n_NB);
+    vrb_map[first_rb] = 1;
+    vrb_map[first_rb + 1] = 1;
+    vrb_map[first_rb + 2] = 1;
+    vrb_map[first_rb + 3] = 1;
+    vrb_map[first_rb + 4] = 1;
+    vrb_map[first_rb + 5] = 1;
+    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+    memset((void *) dl_config_pdu, 0,
+           sizeof(nfapi_dl_config_request_pdu_t));
+    dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+    dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
+    // Rel10 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
+    // Rel13 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;  // SIB1-BR
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+    dl_req->number_pdu++;
+    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+    // Program TX Request
+    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+    TX_req->pdu_length = bcch_sdu_length;
+    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+    TX_req->num_segments = 1;
+    TX_req->segments[0].segment_length = bcch_sdu_length;
+    TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
+    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+    trace_pdu(DIRECTION_DOWNLINK,
+              &cc->BCCH_BR_pdu[0].payload[0],
+              bcch_sdu_length,
+              0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+    if (cc->tdd_Config != NULL) { //TDD
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
+    } else {
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
     }
+  }
+
 #endif
 }
 
@@ -307,227 +302,221 @@ schedule_SIB1_MBMS(module_id_t module_idP,
 //------------------------------------------------------------------------------
 void
 schedule_SIB1_BR(module_id_t module_idP,
-		 frame_t frameP, sub_frame_t subframeP)
+                 frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
-    int8_t bcch_sdu_length;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    int m, i, N_S_NB;
-    int *Sj;
-    int n_NB = 0;
-    int TBS;
-    int k = 0, rvidx;
-    uint16_t sfn_sf = frameP<<4|subframeP;
+  int8_t bcch_sdu_length;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  int m, i, N_S_NB;
+  int *Sj;
+  int n_NB = 0;
+  int TBS;
+  int k = 0, rvidx;
+  uint16_t sfn_sf = frameP<<4|subframeP;
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    cc = &eNB->common_channels[CC_id];
+    vrb_map = (void *) &cc->vrb_map;
+    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+    int foffset = cc->physCellId & 1;
+    int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
 
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    // Time-domain scheduling
+    if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
+      continue;
+    else
+      switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
+        case 0:   // repetition 4
+          k = (frameP >> 1) & 3;
+
+          if ((subframeP != (4 + sfoffset))
+              || ((frameP & 1) != foffset))
+            continue;
+
+          break;
+
+        case 1:   // repetition 8
+          k = frameP & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((foffset == 0) && (subframeP != (4 + sfoffset)))
+            continue;
+          else if ((foffset == 1)
+                   && (subframeP != ((9 + sfoffset) % 10)))
+            continue;
+
+          break;
+
+        case 2:   // repetition 16
+          k = ((10 * frameP) + subframeP) & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((sfoffset == 1)
+              && ((subframeP != 0) || (subframeP != 5)))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 0)
+                   && (subframeP != 4) && (subframeP != 9))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 1)
+                   && (subframeP != 0) && (subframeP != 9))
+            continue;
+
+          break;
+      }
+
+    // if we get here we have to schedule SIB1_BR in this frame/subframe
+
+    // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
+    if ((frameP & 7) == 0)
+      cc->SIB1_BR_cnt = 0;
+    else
+      cc->SIB1_BR_cnt++;
+
+    // Frequency-domain scheduling
+    switch (N_RB_DL) {
+      case 6:
+      case 15:
+      default:
+        m = 1;
+        n_NB = 0;
+        N_S_NB = 0;
+        Sj = NULL;
+        break;
+
+      case 25:
+        m = 2;
+        N_S_NB = 2;
+        Sj = Sj25;
+        break;
+
+      case 50:
+        m = 2;
+        N_S_NB = 6;
+        Sj = Sj50;
+        break;
+
+      case 75:
+        m = 4;
+        N_S_NB = 10;
+        Sj = Sj75;
+        break;
+
+      case 100:
+        m = 4;
+        N_S_NB = 14;
+        Sj = Sj100;
+        break;
+    }
 
-	cc = &eNB->common_channels[CC_id];
-	vrb_map = (void *) &cc->vrb_map;
-	N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-	dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-	int foffset = cc->physCellId & 1;
-	int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
-
-	// Time-domain scheduling
-	if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
-	    continue;
-	else
-	    switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
-	    case 0:		// repetition 4
-		k = (frameP >> 1) & 3;
-		if ((subframeP != (4 + sfoffset))
-		    || ((frameP & 1) != foffset))
-		    continue;
-		break;
-	    case 1:		// repetition 8
-		k = frameP & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((foffset == 0) && (subframeP != (4 + sfoffset)))
-		    continue;
-		else if ((foffset == 1)
-			 && (subframeP != ((9 + sfoffset) % 10)))
-		    continue;
-		break;
-	    case 2:		// repetition 16
-		k = ((10 * frameP) + subframeP) & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((sfoffset == 1)
-		    && ((subframeP != 0) || (subframeP != 5)))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 0)
-			 && (subframeP != 4) && (subframeP != 9))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 1)
-			 && (subframeP != 0) && (subframeP != 9))
-		    continue;
-		break;
-	    }
-	// if we get here we have to schedule SIB1_BR in this frame/subframe
-
-	// keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
-	if ((frameP & 7) == 0)
-	    cc->SIB1_BR_cnt = 0;
-	else
-	    cc->SIB1_BR_cnt++;
-
-	// Frequency-domain scheduling
-	switch (N_RB_DL) {
-	case 6:
-	case 15:
-	default:
-	    m = 1;
-	    n_NB = 0;
-	    N_S_NB = 0;
-	    Sj = NULL;
-	    break;
-	case 25:
-	    m = 2;
-	    N_S_NB = 2;
-	    Sj = Sj25;
-	    break;
-	case 50:
-	    m = 2;
-	    N_S_NB = 6;
-	    Sj = Sj50;
-	    break;
-	case 75:
-	    m = 4;
-	    N_S_NB = 10;
-	    Sj = Sj75;
-	    break;
-	case 100:
-	    m = 4;
-	    N_S_NB = 14;
-	    Sj = Sj100;
-	    break;
-	}
-	// Note: definition of k above and rvidx from 36.321 section 5.3.1
-	rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
-
-	i = cc->SIB1_BR_cnt & (m - 1);
-
-	n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
-
-
-	bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 0xFFFF, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);	// not used in this case
-
-	AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
-		    "schedulingInfoSIB1_BR_r13 %d > 18\n",
-		    (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
-
-	AssertFatal(bcch_sdu_length > 0,
-		    "RRC returned 0 bytes for SIB1-BR\n");
-
-	TBS =
-	    SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
-			       1) / 3] >> 3;
-
-	AssertFatal(bcch_sdu_length <= TBS,
-		    "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
-		    bcch_sdu_length, TBS);
-
-	if ((frameP & 1023) < 200)
-	    LOG_D(MAC,
-		  "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
-		  module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
-		  n_NB, i, m, N_S_NB, rvidx);
-
-	// allocate all 6 PRBs in narrowband for SIB1_BR
-
-	first_rb = narrowband_to_first_rb(cc, n_NB);
-
-	vrb_map[first_rb] = 1;
-	vrb_map[first_rb + 1] = 1;
-	vrb_map[first_rb + 2] = 1;
-	vrb_map[first_rb + 3] = 1;
-	vrb_map[first_rb + 4] = 1;
-	vrb_map[first_rb + 5] = 1;
-
-	dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	memset((void *) dl_config_pdu, 0,
-	       sizeof(nfapi_dl_config_request_pdu_t));
-	dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-	dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2;	// format 1A/1B/1D
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2;	//QPSK
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;	// first block
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4;	// 0 dB
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
-	// Rel10 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
-	// Rel13 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;	// SIB1-BR
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF;	// absolute SFx
-
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-	dl_req->number_pdu++;
-        dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-	// Program TX Request
-	TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	TX_req->pdu_length = bcch_sdu_length;
-	TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	TX_req->num_segments = 1;
-	TX_req->segments[0].segment_length = bcch_sdu_length;
-	TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
-        eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-        eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-        eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-        eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK,
-		      &cc->BCCH_BR_pdu[0].payload[0],
-		      bcch_sdu_length,
-		      0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-	    LOG_D(OPT,
-		  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-		  module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-	}
-	if (cc->tdd_Config != NULL) {	//TDD
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	} else {
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	}
+    // Note: definition of k above and rvidx from 36.321 section 5.3.1
+    rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
+    i = cc->SIB1_BR_cnt & (m - 1);
+    n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
+    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 0xFFFF, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);  // not used in this case
+    AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
+                "schedulingInfoSIB1_BR_r13 %d > 18\n",
+                (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+    AssertFatal(bcch_sdu_length > 0,
+                "RRC returned 0 bytes for SIB1-BR\n");
+    TBS =
+      SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
+                         1) / 3] >> 3;
+    AssertFatal(bcch_sdu_length <= TBS,
+                "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
+                bcch_sdu_length, TBS);
+
+    if ((frameP & 1023) < 200)
+      LOG_D(MAC,
+            "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
+            module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
+            n_NB, i, m, N_S_NB, rvidx);
+
+    // allocate all 6 PRBs in narrowband for SIB1_BR
+    first_rb = narrowband_to_first_rb(cc, n_NB);
+    vrb_map[first_rb] = 1;
+    vrb_map[first_rb + 1] = 1;
+    vrb_map[first_rb + 2] = 1;
+    vrb_map[first_rb + 3] = 1;
+    vrb_map[first_rb + 4] = 1;
+    vrb_map[first_rb + 5] = 1;
+    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+    memset((void *) dl_config_pdu, 0,
+           sizeof(nfapi_dl_config_request_pdu_t));
+    dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+    dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
+    // Rel10 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
+    // Rel13 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;  // SIB1-BR
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+    dl_req->number_pdu++;
+    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+    // Program TX Request
+    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+    TX_req->pdu_length = bcch_sdu_length;
+    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+    TX_req->num_segments = 1;
+    TX_req->segments[0].segment_length = bcch_sdu_length;
+    TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
+    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+    trace_pdu(DIRECTION_DOWNLINK,
+              &cc->BCCH_BR_pdu[0].payload[0],
+              bcch_sdu_length,
+              0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+    if (cc->tdd_Config != NULL) { //TDD
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
+    } else {
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
     }
+  }
 }
 
 int si_WindowLength_BR_r13tab[LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare] = { 20, 40, 60, 80, 120, 160, 200 };
@@ -538,7 +527,7 @@ int si_WindowLength_MBMS_r14tab[8] = { 1, 2, 5, 10, 15, 20, 40, 80 };
 //------------------------------------------------------------------------------
 void
 schedule_SI_BR(module_id_t module_idP, frame_t frameP,
-	       sub_frame_t subframeP)
+               sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
   int8_t                                  bcch_sdu_length;
@@ -555,55 +544,48 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
   int                                     rvidx;
   int                                     absSF = (frameP*10)+subframeP;
 
-
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-
     cc              = &eNB->common_channels[CC_id];
-    vrb_map         = (void*)&cc->vrb_map;
+    vrb_map         = (void *)&cc->vrb_map;
     N_RB_DL         = to_prb(cc->mib->message.dl_Bandwidth);
     dl_req          = &eNB->DL_req[CC_id].dl_config_request_body;
 
     // Time-domain scheduling
     if (cc->mib->message.schedulingInfoSIB1_BR_r13==0) continue;
     else  {
-
-
       AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13!=NULL,
-		  "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
-
+                  "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
       LTE_SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13;
       AssertFatal(schedulingInfoList_BR_r13!=NULL,
-		  "sib_v13ext->schedulingInfoList_BR_r13 is null\n");
-
+                  "sib_v13ext->schedulingInfoList_BR_r13 is null\n");
       LTE_SchedulingInfoList_t *schedulingInfoList = cc->schedulingInfoList;
       AssertFatal(schedulingInfoList_BR_r13->list.count==schedulingInfoList->list.count,
-		  "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n",
-		  schedulingInfoList_BR_r13->list.count,schedulingInfoList->list.count);
-
-      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
-		  "si_WindowLength_BR_r13 %d > %d\n",
-		  (int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
-		  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
-
+                  "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n",
+                  schedulingInfoList_BR_r13->list.count,schedulingInfoList->list.count);
+      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
+                  "si_WindowLength_BR_r13 %d > %d\n",
+                  (int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
       // check that SI frequency-hopping is disabled
-      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off,
-		  "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n");
+      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off,
+                  "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n");
       long si_WindowLength_BR_r13   = si_WindowLength_BR_r13tab[cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13];
-
       long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13;
       AssertFatal(si_RepetitionPattern_r13<=LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF,
-		  "si_RepetitionPattern_r13 %d > %d\n",
-		  (int)si_RepetitionPattern_r13,
-		  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF);
+                  "si_RepetitionPattern_r13 %d > %d\n",
+                  (int)si_RepetitionPattern_r13,
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF);
       // cycle through SIB list
 
-      for (i=0;i<schedulingInfoList_BR_r13->list.count;i++) {
+      for (i=0; i<schedulingInfoList_BR_r13->list.count; i++) {
         long si_Periodicity = schedulingInfoList->list.array[i]->si_Periodicity;
         long si_Narrowband_r13 = schedulingInfoList_BR_r13->list.array[i]->si_Narrowband_r13;
         long si_TBS_r13 = si_TBS_r13tab[schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13];
-
         // check if the SI is to be scheduled now
         int period_in_sf;
+
         if ((si_Periodicity >= 0) && (si_Periodicity < 25)) {
           // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
           period_in_sf = 80 << ((int) si_Periodicity);
@@ -612,19 +594,17 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
         } else if (si_Periodicity > 24) {
           period_in_sf = 80 << 24;
         }
+
         int sf_mod_period = absSF % period_in_sf;
         int k = sf_mod_period & 3;
         // Note: definition of k and rvidx from 36.321 section 5.3.1
         rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
 
         if ((sf_mod_period < si_WindowLength_BR_r13)
-            && ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) {	// this SIB is to be scheduled
-
-          bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 0xFFFF, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0);	// not used in this case
-
-
+            && ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) { // this SIB is to be scheduled
+          bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 0xFFFF, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0);  // not used in this case
           AssertFatal(bcch_sdu_length > 0,
-          "RRC returned 0 bytes for SI-BR %d\n", i);
+                      "RRC returned 0 bytes for SI-BR %d\n", i);
 
           if (bcch_sdu_length > 0) {
             AssertFatal(bcch_sdu_length <= (si_TBS_r13 >> 3),
@@ -647,23 +627,20 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
 
             if ((frameP&1023) < 200)
               LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
-                   module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx,
-                   sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13,
-                   bcch_sdu_length);
-
+                    module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx,
+                    sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13,
+                    bcch_sdu_length);
 
             //// Rel10 fields (for PDSCH starting symbol)
             //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
             //// Rel13 fields
             //                  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1;	// SI-BR
+            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1;  // SI-BR
             //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period;
-
             ////  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
             //dl_req->number_pdu++;
             //                  dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
             dl_config_pdu                                                                  = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
             memset((void *) dl_config_pdu, 0, sizeof(nfapi_dl_config_request_pdu_t));
             dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
@@ -681,7 +658,7 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB==1 ) ? 0 : 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-            //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+            //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
@@ -696,10 +673,8 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 1; // CEModeA UE
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 1; // SI-BR
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = absSF - sf_mod_period;
-
-            //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+            //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
             dl_req->number_pdu++;
-
             // Program TX Request
             TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
             TX_req->pdu_length                                                    = bcch_sdu_length;
@@ -708,30 +683,27 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             TX_req->segments[0].segment_length                                    = bcch_sdu_length;
             TX_req->segments[0].segment_data                                      = cc->BCCH_BR_pdu[i+1].payload;
             eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-
-            if (opt_enabled == 1) {
-                trace_pdu(DIRECTION_DOWNLINK,
-                    &cc->BCCH_BR_pdu[i + 1].payload[0],
-                    bcch_sdu_length,
-                    0xffff,
-                    WS_SI_RNTI,
-                    0xffff, eNB->frame, eNB->subframe, 0,
-                    0);
-                LOG_D(OPT, "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-                      module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-            }
-            if (cc->tdd_Config != NULL) {	//TDD
-                LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
-                      frameP, i, CC_id, bcch_sdu_length);
+            trace_pdu(DIRECTION_DOWNLINK,
+                      &cc->BCCH_BR_pdu[i + 1].payload[0],
+                      bcch_sdu_length,
+                      0xffff,
+                      WS_SI_RNTI,
+                      0xffff, eNB->frame, eNB->subframe, 0,
+                      0);
+
+            if (cc->tdd_Config != NULL) { //TDD
+              LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
+                    frameP, i, CC_id, bcch_sdu_length);
             } else {
-                LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n",
-                      frameP, i, CC_id, bcch_sdu_length);
+              LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n",
+                    frameP, i, CC_id, bcch_sdu_length);
             }
           }
-        }		// scheduling in current frame/subframe
-	    }			//for SI List
-    }			// eMTC is activated
-  }				// CC_id
+        }   // scheduling in current frame/subframe
+      }     //for SI List
+    }     // eMTC is activated
+  }       // CC_id
+
   return;
 }
 
@@ -739,300 +711,274 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
 //------------------------------------------------------------------------------
 void
 schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
-	       sub_frame_t subframeP)
+                 sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
-    int8_t bcch_sdu_length;
-    int mcs = -1;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_t      *dl_config_request;
-    nfapi_dl_config_request_pdu_t  *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    start_meas(&eNB->schedule_si_mbms);
-
-    // Only schedule LTE System Information in subframe 0
-    if (subframeP == 0) {
-
-	for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	    cc = &eNB->common_channels[CC_id];
-	    vrb_map = (void *) &cc->vrb_map;
-	    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-            dl_config_request = &eNB->DL_req[CC_id];
-	    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-
-	    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_MBMS,0xFFFF, 1, &cc->BCCH_MBMS_pdu.payload[0], 0);	// not used in this case
-
-	    if (bcch_sdu_length > 0) {
-		LOG_D(MAC, "[eNB %d] Frame %d : BCCH-MBMS->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
-
-		// Allocate 4 PRBs in a random location
-		/*
-		   while (1) {
-		   first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
-		   if ((vrb_map[first_rb] != 1) && 
-		   (vrb_map[first_rb+1] != 1) && 
-		   (vrb_map[first_rb+2] != 1) && 
-		   (vrb_map[first_rb+3] != 1))
-		   break;
-		   }
-		 */
-		switch (N_RB_DL) {
-		case 6:
-		    first_rb = 0;
-		    break;
-		case 15:
-		    first_rb = 6;
-		    break;
-		case 25:
-		    first_rb = 11;
-		    break;
-		case 50:
-		    first_rb = 23;
-		    break;
-		case 100:
-		    first_rb = 48;
-		    break;
-		}
-
-		vrb_map[first_rb] = 1;
-		vrb_map[first_rb + 1] = 1;
-		vrb_map[first_rb + 2] = 1;
-		vrb_map[first_rb + 3] = 1;
-
-		// Get MCS for length of SI, 3 PRBs
-		if (bcch_sdu_length <= 7) {
-		    mcs = 0;
-		} else if (bcch_sdu_length <= 11) {
-		    mcs = 1;
-		} else if (bcch_sdu_length <= 18) {
-		    mcs = 2;
-		} else if (bcch_sdu_length <= 22) {
-		    mcs = 3;
-		} else if (bcch_sdu_length <= 26) {
-		    mcs = 4;
-		} else if (bcch_sdu_length <= 28) {
-		    mcs = 5;
-		} else if (bcch_sdu_length <= 32) {
-		    mcs = 6;
-		} else if (bcch_sdu_length <= 41) {
-		    mcs = 7;
-		} else if (bcch_sdu_length <= 49) {
-		    mcs = 8;
-		}
-
-
-		dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		memset((void *) dl_config_pdu, 0,
-		       sizeof(nfapi_dl_config_request_pdu_t));
-		dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
-		dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
-                dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;	// S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000;	// equal to RS power
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;	// no TPC
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
-                dl_config_request->sfn_sf = sfn_sf;
-
-		if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
-		    LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI MBMS\n", frameP, subframeP);
-		    dl_req->number_dci++;
-		    dl_req->number_pdu++;
-		    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		    memset((void *) dl_config_pdu, 0,
-			   sizeof(nfapi_dl_config_request_pdu_t));
-		    dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-		    dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;	// format 1A/1B/1D
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2;	//QPSK
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1;	// first block
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4;	// 0 dB
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-		    dl_req->number_pdu++;
-
-                    // Rel10 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
-                    // Rel13 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
-
-                    dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
-                    dl_config_request->sfn_sf                                                      = sfn_sf;
-
-		    // Program TX Request
-		    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-		    TX_req->pdu_length = bcch_sdu_length;
-		    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-		    TX_req->num_segments = 1;
-		    TX_req->segments[0].segment_length = bcch_sdu_length;
-		    TX_req->segments[0].segment_data = cc->BCCH_MBMS_pdu.payload;
-		    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-                    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-                    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-                    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-		} else {
-		    LOG_E(MAC,
-			  "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI MBMS\n",
-			  module_idP, CC_id, frameP, subframeP);
-		}
-
-                T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
-                  T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length));
-
-		if (opt_enabled == 1) {
-		    trace_pdu(DIRECTION_DOWNLINK,
-			      &cc->BCCH_MBMS_pdu.payload[0],
-			      bcch_sdu_length,
-			      0xffff,
-			     WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-		    LOG_D(OPT,
-			  "[eNB %d][BCH-MBMS] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-			  module_idP, frameP, CC_id, 0xffff,
-			  bcch_sdu_length);
-		}
-		if (0/*cc->tdd_Config != NULL*/) {	//TDD not for FeMBMS
-		    LOG_D(MAC,
-			  "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
-			  frameP, CC_id, bcch_sdu_length, mcs);
-		} else {
-		    LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-MBMS->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
-		}
-
-
-		eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
-		eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
-		eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
-		eNB->eNB_stats[CC_id].bcch_mcs = mcs;
-//printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
-	    } else {
-
-		//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
-	    }
-	}
+  int8_t bcch_sdu_length;
+  int mcs = -1;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_t      *dl_config_request;
+  nfapi_dl_config_request_pdu_t  *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  start_meas(&eNB->schedule_si_mbms);
+
+  // Only schedule LTE System Information in subframe 0
+  if (subframeP == 0) {
+    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+      cc = &eNB->common_channels[CC_id];
+      vrb_map = (void *) &cc->vrb_map;
+      N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+      dl_config_request = &eNB->DL_req[CC_id];
+      dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+      bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_MBMS,0xFFFF, 1, &cc->BCCH_MBMS_pdu.payload[0], 0);  // not used in this case
+
+      if (bcch_sdu_length > 0) {
+        LOG_D(MAC, "[eNB %d] Frame %d : BCCH-MBMS->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
+
+        // Allocate 4 PRBs in a random location
+        /*
+           while (1) {
+           first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
+           if ((vrb_map[first_rb] != 1) &&
+           (vrb_map[first_rb+1] != 1) &&
+           (vrb_map[first_rb+2] != 1) &&
+           (vrb_map[first_rb+3] != 1))
+           break;
+           }
+         */
+        switch (N_RB_DL) {
+          case 6:
+            first_rb = 0;
+            break;
+
+          case 15:
+            first_rb = 6;
+            break;
+
+          case 25:
+            first_rb = 11;
+            break;
+
+          case 50:
+            first_rb = 23;
+            break;
+
+          case 100:
+            first_rb = 48;
+            break;
+        }
+
+        vrb_map[first_rb] = 1;
+        vrb_map[first_rb + 1] = 1;
+        vrb_map[first_rb + 2] = 1;
+        vrb_map[first_rb + 3] = 1;
+
+        // Get MCS for length of SI, 3 PRBs
+        if (bcch_sdu_length <= 7) {
+          mcs = 0;
+        } else if (bcch_sdu_length <= 11) {
+          mcs = 1;
+        } else if (bcch_sdu_length <= 18) {
+          mcs = 2;
+        } else if (bcch_sdu_length <= 22) {
+          mcs = 3;
+        } else if (bcch_sdu_length <= 26) {
+          mcs = 4;
+        } else if (bcch_sdu_length <= 28) {
+          mcs = 5;
+        } else if (bcch_sdu_length <= 32) {
+          mcs = 6;
+        } else if (bcch_sdu_length <= 41) {
+          mcs = 7;
+        } else if (bcch_sdu_length <= 49) {
+          mcs = 8;
+        }
+
+        dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+        memset((void *) dl_config_pdu, 0,
+               sizeof(nfapi_dl_config_request_pdu_t));
+        dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
+        dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;  // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000; // equal to RS power
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;  // no TPC
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
+        dl_config_request->sfn_sf = sfn_sf;
+
+        if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
+          LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI MBMS\n", frameP, subframeP);
+          dl_req->number_dci++;
+          dl_req->number_pdu++;
+          dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+          memset((void *) dl_config_pdu, 0,
+                 sizeof(nfapi_dl_config_request_pdu_t));
+          dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+          dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2; // format 1A/1B/1D
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2; //QPSK
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1; // first block
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+          dl_req->number_pdu++;
+          // Rel10 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
+          // Rel13 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
+          dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
+          dl_config_request->sfn_sf                                                      = sfn_sf;
+          // Program TX Request
+          TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+          TX_req->pdu_length = bcch_sdu_length;
+          TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+          TX_req->num_segments = 1;
+          TX_req->segments[0].segment_length = bcch_sdu_length;
+          TX_req->segments[0].segment_data = cc->BCCH_MBMS_pdu.payload;
+          eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+          eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+          eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+        } else {
+          LOG_E(MAC,
+                "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI MBMS\n",
+                module_idP, CC_id, frameP, subframeP);
+        }
+
+        T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
+          T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length));
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &cc->BCCH_MBMS_pdu.payload[0],
+                  bcch_sdu_length,
+                  0xffff,
+                  WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+        if (0/*cc->tdd_Config != NULL*/) {  //TDD not for FeMBMS
+          LOG_D(MAC,
+                "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
+                frameP, CC_id, bcch_sdu_length, mcs);
+        } else {
+          LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-MBMS->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
+        }
+
+        eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
+        eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
+        eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
+        eNB->eNB_stats[CC_id].bcch_mcs = mcs;
+        //printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
+      } else {
+        //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
+      }
     }
+  }
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    //schedule_SIB1_BR(module_idP, frameP, subframeP);
-    //schedule_SI_BR(module_idP, frameP, subframeP);
+  //schedule_SIB1_BR(module_idP, frameP, subframeP);
+  //schedule_SI_BR(module_idP, frameP, subframeP);
 #endif
-
   stop_meas(&eNB->schedule_si_mbms);
-
-
 }
 #endif
 
 void
-schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
-{
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    int mib_sdu_length;
-    int CC_id;
-    nfapi_dl_config_request_t *dl_config_request;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    AssertFatal(subframeP == 0, "Subframe must be 0\n");
-    AssertFatal((frameP & 3) == 0, "Frame must be a multiple of 4\n");
-
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	dl_config_request = &eNB->DL_req[CC_id];
-	dl_req = &dl_config_request->dl_config_request_body;
-	cc = &eNB->common_channels[CC_id];
-
-	mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 0xFFFF, 1, &cc->MIB_pdu.payload[0], 0);	// not used in this case
-
-	LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
-
-	if (mib_sdu_length > 0) {
-
-	    LOG_D(MAC, "Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", frameP, subframeP, dl_req->number_pdu, mib_sdu_length);
-
-	    if ((frameP & 1023) < 40)
+schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) {
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  int mib_sdu_length;
+  int CC_id;
+  nfapi_dl_config_request_t *dl_config_request;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  AssertFatal(subframeP == 0, "Subframe must be 0\n");
+  AssertFatal((frameP & 3) == 0, "Frame must be a multiple of 4\n");
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    dl_config_request = &eNB->DL_req[CC_id];
+    dl_req = &dl_config_request->dl_config_request_body;
+    cc = &eNB->common_channels[CC_id];
+    mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 0xFFFF, 1, &cc->MIB_pdu.payload[0], 0); // not used in this case
+    LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
+
+    if (mib_sdu_length > 0) {
+      LOG_D(MAC, "Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", frameP, subframeP, dl_req->number_pdu, mib_sdu_length);
+
+      if ((frameP & 1023) < 40)
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-		LOG_D(MAC,
-		      "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",
-		      module_idP, frameP, CC_id, mib_sdu_length,
-		      (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+        LOG_D(MAC,
+              "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",
+              module_idP, frameP, CC_id, mib_sdu_length,
+              (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+
 #else
-		LOG_D(MAC,
-		      "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes\n",
-		      module_idP, frameP, CC_id, mib_sdu_length);
+        LOG_D(MAC,
+              "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes\n",
+              module_idP, frameP, CC_id, mib_sdu_length);
 #endif
-
-	    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	    memset((void *) dl_config_pdu, 0,
-		   sizeof(nfapi_dl_config_request_pdu_t));
-	    dl_config_pdu->pdu_type                                = NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
-		2 + sizeof(nfapi_dl_config_bch_pdu);
-            dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag             = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.length             = mib_sdu_length;
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index          = eNB->pdu_index[CC_id];
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000;
-            dl_req->tl.tag                                         = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-	    dl_req->number_pdu++;
-
-            dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
-            dl_config_request->sfn_sf = sfn_sf;
-
-	    LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", dl_req->number_pdu, &dl_req->number_pdu);
-	    // DL request
-
-	    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	    TX_req->pdu_length = 3;
-	    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	    TX_req->num_segments = 1;
-	    TX_req->segments[0].segment_length = 3;
-	    TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload;
-	    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-            eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-            eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-            eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-	}
+      dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+      memset((void *) dl_config_pdu, 0,
+             sizeof(nfapi_dl_config_request_pdu_t));
+      dl_config_pdu->pdu_type                                = NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
+            2 + sizeof(nfapi_dl_config_bch_pdu);
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag             = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.length             = mib_sdu_length;
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index          = eNB->pdu_index[CC_id];
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000;
+      dl_req->tl.tag                                         = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+      dl_req->number_pdu++;
+      dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+      dl_config_request->sfn_sf = sfn_sf;
+      LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", dl_req->number_pdu, &dl_req->number_pdu);
+      // DL request
+      TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+      TX_req->pdu_length = 3;
+      TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+      TX_req->num_segments = 1;
+      TX_req->segments[0].segment_length = 3;
+      TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload;
+      eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+      eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+      eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+      eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
     }
+  }
 }
 
 
@@ -1041,224 +987,207 @@ void
 schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
+  int8_t bcch_sdu_length;
+  int mcs = -1;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_t      *dl_config_request;
+  nfapi_dl_config_request_pdu_t  *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  start_meas(&eNB->schedule_si);
+
+  // Only schedule LTE System Information in subframe 5
+  if (subframeP == 5) {
+    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+      cc = &eNB->common_channels[CC_id];
+      vrb_map = (void *) &cc->vrb_map;
+      N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+      dl_config_request = &eNB->DL_req[CC_id];
+      dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+      bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 0xFFFF,1, &cc->BCCH_pdu.payload[0], 0); // not used in this case
+
+      if (bcch_sdu_length > 0) {
+        LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
+
+        // Allocate 4 PRBs in a random location
+        /*
+           while (1) {
+           first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
+           if ((vrb_map[first_rb] != 1) &&
+           (vrb_map[first_rb+1] != 1) &&
+           (vrb_map[first_rb+2] != 1) &&
+           (vrb_map[first_rb+3] != 1))
+           break;
+           }
+         */
+        switch (N_RB_DL) {
+          case 6:
+            first_rb = 0;
+            break;
+
+          case 15:
+            first_rb = 6;
+            break;
+
+          case 25:
+            first_rb = 11;
+            break;
+
+          case 50:
+            first_rb = 23;
+            break;
+
+          case 100:
+            first_rb = 48;
+            break;
+        }
+
+        vrb_map[first_rb] = 1;
+        vrb_map[first_rb + 1] = 1;
+        vrb_map[first_rb + 2] = 1;
+        vrb_map[first_rb + 3] = 1;
+
+        // Get MCS for length of SI, 3 PRBs
+        if (bcch_sdu_length <= 7) {
+          mcs = 0;
+        } else if (bcch_sdu_length <= 11) {
+          mcs = 1;
+        } else if (bcch_sdu_length <= 18) {
+          mcs = 2;
+        } else if (bcch_sdu_length <= 22) {
+          mcs = 3;
+        } else if (bcch_sdu_length <= 26) {
+          mcs = 4;
+        } else if (bcch_sdu_length <= 28) {
+          mcs = 5;
+        } else if (bcch_sdu_length <= 32) {
+          mcs = 6;
+        } else if (bcch_sdu_length <= 41) {
+          mcs = 7;
+        } else if (bcch_sdu_length <= 49) {
+          mcs = 8;
+        } else if (bcch_sdu_length <= 59) {
+          mcs = 9;
+        } else AssertFatal(1==0,"Cannot Assign mcs for bcch_sdu_length %d (max mcs 9)\n",bcch_sdu_length);
+
+        dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+        memset((void *) dl_config_pdu, 0,
+               sizeof(nfapi_dl_config_request_pdu_t));
+        dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
+        dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;  // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000; // equal to RS power
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;  // no TPC
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
+        dl_config_request->sfn_sf = sfn_sf;
+
+        if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
+          LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
+          dl_req->number_dci++;
+          dl_req->number_pdu++;
+          dl_req->tl.tag   = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+          dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+          memset((void *) dl_config_pdu, 0,
+                 sizeof(nfapi_dl_config_request_pdu_t));
+          dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+          dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2; // format 1A/1B/1D
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2; //QPSK
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1; // first block
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+          dl_req->number_pdu++;
+          dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+          // Rel10 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
+          // Rel13 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
+          dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
+          dl_config_request->sfn_sf                                                      = sfn_sf;
+          // Program TX Request
+          TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+          TX_req->pdu_length = bcch_sdu_length;
+          TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+          TX_req->num_segments = 1;
+          TX_req->segments[0].segment_length = bcch_sdu_length;
+          TX_req->segments[0].segment_data = cc->BCCH_pdu.payload;
+          eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+          eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+          eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+        } else {
+          LOG_E(MAC,
+                "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",
+                module_idP, CC_id, frameP, subframeP);
+        }
 
-    int8_t bcch_sdu_length;
-    int mcs = -1;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_t      *dl_config_request;
-    nfapi_dl_config_request_pdu_t  *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    start_meas(&eNB->schedule_si);
-
-    // Only schedule LTE System Information in subframe 5
-    if (subframeP == 5) {
-
-	for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	    cc = &eNB->common_channels[CC_id];
-	    vrb_map = (void *) &cc->vrb_map;
-	    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-            dl_config_request = &eNB->DL_req[CC_id];
-	    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-
-	    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 0xFFFF,1, &cc->BCCH_pdu.payload[0], 0);	// not used in this case
-
-	    if (bcch_sdu_length > 0) {
-		LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
-
-		// Allocate 4 PRBs in a random location
-		/*
-		   while (1) {
-		   first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
-		   if ((vrb_map[first_rb] != 1) && 
-		   (vrb_map[first_rb+1] != 1) && 
-		   (vrb_map[first_rb+2] != 1) && 
-		   (vrb_map[first_rb+3] != 1))
-		   break;
-		   }
-		 */
-		switch (N_RB_DL) {
-		case 6:
-		    first_rb = 0;
-		    break;
-		case 15:
-		    first_rb = 6;
-		    break;
-		case 25:
-		    first_rb = 11;
-		    break;
-		case 50:
-		    first_rb = 23;
-		    break;
-		case 100:
-		    first_rb = 48;
-		    break;
-		}
-
-		vrb_map[first_rb] = 1;
-		vrb_map[first_rb + 1] = 1;
-		vrb_map[first_rb + 2] = 1;
-		vrb_map[first_rb + 3] = 1;
-
-		// Get MCS for length of SI, 3 PRBs
-		if (bcch_sdu_length <= 7) {
-		    mcs = 0;
-		} else if (bcch_sdu_length <= 11) {
-		    mcs = 1;
-		} else if (bcch_sdu_length <= 18) {
-		    mcs = 2;
-		} else if (bcch_sdu_length <= 22) {
-		    mcs = 3;
-		} else if (bcch_sdu_length <= 26) {
-		    mcs = 4;
-		} else if (bcch_sdu_length <= 28) {
-		    mcs = 5;
-		} else if (bcch_sdu_length <= 32) {
-		    mcs = 6;
-		} else if (bcch_sdu_length <= 41) {
-		    mcs = 7;
-		} else if (bcch_sdu_length <= 49) {
-		    mcs = 8;
-		} else if (bcch_sdu_length <= 59) {
-                    mcs = 9;
-                } 
-                else AssertFatal(1==0,"Cannot Assign mcs for bcch_sdu_length %d (max mcs 9)\n",bcch_sdu_length);
-
-		dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		memset((void *) dl_config_pdu, 0,
-		       sizeof(nfapi_dl_config_request_pdu_t));
-		dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
-		dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
-                dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;	// S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000;	// equal to RS power
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;	// no TPC
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
-                dl_config_request->sfn_sf = sfn_sf;
-
-		if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
-		    LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
-		    dl_req->number_dci++;
-		    dl_req->number_pdu++;
-                    dl_req->tl.tag   = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-		    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		    memset((void *) dl_config_pdu, 0,
-			   sizeof(nfapi_dl_config_request_pdu_t));
-		    dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-		    dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;	// format 1A/1B/1D
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2;	//QPSK
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1;	// first block
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4;	// 0 dB
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-		    dl_req->number_pdu++;
-		    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-                    // Rel10 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
-                    // Rel13 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
-
-                    dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
-                    dl_config_request->sfn_sf                                                      = sfn_sf;
-
-		    // Program TX Request
-		    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-		    TX_req->pdu_length = bcch_sdu_length;
-		    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-		    TX_req->num_segments = 1;
-		    TX_req->segments[0].segment_length = bcch_sdu_length;
-		    TX_req->segments[0].segment_data = cc->BCCH_pdu.payload;
-		    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-                    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-                    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-                    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-		} else {
-		    LOG_E(MAC,
-			  "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",
-			  module_idP, CC_id, frameP, subframeP);
-		}
-
-                T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
-                  T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length));
-
-		if (opt_enabled == 1) {
-		    trace_pdu(DIRECTION_DOWNLINK,
-			      &cc->BCCH_pdu.payload[0],
-			      bcch_sdu_length,
-			      0xffff,
-			     WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-		    LOG_D(OPT,
-			  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-			  module_idP, frameP, CC_id, 0xffff,
-			  bcch_sdu_length);
-		}
-		if (cc->tdd_Config != NULL) {	//TDD
-		    LOG_D(MAC,
-			  "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
-			  frameP, CC_id, bcch_sdu_length, mcs);
-		} else {
-		    LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
-		}
-
-
-		eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
-		eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
-		eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
-		eNB->eNB_stats[CC_id].bcch_mcs = mcs;
-//printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
-	    } else {
-
-		//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
-	    }
-	}
+        T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
+          T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length));
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &cc->BCCH_pdu.payload[0],
+                  bcch_sdu_length,
+                  0xffff,
+                  WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+        if (cc->tdd_Config != NULL) { //TDD
+          LOG_D(MAC,
+                "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
+                frameP, CC_id, bcch_sdu_length, mcs);
+        } else {
+          LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
+        }
+
+        eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
+        eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
+        eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
+        eNB->eNB_stats[CC_id].bcch_mcs = mcs;
+        //printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
+      } else {
+        //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
+      }
     }
+  }
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    schedule_SIB1_BR(module_idP, frameP, subframeP);
-    schedule_SI_BR(module_idP, frameP, subframeP);
+  schedule_SIB1_BR(module_idP, frameP, subframeP);
+  schedule_SI_BR(module_idP, frameP, subframeP);
 #endif
-
   stop_meas(&eNB->schedule_si);
 }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 134089dbf4da98ef21e5d604ff6c67a2bfc2f516..6ce7d85ac9831cfddb85c09a6cf5de9400c02272 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -565,7 +565,6 @@ schedule_ue_spec(module_id_t module_idP,
     dl_Bandwidth = cc[CC_id].mib->message.dl_Bandwidth;
     N_RB_DL[CC_id] = to_prb(dl_Bandwidth);
     min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id);
-
     // get number of PRBs less those used by common channels
     total_nb_available_rb[CC_id] = N_RB_DL[CC_id];
 
@@ -622,7 +621,6 @@ schedule_ue_spec(module_id_t module_idP,
       LOG_D(MAC, "doing schedule_ue_spec for CC_id %d UE %d\n",
             CC_id,
             UE_id);
-
       continue_flag = 0; // reset the flag to allow allocation for the remaining UEs
       rnti = UE_RNTI(module_idP, UE_id);
       ue_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id];
@@ -776,7 +774,8 @@ schedule_ue_spec(module_id_t module_idP,
 
           if (ue_sched_ctrl->cdrx_configured) {
             ue_sched_ctrl->drx_retransmission_timer[harq_pid] = 0; // stop drx retransmission
-            /* 
+
+            /*
              * Note: contrary to the spec drx_retransmission_timer[harq_pid] is reset not stop.
              */
             if (harq_pid == 0) {
@@ -1011,9 +1010,10 @@ schedule_ue_spec(module_id_t module_idP,
                                              );
 
             if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)) {
-              while(pthread_mutex_trylock(&rrc_release_freelist)){
+              while(pthread_mutex_trylock(&rrc_release_freelist)) {
                 /* spin... */
               }
+
               uint16_t release_total = 0;
 
               for (release_num = 0, release_ctrl = &rrc_release_info.RRC_release_ctrl[0];
@@ -1060,10 +1060,10 @@ schedule_ue_spec(module_id_t module_idP,
                 if(release_total >= rrc_release_info.num_UEs)
                   break;
               }
+
               pthread_mutex_unlock(&rrc_release_freelist);
             }
 
-
             for (ra_ii = 0, ra = &eNB->common_channels[CC_id].ra[0]; ra_ii < NB_RA_PROC_MAX; ra_ii++, ra++) {
               if ((ra->rnti == rnti) && (ra->state == MSGCRNTI)) {
                 for (uint16_t mui_num = 0; mui_num < rlc_am_mui.rrc_mui_num; mui_num++) {
@@ -1254,7 +1254,6 @@ schedule_ue_spec(module_id_t module_idP,
               header_length_total += header_length_last;
               num_sdus++;
               ue_sched_ctrl->uplane_inactivity_timer = 0;
-
               // reset RRC inactivity timer after uplane activity
               ue_contextP = rrc_eNB_get_ue_context(RC.rrc[module_idP], rnti);
 
@@ -1422,27 +1421,17 @@ schedule_ue_spec(module_id_t module_idP,
             dlsch_pdu->payload[0][offset + sdu_length_total + j] = 0;
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK,
-                      (uint8_t *) dlsch_pdu->payload[0],
-                      TBS,
-                      module_idP,
-                      WS_C_RNTI,
-                      UE_RNTI(module_idP,
-                              UE_id),
-                      eNB->frame,
-                      eNB->subframe,
-                      0,
-                      0);
-            LOG_D(OPT, "[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP,
-                  CC_id,
-                  frameP,
-                  UE_RNTI(module_idP,
-                          UE_id),
-                  TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *) dlsch_pdu->payload[0],
+                    TBS,
+                    module_idP,
+                    WS_C_RNTI,
+                    UE_RNTI(module_idP,
+                            UE_id),
+                    eNB->frame,
+                    eNB->subframe,
+                    0,
+                    0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
             T_INT(module_idP),
             T_INT(CC_id),
@@ -1506,7 +1495,7 @@ schedule_ue_spec(module_id_t module_idP,
                 tpc = 1;  //0
               }
 
-              LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d\n",
+              LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d (normal case)\n",
                     module_idP,
                     frameP,
                     subframeP,
@@ -1578,17 +1567,17 @@ schedule_ue_spec(module_id_t module_idP,
             dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
             eNB->DL_req[CC_id].sfn_sf = frameP << 4 | subframeP;
             eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST;
-
             /* CDRX */
             ue_sched_ctrl->harq_rtt_timer[CC_id][harq_pid] = 1; // restart HARQ RTT timer
 
             if (ue_sched_ctrl->cdrx_configured) {
               ue_sched_ctrl->drx_inactivity_timer = 1; // restart drx inactivity timer when new transmission
               ue_sched_ctrl->drx_retransmission_timer[harq_pid] = 0; // stop drx retransmission
-              /* 
+              /*
                * Note: contrary to the spec drx_retransmission_timer[harq_pid] is reset not stop.
                */
               VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_INACTIVITY, (unsigned long) ue_sched_ctrl->drx_inactivity_timer);
+
               if (harq_pid == 0) {
                 VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_RETRANSMISSION_HARQ0, (unsigned long) ue_sched_ctrl->drx_retransmission_timer[0]);
               }
@@ -2345,25 +2334,16 @@ schedule_ue_spec_br(module_id_t module_idP,
             UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char)(taus()&0xff);
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(1,
-                      (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
-                      TBS,
-                      module_idP,
-                      3,
-                      UE_RNTI(module_idP,UE_id),
-                      mac->frame,
-                      mac->subframe,
-                      0,
-                      0);
-            LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP,
-                  CC_id,
-                  frameP,
-                  UE_RNTI(module_idP, UE_id),
-                  TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+                    TBS,
+                    module_idP,
+                    3,
+                    UE_RNTI(module_idP,UE_id),
+                    mac->frame,
+                    mac->subframe,
+                    0,
+                    0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
             T_INT(module_idP),
             T_INT(CC_id),
@@ -2556,25 +2536,16 @@ schedule_ue_spec_br(module_id_t module_idP,
         T_INT (subframeP),
         T_INT (0 /* harq_pid always 0? */ ),
         T_BUFFER (&mac->UE_list.DLSCH_pdu[CC_id][0][UE_id].payload[0], TX_req->pdu_length));
-
-      if (opt_enabled == 1) {
-        trace_pdu(1,
-                  (uint8_t *) mac->UE_list.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0],
-                  TX_req->pdu_length,
-                  UE_id,
-                  3,
-                  rnti,
-                  frameP,
-                  subframeP,
-                  0,
-                  0);
-        LOG_D(OPT, "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
-              module_idP,
-              CC_id,
-              frameP,
-              rnti,
-              TX_req->pdu_length);
-      }
+      trace_pdu(1,
+                (uint8_t *) mac->UE_list.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0],
+                TX_req->pdu_length,
+                UE_id,
+                3,
+                rnti,
+                frameP,
+                subframeP,
+                0,
+                0);
     } // end else if ((subframeP == 7) && (round_DL < 8))
   } // end loop on UE_id
 }
@@ -3089,8 +3060,8 @@ schedule_PCH(module_id_t module_idP,
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                  = NFAPI_DL_DCI_FORMAT_1A;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process                = 0;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                         = 1; // no TPC
-	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1        = 0;
-	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1        = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1        = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1        = 0;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(n_rb_dl, first_rb, 4);
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0;
 #endif
@@ -3180,25 +3151,16 @@ schedule_PCH(module_id_t module_idP,
           continue;
         }
 
-        if (opt_enabled == 1) {
-          trace_pdu(DIRECTION_DOWNLINK,
-                    &eNB->common_channels[CC_id].PCCH_pdu.payload[0],
-                    pcch_sdu_length,
-                    0xffff,
-                    PCCH,
-                    P_RNTI,
-                    eNB->frame,
-                    eNB->subframe,
-                    0,
-                    0);
-          LOG_D(OPT,"[eNB %d][PCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-                module_idP,
-                frameP,
-                CC_id,
-                0xffff,
-                pcch_sdu_length);
-        }
-
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &eNB->common_channels[CC_id].PCCH_pdu.payload[0],
+                  pcch_sdu_length,
+                  0xffff,
+                  PCCH,
+                  P_RNTI,
+                  eNB->frame,
+                  eNB->subframe,
+                  0,
+                  0);
         eNB->eNB_stats[CC_id].total_num_pcch_pdu++;
         eNB->eNB_stats[CC_id].pcch_buffer = pcch_sdu_length;
         eNB->eNB_stats[CC_id].total_pcch_buffer += pcch_sdu_length;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index c071c1f505d7aad17b990ff33b0b9a9b0e51e906..5b4eca635c8e6af4a5c5af5b55ceec6140ecd272 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -644,16 +644,18 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
     // Get total available RBS count and total UE count
     N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
     temp_total_rbs_count = 0;
-    for(uint8_t rbg_i = 0;rbg_i < N_RBG[CC_id];rbg_i++ ){
-      if(rballoc_sub[CC_id][rbg_i] == 0){
+
+    for(uint8_t rbg_i = 0; rbg_i < N_RBG[CC_id]; rbg_i++ ) {
+      if(rballoc_sub[CC_id][rbg_i] == 0) {
         if((rbg_i == N_RBG[CC_id] -1) &&
-           ((N_RB_DL == 25) || (N_RB_DL == 50))){
+            ((N_RB_DL == 25) || (N_RB_DL == 50))) {
           temp_total_rbs_count += (min_rb_unit[CC_id] -1);
-        }else{
+        } else {
           temp_total_rbs_count += min_rb_unit[CC_id];
         }
       }
     }
+
     temp_total_ue_count = dlsch_ue_select[CC_id].ue_num;
 
     for (i = 0; i < dlsch_ue_select[CC_id].ue_num; i++) {
@@ -1305,10 +1307,11 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
 #endif
                                              );
 
-            if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)){
+            if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)) {
               while(pthread_mutex_trylock(&rrc_release_freelist)) {
                 /* spin... */
               }
+
               uint16_t release_total = 0;
 
               for(uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
@@ -1345,6 +1348,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
                 if(release_total >= rrc_release_info.num_UEs)
                   break;
               }
+
               pthread_mutex_unlock(&rrc_release_freelist);
             }
 
@@ -1703,14 +1707,9 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
             UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff);
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
-                      TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP, UE_id),
-                      eNB->frame, eNB->subframe,0,0);
-            LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP, CC_id, frameP, UE_RNTI(module_idP, UE_id), TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+                    TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP, UE_id),
+                    eNB->frame, eNB->subframe,0,0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP),
             T_INT(harq_pid), T_BUFFER(UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS));
           UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb;
@@ -2052,6 +2051,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2130,7 +2130,8 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       rnti = UE_RNTI(module_idP,first_ue_id[CC_id][temp]);
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[first_ue_id[CC_id][temp]].dl_cqi[CC_id],format0); 
+      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[first_ue_id[CC_id][temp]].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         break;
@@ -2203,6 +2204,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2256,6 +2258,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       format_flag = 2;
       rnti = UE_RNTI(module_idP,ul_inactivity_id[CC_id][temp]);
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[ul_inactivity_id[CC_id][temp]].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2454,20 +2457,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = mcs;
             }
           } else {
-            if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED){
+            if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) {
               // assigne RBS( 6 RBs)
               first_rb[CC_id] = first_rb[CC_id] + 6;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul[0] = 6;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 5;
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
-            }else{
+            } else {
               // assigne RBS( 3 RBs)
               first_rb[CC_id] = first_rb[CC_id] + 3;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul[0] = 3;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 2;
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
             }
-           }
+          }
         } else if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority  == SCH_UL_INACTIVE ) {
           // assigne RBS( 3 RBs)
           first_rb[CC_id] = first_rb[CC_id] + 3;
@@ -2766,7 +2769,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id];
       harq_pid      = subframe2harqpid(cc,sched_frame,sched_subframeP);
       rnti = UE_RNTI(CC_id,UE_id);
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0); 
+      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
       LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n",
             module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL);
       int bytes_to_schedule = UE_template->estimated_ul_buffer - UE_template->scheduled_ul_bytes;
@@ -2836,7 +2839,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       }
 
       if (tpc!=1) {
-        LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
+        LOG_D(MAC,"[eNB %d] ULSCH schedulerRR: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
               module_idP,frameP,subframeP,harq_pid,tpc,
               tpc_accumulated,snr,target_snr);
       }
@@ -3047,7 +3050,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
           LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, harq_pid %d)\n",
                 module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,mcs_rv,first_rb[CC_id],ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb,UE_template->TBS_UL[harq_pid],harq_pid);
 
-
         // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB)
         //store for possible retransmission
         UE_template->nb_rb_ul[harq_pid]    = ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index cf358752e88f2ec96585f335bab49a583dde1a20..455ca10ecaa093f64c34f4d92b983b9752f7d866 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -48,10 +48,10 @@
 #include "assertions.h"
 
 #if defined(ENABLE_ITTI)
-#include "intertask_interface.h"
+  #include "intertask_interface.h"
 #endif
 
-#include "SIMULATION/TOOLS/sim.h"	// for taus
+#include "SIMULATION/TOOLS/sim.h" // for taus
 
 #define ENABLE_MAC_PAYLOAD_DEBUG
 #define DEBUG_eNB_SCHEDULER 1
@@ -62,754 +62,729 @@ extern RAN_CONTEXT_t RC;
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
 int8_t
 get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
-		       uint8_t mbsfn_sync_area)
-{
-    // currently there is one-to-one mapping between sf allocation pattern and sync area
-    if (mbsfn_sync_area >= MAX_MBSFN_AREA) {
-	LOG_W(MAC,
-	      "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
-	      module_idP, CC_id, mbsfn_sync_area);
-	return -1;
-    } else if (RC.mac[module_idP]->
-	       common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
-	       != NULL) {
-	return mbsfn_sync_area;
-    } else {
-	LOG_W(MAC,
-	      "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
-	      module_idP, CC_id, mbsfn_sync_area);
-	return -1;
-    }
+                       uint8_t mbsfn_sync_area) {
+  // currently there is one-to-one mapping between sf allocation pattern and sync area
+  if (mbsfn_sync_area >= MAX_MBSFN_AREA) {
+    LOG_W(MAC,
+          "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
+          module_idP, CC_id, mbsfn_sync_area);
+    return -1;
+  } else if (RC.mac[module_idP]->
+             common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
+             != NULL) {
+    return mbsfn_sync_area;
+  } else {
+    LOG_W(MAC,
+          "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
+          module_idP, CC_id, mbsfn_sync_area);
+    return -1;
+  }
 }
 
 int
 schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
-	      sub_frame_t subframeP)
-{
-
-    int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
-    int mbsfn_period = 0;	// 1<<(RC.mac[module_idP]->mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
-    int mcch_period = 0;	//32<<(RC.mac[module_idP]->mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
-    int mch_scheduling_period =
-	8 << (RC.mac[module_idP]->common_channels[CC_id].
-	      pmch_Config[0]->mch_SchedulingPeriod_r9);
-    unsigned char mcch_sdu_length;
-    unsigned char header_len_mcch = 0, header_len_msi =
-	0, header_len_mtch = 0, header_len_mtch_temp =
-	0, header_len_mcch_temp = 0, header_len_msi_temp = 0;
-    int ii = 0, msi_pos = 0;
-    int mcch_mcs = -1;
-    uint16_t TBS, j = -1, padding = 0, post_padding = 0;
-    mac_rlc_status_resp_t rlc_status;
-    int num_mtch;
-    int msi_length, i, k;
-    unsigned char sdu_lcids[11], num_sdus = 0, offset = 0;
-    uint16_t sdu_lengths[11], sdu_length_total = 0;
-    unsigned char mch_buffer[MAX_DLSCH_PAYLOAD_BYTES];	// check the max value, this is for dlsch only
-
-    COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
-
-    cc->MCH_pdu.Pdu_size = 0;
+              sub_frame_t subframeP) {
+  int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
+  int mbsfn_period = 0; // 1<<(RC.mac[module_idP]->mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
+  int mcch_period = 0;  //32<<(RC.mac[module_idP]->mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
+  int mch_scheduling_period =
+    8 << (RC.mac[module_idP]->common_channels[CC_id].
+          pmch_Config[0]->mch_SchedulingPeriod_r9);
+  unsigned char mcch_sdu_length;
+  unsigned char header_len_mcch = 0, header_len_msi =
+                                    0, header_len_mtch = 0, header_len_mtch_temp =
+                                          0, header_len_mcch_temp = 0, header_len_msi_temp = 0;
+  int ii = 0, msi_pos = 0;
+  int mcch_mcs = -1;
+  uint16_t TBS, j = -1, padding = 0, post_padding = 0;
+  mac_rlc_status_resp_t rlc_status;
+  int num_mtch;
+  int msi_length, i, k;
+  unsigned char sdu_lcids[11], num_sdus = 0, offset = 0;
+  uint16_t sdu_lengths[11], sdu_length_total = 0;
+  unsigned char mch_buffer[MAX_DLSCH_PAYLOAD_BYTES];  // check the max value, this is for dlsch only
+  COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
+  cc->MCH_pdu.Pdu_size = 0;
+
+  for (i = 0; i < cc->num_active_mbsfn_area; i++) {
+    // assume, that there is always a mapping
+    if ((j = get_mbsfn_sf_alloction(module_idP, CC_id, i)) == -1) {
+      return 0;
+    }
 
-    for (i = 0; i < cc->num_active_mbsfn_area; i++) {
-	// assume, that there is always a mapping
-	if ((j = get_mbsfn_sf_alloction(module_idP, CC_id, i)) == -1) {
-	    return 0;
-	}
-
-	mbsfn_period =
-	    1 << (cc->mbsfn_SubframeConfig[j]->radioframeAllocationPeriod);
-	mcch_period =
-	    32 << (cc->mbsfn_AreaInfo[i]->
-		   mcch_Config_r9.mcch_RepetitionPeriod_r9);
-	msi_pos = 0;
-	ii = 0;
-	LOG_D(MAC,
-	      "[eNB %d] CC_id %d Frame %d subframeP %d : Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d)\n",
-	      module_idP, CC_id, frameP, subframeP, i,
-	      cc->num_active_mbsfn_area, j, cc->num_sf_allocation_pattern,
-	      mbsfn_period, mcch_period);
-
-
-	switch (cc->mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) {
-	case 0:
-	    mcch_mcs = 2;
-	    break;
-
-	case 1:
-	    mcch_mcs = 7;
-	    break;
-
-	case 2:
-	    mcch_mcs = 13;
-	    break;
-
-	case 3:
-	    mcch_mcs = 19;
-	    break;
-	}
-
-	// 1st: Check the MBSFN subframes from SIB2 info (SF allocation pattern i, max 8 non-overlapping patterns exist)
-	if (frameP % mbsfn_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset) {	// MBSFN frameP
-	    if (cc->mbsfn_SubframeConfig[j]->subframeAllocation.present == LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {	// one-frameP format
-
-		//  Find the first subframeP in this MCH to transmit MSI
-		if (frameP % mch_scheduling_period ==
-		    cc->mbsfn_SubframeConfig[j]->
-		    radioframeAllocationOffset) {
-		    while (ii == 0) {
-			ii = cc->
-			    mbsfn_SubframeConfig[j]->subframeAllocation.
-			    choice.oneFrame.buf[0] & (0x80 >> msi_pos);
-			msi_pos++;
-		    }
-
-		    LOG_D(MAC,
-			  "[eNB %d] CC_id %d Frame %d subframeP %d : sync area %d sf allocation pattern %d sf alloc %x msi pos is %d \n",
-			  module_idP, CC_id, frameP, subframeP, i, j,
-			  cc->mbsfn_SubframeConfig[j]->
-			  subframeAllocation.choice.oneFrame.buf[0],
-			  msi_pos);
-		}
-		// Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
-		switch (subframeP) {
-		case 1:
-		    if (cc->tdd_Config == NULL) {
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF1) ==
-			    MBSFN_FDD_SF1) {
-			    if (msi_pos == 1) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF1) ==
-				 MBSFN_FDD_SF1)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 2:
-		    if (cc->tdd_Config == NULL) {
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF2) ==
-			    MBSFN_FDD_SF2) {
-			    if (msi_pos == 2) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF2) ==
-				 MBSFN_FDD_SF2)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 3:
-		    if (cc->tdd_Config != NULL) {	// TDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_TDD_SF3) ==
-			    MBSFN_TDD_SF3) {
-			    if (msi_pos == 1) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_TDD_SF3) ==
-				 MBSFN_TDD_SF3)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    } else {	// FDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF3) ==
-			    MBSFN_FDD_SF3) {
-			    if (msi_pos == 3) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF3) ==
-				 MBSFN_FDD_SF3)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 4:
-		    if (cc->tdd_Config != NULL) {
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_TDD_SF4) ==
-			    MBSFN_TDD_SF4) {
-			    if (msi_pos == 2) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_TDD_SF4) ==
-				 MBSFN_TDD_SF4)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 6:
-		    if (cc->tdd_Config == NULL) {
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF6) ==
-			    MBSFN_FDD_SF6) {
-			    if (msi_pos == 4) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF6) ==
-				 MBSFN_FDD_SF6)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 7:
-		    if (cc->tdd_Config != NULL) {	// TDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_TDD_SF7) ==
-			    MBSFN_TDD_SF7) {
-			    if (msi_pos == 3) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_TDD_SF7) ==
-				 MBSFN_TDD_SF7)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    } else {	// FDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF7) ==
-			    MBSFN_FDD_SF7) {
-			    if (msi_pos == 5) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF7) ==
-				 MBSFN_FDD_SF7)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 8:
-		    if (cc->tdd_Config != NULL) {	//TDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_TDD_SF8) ==
-			    MBSFN_TDD_SF8) {
-			    if (msi_pos == 4) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_TDD_SF8) ==
-				 MBSFN_TDD_SF8)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    } else {	// FDD
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_FDD_SF8) ==
-			    MBSFN_FDD_SF8) {
-			    if (msi_pos == 6) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_FDD_SF8) ==
-				 MBSFN_FDD_SF8)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-
-		case 9:
-		    if (cc->tdd_Config != NULL) {
-			if ((cc->
-			     mbsfn_SubframeConfig[j]->subframeAllocation.
-			     choice.oneFrame.buf[0] & MBSFN_TDD_SF9) ==
-			    MBSFN_TDD_SF9) {
-			    if (msi_pos == 5) {
-				msi_flag = 1;
-			    }
-
-			    if ((frameP % mcch_period ==
-				 cc->mbsfn_AreaInfo[i]->
-				 mcch_Config_r9.mcch_Offset_r9)
-				&&
-				((cc->mbsfn_AreaInfo[i]->
-				  mcch_Config_r9.sf_AllocInfo_r9.
-				  buf[0] & MBSFN_TDD_SF9) ==
-				 MBSFN_TDD_SF9)) {
-				mcch_flag = 1;
-			    }
-
-			    mtch_flag = 1;
-			}
-		    }
-
-		    break;
-		}		// end switch
-
-		// sf allocation is non-overlapping
-		if ((msi_flag == 1) || (mcch_flag == 1)
-		    || (mtch_flag == 1)) {
-		    LOG_D(MAC,
-			  "[eNB %d] CC_id %d Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
-			  module_idP, CC_id, frameP, subframeP, i, j,
-			  msi_flag, mcch_flag, mtch_flag);
-		    break;
-		}
-	    } else {		// four-frameP format
-	    }
-	}
-    }				// end of for loop
-
-    cc->msi_active = 0;
-    cc->mcch_active = 0;
-    cc->mtch_active = 0;
-
-    // Calculate the mcs
-    if ((msi_flag == 1) || (mcch_flag == 1)) {
-	cc->MCH_pdu.mcs = mcch_mcs;
-    } else if (mtch_flag == 1) {	// only MTCH in this subframeP
-	cc->MCH_pdu.mcs = cc->pmch_Config[0]->dataMCS_r9;
+    mbsfn_period =
+      1 << (cc->mbsfn_SubframeConfig[j]->radioframeAllocationPeriod);
+    mcch_period =
+      32 << (cc->mbsfn_AreaInfo[i]->
+             mcch_Config_r9.mcch_RepetitionPeriod_r9);
+    msi_pos = 0;
+    ii = 0;
+    LOG_D(MAC,
+          "[eNB %d] CC_id %d Frame %d subframeP %d : Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d)\n",
+          module_idP, CC_id, frameP, subframeP, i,
+          cc->num_active_mbsfn_area, j, cc->num_sf_allocation_pattern,
+          mbsfn_period, mcch_period);
+
+    switch (cc->mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) {
+      case 0:
+        mcch_mcs = 2;
+        break;
+
+      case 1:
+        mcch_mcs = 7;
+        break;
+
+      case 2:
+        mcch_mcs = 13;
+        break;
+
+      case 3:
+        mcch_mcs = 19;
+        break;
     }
-    // 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC
-
-    // there is MSI (MCH Scheduling Info)
-    if (msi_flag == 1) {
-	// Create MSI here
-	uint16_t msi_control_element[29], *msi_ptr;
-
-	msi_ptr = &msi_control_element[0];
-	((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID;	//MCCH
-
-	if (mcch_flag == 1) {
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0;
-	} else {		// no mcch for this MSP
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7;	// stop value is 2047
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xff;
-	}
-
-	msi_ptr += sizeof(MSI_ELEMENT);
-
-	//Header for MTCHs
-	num_mtch = cc->mbms_SessionList[0]->list.count;
-
-	for (k = 0; k < num_mtch; k++) {	// loop for all session in this MCH (MCH[0]) at this moment
-	    ((MSI_ELEMENT *) msi_ptr)->lcid = cc->mbms_SessionList[0]->list.array[k]->logicalChannelIdentity_r9;	//mtch_lcid;
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;	// last subframeP of this mtch (only one mtch now)
-	    ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xB;
-	    msi_ptr += sizeof(MSI_ELEMENT);
-	}
-
-	msi_length = msi_ptr - msi_control_element;
-
-	if (msi_length < 128) {
-	    header_len_msi = 2;
-	} else {
-	    header_len_msi = 3;
-	}
-
-	LOG_D(MAC,
-	      "[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes \n",
-	      module_idP, CC_id, frameP, msi_length);
-	//LOG_D(MAC,"Scheduler: MSI is transmitted in this subframeP \n" );
-
-	//   LOG_D(MAC,"Scheduler: MSI length is %d bytes\n",msi_length);
-	// Store MSI data to mch_buffer[0]
-	memcpy((char *) &mch_buffer[sdu_length_total],
-	       msi_control_element, msi_length);
-
-	sdu_lcids[num_sdus] = MCH_SCHDL_INFO;
-	sdu_lengths[num_sdus] = msi_length;
-	sdu_length_total += sdu_lengths[num_sdus];
-	LOG_I(MAC, "[eNB %d] CC_id %d Create %d bytes for MSI\n",
-	      module_idP, CC_id, sdu_lengths[num_sdus]);
-	num_sdus++;
-	cc->msi_active = 1;
+
+    // 1st: Check the MBSFN subframes from SIB2 info (SF allocation pattern i, max 8 non-overlapping patterns exist)
+    if (frameP % mbsfn_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP
+      if (cc->mbsfn_SubframeConfig[j]->subframeAllocation.present == LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {  // one-frameP format
+
+        //  Find the first subframeP in this MCH to transmit MSI
+        if (frameP % mch_scheduling_period ==
+            cc->mbsfn_SubframeConfig[j]->
+            radioframeAllocationOffset) {
+          while (ii == 0) {
+            ii = cc->
+                 mbsfn_SubframeConfig[j]->subframeAllocation.
+                 choice.oneFrame.buf[0] & (0x80 >> msi_pos);
+            msi_pos++;
+          }
+
+          LOG_D(MAC,
+                "[eNB %d] CC_id %d Frame %d subframeP %d : sync area %d sf allocation pattern %d sf alloc %x msi pos is %d \n",
+                module_idP, CC_id, frameP, subframeP, i, j,
+                cc->mbsfn_SubframeConfig[j]->
+                subframeAllocation.choice.oneFrame.buf[0],
+                msi_pos);
+        }
+
+        // Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
+        switch (subframeP) {
+          case 1:
+            if (cc->tdd_Config == NULL) {
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF1) ==
+                  MBSFN_FDD_SF1) {
+                if (msi_pos == 1) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF1) ==
+                     MBSFN_FDD_SF1)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 2:
+            if (cc->tdd_Config == NULL) {
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF2) ==
+                  MBSFN_FDD_SF2) {
+                if (msi_pos == 2) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF2) ==
+                     MBSFN_FDD_SF2)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 3:
+            if (cc->tdd_Config != NULL) { // TDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_TDD_SF3) ==
+                  MBSFN_TDD_SF3) {
+                if (msi_pos == 1) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_TDD_SF3) ==
+                     MBSFN_TDD_SF3)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            } else {  // FDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF3) ==
+                  MBSFN_FDD_SF3) {
+                if (msi_pos == 3) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF3) ==
+                     MBSFN_FDD_SF3)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 4:
+            if (cc->tdd_Config != NULL) {
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_TDD_SF4) ==
+                  MBSFN_TDD_SF4) {
+                if (msi_pos == 2) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_TDD_SF4) ==
+                     MBSFN_TDD_SF4)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 6:
+            if (cc->tdd_Config == NULL) {
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF6) ==
+                  MBSFN_FDD_SF6) {
+                if (msi_pos == 4) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF6) ==
+                     MBSFN_FDD_SF6)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 7:
+            if (cc->tdd_Config != NULL) { // TDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_TDD_SF7) ==
+                  MBSFN_TDD_SF7) {
+                if (msi_pos == 3) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_TDD_SF7) ==
+                     MBSFN_TDD_SF7)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            } else {  // FDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF7) ==
+                  MBSFN_FDD_SF7) {
+                if (msi_pos == 5) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF7) ==
+                     MBSFN_FDD_SF7)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 8:
+            if (cc->tdd_Config != NULL) { //TDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_TDD_SF8) ==
+                  MBSFN_TDD_SF8) {
+                if (msi_pos == 4) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_TDD_SF8) ==
+                     MBSFN_TDD_SF8)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            } else {  // FDD
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_FDD_SF8) ==
+                  MBSFN_FDD_SF8) {
+                if (msi_pos == 6) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_FDD_SF8) ==
+                     MBSFN_FDD_SF8)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+
+          case 9:
+            if (cc->tdd_Config != NULL) {
+              if ((cc->
+                   mbsfn_SubframeConfig[j]->subframeAllocation.
+                   choice.oneFrame.buf[0] & MBSFN_TDD_SF9) ==
+                  MBSFN_TDD_SF9) {
+                if (msi_pos == 5) {
+                  msi_flag = 1;
+                }
+
+                if ((frameP % mcch_period ==
+                     cc->mbsfn_AreaInfo[i]->
+                     mcch_Config_r9.mcch_Offset_r9)
+                    &&
+                    ((cc->mbsfn_AreaInfo[i]->
+                      mcch_Config_r9.sf_AllocInfo_r9.
+                      buf[0] & MBSFN_TDD_SF9) ==
+                     MBSFN_TDD_SF9)) {
+                  mcch_flag = 1;
+                }
+
+                mtch_flag = 1;
+              }
+            }
+
+            break;
+        }   // end switch
+
+        // sf allocation is non-overlapping
+        if ((msi_flag == 1) || (mcch_flag == 1)
+            || (mtch_flag == 1)) {
+          LOG_D(MAC,
+                "[eNB %d] CC_id %d Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
+                module_idP, CC_id, frameP, subframeP, i, j,
+                msi_flag, mcch_flag, mtch_flag);
+          break;
+        }
+      } else {    // four-frameP format
+      }
     }
-    // there is MCCH
+  }       // end of for loop
+
+  cc->msi_active = 0;
+  cc->mcch_active = 0;
+  cc->mtch_active = 0;
+
+  // Calculate the mcs
+  if ((msi_flag == 1) || (mcch_flag == 1)) {
+    cc->MCH_pdu.mcs = mcch_mcs;
+  } else if (mtch_flag == 1) {  // only MTCH in this subframeP
+    cc->MCH_pdu.mcs = cc->pmch_Config[0]->dataMCS_r9;
+  }
+
+  // 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC
+
+  // there is MSI (MCH Scheduling Info)
+  if (msi_flag == 1) {
+    // Create MSI here
+    uint16_t msi_control_element[29], *msi_ptr;
+    msi_ptr = &msi_control_element[0];
+    ((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID; //MCCH
+
     if (mcch_flag == 1) {
-	LOG_D(MAC,
-	      "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
-	      module_idP, CC_id, frameP, subframeP, i, j);
-
-	mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0], 
-					   i);	// this is the mbsfn sync area index
-
-	if (mcch_sdu_length > 0) {
-	    LOG_D(MAC,
-		  "[eNB %d] CC_id %d Frame %d subframeP %d : MCCH->MCH, Received %d bytes from RRC \n",
-		  module_idP, CC_id, frameP, subframeP, mcch_sdu_length);
-
-	    header_len_mcch = 2;
-
-	    if (cc->tdd_Config != NULL) {
-		LOG_D(MAC,
-		      "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n",
-		      module_idP, CC_id, frameP, subframeP,
-		      mcch_sdu_length, mcch_mcs);
-	    } else {
-		LOG_I(MAC,
-		      "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (FDD) for MCCH message %d bytes (mcs %d)\n",
-		      module_idP, CC_id, frameP, subframeP,
-		      mcch_sdu_length, mcch_mcs);
-	    }
-
-	    cc->mcch_active = 1;
-
-	    memcpy((char *) &mch_buffer[sdu_length_total],
-		   &cc->MCCH_pdu.payload[0], mcch_sdu_length);
-	    sdu_lcids[num_sdus] = MCCH_LCHANID;
-	    sdu_lengths[num_sdus] = mcch_sdu_length;
-
-	    if (sdu_lengths[num_sdus] > 128) {
-		header_len_mcch = 3;
-	    }
-
-	    sdu_length_total += sdu_lengths[num_sdus];
-	    LOG_D(MAC,
-		  "[eNB %d] CC_id %d Got %d bytes for MCCH from RRC \n",
-		  module_idP, CC_id, sdu_lengths[num_sdus]);
-	    num_sdus++;
-	}
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0;
+    } else {    // no mcch for this MSP
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7; // stop value is 2047
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xff;
     }
 
-    TBS =
-	get_TBS_DL(cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
+    msi_ptr += sizeof(MSI_ELEMENT);
+    //Header for MTCHs
+    num_mtch = cc->mbms_SessionList[0]->list.count;
+
+    for (k = 0; k < num_mtch; k++) {  // loop for all session in this MCH (MCH[0]) at this moment
+      ((MSI_ELEMENT *) msi_ptr)->lcid = cc->mbms_SessionList[0]->list.array[k]->logicalChannelIdentity_r9;  //mtch_lcid;
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now)
+      ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xB;
+      msi_ptr += sizeof(MSI_ELEMENT);
+    }
+
+    msi_length = msi_ptr - msi_control_element;
+
+    if (msi_length < 128) {
+      header_len_msi = 2;
+    } else {
+      header_len_msi = 3;
+    }
+
+    LOG_D(MAC,
+          "[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes \n",
+          module_idP, CC_id, frameP, msi_length);
+    //LOG_D(MAC,"Scheduler: MSI is transmitted in this subframeP \n" );
+    //   LOG_D(MAC,"Scheduler: MSI length is %d bytes\n",msi_length);
+    // Store MSI data to mch_buffer[0]
+    memcpy((char *) &mch_buffer[sdu_length_total],
+           msi_control_element, msi_length);
+    sdu_lcids[num_sdus] = MCH_SCHDL_INFO;
+    sdu_lengths[num_sdus] = msi_length;
+    sdu_length_total += sdu_lengths[num_sdus];
+    LOG_I(MAC, "[eNB %d] CC_id %d Create %d bytes for MSI\n",
+          module_idP, CC_id, sdu_lengths[num_sdus]);
+    num_sdus++;
+    cc->msi_active = 1;
+  }
+
+  // there is MCCH
+  if (mcch_flag == 1) {
+    LOG_D(MAC,
+          "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
+          module_idP, CC_id, frameP, subframeP, i, j);
+    mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
+                                       i);  // this is the mbsfn sync area index
+
+    if (mcch_sdu_length > 0) {
+      LOG_D(MAC,
+            "[eNB %d] CC_id %d Frame %d subframeP %d : MCCH->MCH, Received %d bytes from RRC \n",
+            module_idP, CC_id, frameP, subframeP, mcch_sdu_length);
+      header_len_mcch = 2;
+
+      if (cc->tdd_Config != NULL) {
+        LOG_D(MAC,
+              "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n",
+              module_idP, CC_id, frameP, subframeP,
+              mcch_sdu_length, mcch_mcs);
+      } else {
+        LOG_I(MAC,
+              "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (FDD) for MCCH message %d bytes (mcs %d)\n",
+              module_idP, CC_id, frameP, subframeP,
+              mcch_sdu_length, mcch_mcs);
+      }
+
+      cc->mcch_active = 1;
+      memcpy((char *) &mch_buffer[sdu_length_total],
+             &cc->MCCH_pdu.payload[0], mcch_sdu_length);
+      sdu_lcids[num_sdus] = MCCH_LCHANID;
+      sdu_lengths[num_sdus] = mcch_sdu_length;
+
+      if (sdu_lengths[num_sdus] > 128) {
+        header_len_mcch = 3;
+      }
+
+      sdu_length_total += sdu_lengths[num_sdus];
+      LOG_D(MAC,
+            "[eNB %d] CC_id %d Got %d bytes for MCCH from RRC \n",
+            module_idP, CC_id, sdu_lengths[num_sdus]);
+      num_sdus++;
+    }
+  }
+
+  TBS =
+    get_TBS_DL(cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
-    // do not let mcch and mtch multiplexing when relaying is active
-    // for sync area 1, so not transmit data
-    //if ((i == 0) && ((RC.mac[module_idP]->MBMS_flag != multicast_relay) || (RC.mac[module_idP]->mcch_active==0))) {
+  // do not let mcch and mtch multiplexing when relaying is active
+  // for sync area 1, so not transmit data
+  //if ((i == 0) && ((RC.mac[module_idP]->MBMS_flag != multicast_relay) || (RC.mac[module_idP]->mcch_active==0))) {
 #endif
 
-    // there is MTCHs, loop if there are more than 1
-    if (mtch_flag == 1) {
-	// Calculate TBS
-	/* if ((msi_flag==1) || (mcch_flag==1)) {
-	   TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL);
-	   }
-	   else { // only MTCH in this subframeP
-	   TBS = mac_xface->get_TBS(RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL);
-	   }
-
-	   // get MTCH data from RLC (like for DTCH)
-	   LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframe %d: Schedule MTCH (area %d, sfAlloc %d)\n",Mod_id,CC_id,frame,subframe,i,j);
-
-	   header_len_mtch = 3;
-	   LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
-	   Mod_id,CC_id,frame,MTCH,TBS,
-	   TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
-
-	   rlc_status = mac_rlc_status_ind(Mod_id,frame,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG,
-	   TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
-	   printf("frame %d, subframe %d,  rlc_status.bytes_in_buffer is %d\n",frame,subframe, rlc_status.bytes_in_buffer);
-
-	 */
-
-	// get MTCH data from RLC (like for DTCH)
-	LOG_D(MAC,
-	      "[eNB %d] CC_id %d Frame %d subframeP %d: Schedule MTCH (area %d, sfAlloc %d)\n",
-	      module_idP, CC_id, frameP, subframeP, i, j);
-
-	header_len_mtch = 3;
-	LOG_D(MAC,
-	      "[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
-	      module_idP, CC_id, frameP, MTCH, TBS,
-	      TBS - header_len_mcch - header_len_msi - sdu_length_total -
-	      header_len_mtch);
-
-	rlc_status =
-	    mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
-			       module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
-			       MTCH,
-			       TBS - header_len_mcch - header_len_msi -
-			       sdu_length_total - header_len_mtch
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                                    ,0, 0
-#endif
-                                    );
-
-	LOG_D(MAC,
-	      "e-MBMS log channel %u frameP %d, subframeP %d,  rlc_status.bytes_in_buffer is %d\n",
-	      MTCH, frameP, subframeP, rlc_status.bytes_in_buffer);
-
-	if (rlc_status.bytes_in_buffer > 0) {
-	    LOG_I(MAC,
-		  "[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d)\n",
-		  module_idP, CC_id, frameP,
-		  TBS - header_len_mcch - header_len_msi -
-		  sdu_length_total - header_len_mtch, header_len_mtch);
-
-	    sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES, MTCH, 0,	//not used
-						     (char *)
-						     &mch_buffer[sdu_length_total]
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                                ,0,
-                                 0
-#endif
-                                 );
+  // there is MTCHs, loop if there are more than 1
+  if (mtch_flag == 1) {
+    // Calculate TBS
+    /* if ((msi_flag==1) || (mcch_flag==1)) {
+       TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL);
+       }
+       else { // only MTCH in this subframeP
+       TBS = mac_xface->get_TBS(RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL);
+       }
 
+       // get MTCH data from RLC (like for DTCH)
+       LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframe %d: Schedule MTCH (area %d, sfAlloc %d)\n",Mod_id,CC_id,frame,subframe,i,j);
 
-	    //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO,  MTCH+(MAX_NUM_RB*(MAX_MOBILES_PER_ENB+1)), (char*)&mch_buffer[sdu_length_total]);
-	    LOG_I(MAC,
-		  "[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d\n",
-		  module_idP, CC_id, sdu_lengths[num_sdus], MTCH);
-	    cc->mtch_active = 1;
-	    sdu_lcids[num_sdus] = MTCH;
-	    sdu_length_total += sdu_lengths[num_sdus];
+       header_len_mtch = 3;
+       LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
+       Mod_id,CC_id,frame,MTCH,TBS,
+       TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
 
-	    if (sdu_lengths[num_sdus] < 128) {
-		header_len_mtch = 2;
-	    }
+       rlc_status = mac_rlc_status_ind(Mod_id,frame,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG,
+       TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
+       printf("frame %d, subframe %d,  rlc_status.bytes_in_buffer is %d\n",frame,subframe, rlc_status.bytes_in_buffer);
 
-	    num_sdus++;
-	} else {
-	    header_len_mtch = 0;
-	}
+     */
+    // get MTCH data from RLC (like for DTCH)
+    LOG_D(MAC,
+          "[eNB %d] CC_id %d Frame %d subframeP %d: Schedule MTCH (area %d, sfAlloc %d)\n",
+          module_idP, CC_id, frameP, subframeP, i, j);
+    header_len_mtch = 3;
+    LOG_D(MAC,
+          "[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
+          module_idP, CC_id, frameP, MTCH, TBS,
+          TBS - header_len_mcch - header_len_msi - sdu_length_total -
+          header_len_mtch);
+    rlc_status =
+      mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
+                         module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
+                         MTCH,
+                         TBS - header_len_mcch - header_len_msi -
+                         sdu_length_total - header_len_mtch
+#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+                         ,0, 0
+#endif
+                        );
+    LOG_D(MAC,
+          "e-MBMS log channel %u frameP %d, subframeP %d,  rlc_status.bytes_in_buffer is %d\n",
+          MTCH, frameP, subframeP, rlc_status.bytes_in_buffer);
+
+    if (rlc_status.bytes_in_buffer > 0) {
+      LOG_I(MAC,
+            "[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d)\n",
+            module_idP, CC_id, frameP,
+            TBS - header_len_mcch - header_len_msi -
+            sdu_length_total - header_len_mtch, header_len_mtch);
+      sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES, MTCH, 0, //not used
+                              (char *)
+                              &mch_buffer[sdu_length_total]
+#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+                              ,0,
+                              0
+#endif
+                                              );
+      //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO,  MTCH+(MAX_NUM_RB*(MAX_MOBILES_PER_ENB+1)), (char*)&mch_buffer[sdu_length_total]);
+      LOG_I(MAC,
+            "[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d\n",
+            module_idP, CC_id, sdu_lengths[num_sdus], MTCH);
+      cc->mtch_active = 1;
+      sdu_lcids[num_sdus] = MTCH;
+      sdu_length_total += sdu_lengths[num_sdus];
+
+      if (sdu_lengths[num_sdus] < 128) {
+        header_len_mtch = 2;
+      }
+
+      num_sdus++;
+    } else {
+      header_len_mtch = 0;
     }
+  }
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
-    //  }
+  //  }
 #endif
 
-    // FINAL STEP: Prepare and multiplexe MSI, MCCH and MTCHs
-    if ((sdu_length_total + header_len_msi + header_len_mcch +
-	 header_len_mtch) > 0) {
-	// Adjust the last subheader
-	/*                                 if ((msi_flag==1) || (mcch_flag==1)) {
-	   RC.mac[module_idP]->MCH_pdu.mcs = mcch_mcs;
-	   }
-	   else if (mtch_flag == 1) { // only MTCH in this subframeP
-	   RC.mac[module_idP]->MCH_pdu.mcs = RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9;
-	   }
-	 */
-	header_len_mtch_temp = header_len_mtch;
-	header_len_mcch_temp = header_len_mcch;
-	header_len_msi_temp = header_len_msi;
-
-	if (header_len_mtch > 0) {
-	    header_len_mtch = 1;	// remove Length field in the  subheader for the last PDU
-	} else if (header_len_mcch > 0) {
-	    header_len_mcch = 1;
-	} else {
-	    header_len_msi = 1;
-	}
-
-	// Calculate the padding
-	if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
-	     sdu_length_total) < 0) {
-	    LOG_E(MAC, "Error in building MAC PDU, TBS %d < PDU %d \n",
-		  TBS,
-		  header_len_mtch + header_len_mcch + header_len_msi +
-		  sdu_length_total);
-	    return 0;
-	} else
-	    if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
-		 sdu_length_total) <= 2) {
-	    padding =
-		(TBS - header_len_mtch - header_len_mcch - header_len_msi -
-		 sdu_length_total);
-	    post_padding = 0;
-	} else {		// using post_padding, give back the Length field of subheader  for the last PDU
-	    padding = 0;
-
-	    if (header_len_mtch > 0) {
-		header_len_mtch = header_len_mtch_temp;
-	    } else if (header_len_mcch > 0) {
-		header_len_mcch = header_len_mcch_temp;
-	    } else {
-		header_len_msi = header_len_msi_temp;
-	    }
-
-	    post_padding =
-		TBS - sdu_length_total - header_len_msi - header_len_mcch -
-		header_len_mtch;
-	}
-
-	// Generate the MAC Header for MCH
-	// here we use the function for DLSCH because DLSCH & MCH have the same Header structure
-	offset = generate_dlsch_header((unsigned char *) cc->MCH_pdu.payload, num_sdus, sdu_lengths, sdu_lcids, 255,	// no drx
-				       31,	// no timing advance
-				       NULL,	// no contention res id
-				       padding, post_padding);
-
-	cc->MCH_pdu.Pdu_size = TBS;
-	cc->MCH_pdu.sync_area = i;
-	cc->MCH_pdu.msi_active = cc->msi_active;
-	cc->MCH_pdu.mcch_active = cc->mcch_active;
-	cc->MCH_pdu.mtch_active = cc->mtch_active;
-	LOG_D(MAC,
-	      " MCS for this sf is %d (mcch active %d, mtch active %d)\n",
-	      cc->MCH_pdu.mcs, cc->MCH_pdu.mcch_active,
-	      cc->MCH_pdu.mtch_active);
-	LOG_I(MAC,
-	      "[eNB %d][MBMS USER-PLANE ] CC_id %d Generate header : sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,padding %d,post_padding %d (mcs %d, TBS %d), header MTCH %d, header MCCH %d, header MSI %d\n",
-	      module_idP, CC_id, sdu_length_total, num_sdus,
-	      sdu_lengths[0], sdu_lcids[0], offset, padding, post_padding,
-	      cc->MCH_pdu.mcs, TBS, header_len_mtch, header_len_mcch,
-	      header_len_msi);
-	// copy SDU to mch_pdu after the MAC Header
-	memcpy(&cc->MCH_pdu.payload[offset], mch_buffer, sdu_length_total);
-
-	// filling remainder of MCH with random data if necessery
-	for (j = 0; j < (TBS - sdu_length_total - offset); j++) {
-	    cc->MCH_pdu.payload[offset + sdu_length_total + j] =
-		(char) (taus() & 0xff);
-	}
-
-	/* Tracing of PDU is done on UE side */
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff,	// M_RNTI = 6 in wirehsark
-		      RC.mac[module_idP]->frame,
-		      RC.mac[module_idP]->subframe, 0, 0);
-	    LOG_D(OPT,
-		  "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
-		  module_idP, CC_id, frameP, TBS);
-	}
-
-	/*
-	   for (j=0;j<sdu_length_total;j++)
-	   printf("%2x.",RC.mac[module_idP]->MCH_pdu.payload[j+offset]);
-	   printf(" \n"); */
-	return 1;
+  // FINAL STEP: Prepare and multiplexe MSI, MCCH and MTCHs
+  if ((sdu_length_total + header_len_msi + header_len_mcch +
+       header_len_mtch) > 0) {
+    // Adjust the last subheader
+    /*                                 if ((msi_flag==1) || (mcch_flag==1)) {
+       RC.mac[module_idP]->MCH_pdu.mcs = mcch_mcs;
+       }
+       else if (mtch_flag == 1) { // only MTCH in this subframeP
+       RC.mac[module_idP]->MCH_pdu.mcs = RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9;
+       }
+     */
+    header_len_mtch_temp = header_len_mtch;
+    header_len_mcch_temp = header_len_mcch;
+    header_len_msi_temp = header_len_msi;
+
+    if (header_len_mtch > 0) {
+      header_len_mtch = 1;  // remove Length field in the  subheader for the last PDU
+    } else if (header_len_mcch > 0) {
+      header_len_mcch = 1;
     } else {
-	cc->MCH_pdu.Pdu_size = 0;
-	cc->MCH_pdu.sync_area = 0;
-	cc->MCH_pdu.msi_active = 0;
-	cc->MCH_pdu.mcch_active = 0;
-	cc->MCH_pdu.mtch_active = 0;
-	// for testing purpose, fill with random data
-	//for (j=0;j<(TBS-sdu_length_total-offset);j++)
-	//  RC.mac[module_idP]->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff);
-	return 0;
+      header_len_msi = 1;
+    }
+
+    // Calculate the padding
+    if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
+         sdu_length_total) < 0) {
+      LOG_E(MAC, "Error in building MAC PDU, TBS %d < PDU %d \n",
+            TBS,
+            header_len_mtch + header_len_mcch + header_len_msi +
+            sdu_length_total);
+      return 0;
+    } else if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
+                sdu_length_total) <= 2) {
+      padding =
+        (TBS - header_len_mtch - header_len_mcch - header_len_msi -
+         sdu_length_total);
+      post_padding = 0;
+    } else {    // using post_padding, give back the Length field of subheader  for the last PDU
+      padding = 0;
+
+      if (header_len_mtch > 0) {
+        header_len_mtch = header_len_mtch_temp;
+      } else if (header_len_mcch > 0) {
+        header_len_mcch = header_len_mcch_temp;
+      } else {
+        header_len_msi = header_len_msi_temp;
+      }
+
+      post_padding =
+        TBS - sdu_length_total - header_len_msi - header_len_mcch -
+        header_len_mtch;
     }
 
-    //this is for testing
+    // Generate the MAC Header for MCH
+    // here we use the function for DLSCH because DLSCH & MCH have the same Header structure
+    offset = generate_dlsch_header((unsigned char *) cc->MCH_pdu.payload, num_sdus, sdu_lengths, sdu_lcids, 255,  // no drx
+                                   31,  // no timing advance
+                                   NULL,  // no contention res id
+                                   padding, post_padding);
+    cc->MCH_pdu.Pdu_size = TBS;
+    cc->MCH_pdu.sync_area = i;
+    cc->MCH_pdu.msi_active = cc->msi_active;
+    cc->MCH_pdu.mcch_active = cc->mcch_active;
+    cc->MCH_pdu.mtch_active = cc->mtch_active;
+    LOG_D(MAC,
+          " MCS for this sf is %d (mcch active %d, mtch active %d)\n",
+          cc->MCH_pdu.mcs, cc->MCH_pdu.mcch_active,
+          cc->MCH_pdu.mtch_active);
+    LOG_I(MAC,
+          "[eNB %d][MBMS USER-PLANE ] CC_id %d Generate header : sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,padding %d,post_padding %d (mcs %d, TBS %d), header MTCH %d, header MCCH %d, header MSI %d\n",
+          module_idP, CC_id, sdu_length_total, num_sdus,
+          sdu_lengths[0], sdu_lcids[0], offset, padding, post_padding,
+          cc->MCH_pdu.mcs, TBS, header_len_mtch, header_len_mcch,
+          header_len_msi);
+    // copy SDU to mch_pdu after the MAC Header
+    memcpy(&cc->MCH_pdu.payload[offset], mch_buffer, sdu_length_total);
+
+    // filling remainder of MCH with random data if necessery
+    for (j = 0; j < (TBS - sdu_length_total - offset); j++) {
+      cc->MCH_pdu.payload[offset + sdu_length_total + j] =
+        (char) (taus() & 0xff);
+    }
+
+    /* Tracing of PDU is done on UE side */
+    trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI, 0xffff,  // M_RNTI = 6 in wirehsark
+              RC.mac[module_idP]->frame,
+              RC.mac[module_idP]->subframe, 0, 0);
     /*
-       if (mtch_flag == 1) {
-       //  LOG_D(MAC,"DUY: mch_buffer length so far is : %ld\n", &mch_buffer[sdu_length_total]-&mch_buffer[0]);
-       return 1;
-       }
-       else
-       return 0;
-     */
+       for (j=0;j<sdu_length_total;j++)
+       printf("%2x.",RC.mac[module_idP]->MCH_pdu.payload[j+offset]);
+       printf(" \n"); */
+    return 1;
+  } else {
+    cc->MCH_pdu.Pdu_size = 0;
+    cc->MCH_pdu.sync_area = 0;
+    cc->MCH_pdu.msi_active = 0;
+    cc->MCH_pdu.mcch_active = 0;
+    cc->MCH_pdu.mtch_active = 0;
+    // for testing purpose, fill with random data
+    //for (j=0;j<(TBS-sdu_length_total-offset);j++)
+    //  RC.mac[module_idP]->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff);
+    return 0;
+  }
+
+  //this is for testing
+  /*
+     if (mtch_flag == 1) {
+     //  LOG_D(MAC,"DUY: mch_buffer length so far is : %ld\n", &mch_buffer[sdu_length_total]-&mch_buffer[0]);
+     return 1;
+     }
+     else
+     return 0;
+   */
 }
 
 MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
-		     sub_frame_t subframeP)
-{
-    //  RC.mac[module_idP]->MCH_pdu.mcs=0;
-    //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
-//#warning "MCH pdu should take the CC_id index"
-    return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
+                     sub_frame_t subframeP) {
+  //  RC.mac[module_idP]->MCH_pdu.mcs=0;
+  //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
+  //#warning "MCH pdu should take the CC_id index"
+  return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
 }
 
 #endif
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 6d752eb3a65a4456cda58bbf085eadadda08a9b8..4aa09b59de5e8b5d69d7fe9cc94663fe70af066d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -85,11 +85,10 @@ uint8_t rb_table[34] = {
 };
 
 // This table hold the possible number of MTC repetition for CE ModeA
-const uint8_t pusch_repetition_Table8_2_36213[3][4]=
-{
-		{1 , 2 , 4 , 8 },
-		{1 , 4 , 8 , 16},
-		{1 , 4 , 16, 32}
+const uint8_t pusch_repetition_Table8_2_36213[3][4]= {
+  {1, 2, 4, 8 },
+  {1, 4, 8, 16},
+  {1, 4, 16, 32}
 };
 
 extern mui_t rrc_eNB_mui;
@@ -131,7 +130,6 @@ rx_sdu(const module_id_t enb_mod_idP,
   rrc_eNB_ue_context_t *ue_contextP = NULL;
   UE_sched_ctrl_t *UE_scheduling_control = NULL;
   UE_TEMPLATE *UE_template_ptr = NULL;
-
   /* Init */
   current_rnti = rntiP;
   UE_id = find_UE_id(enb_mod_idP, current_rnti);
@@ -143,20 +141,11 @@ rx_sdu(const module_id_t enb_mod_idP,
   memset(rx_lengths, 0, NB_RB_MAX * sizeof(unsigned short));
   start_meas(&mac->rx_ulsch_sdu);
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
-    LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n",
-          enb_mod_idP,
-          frameP,
-          current_rnti,
-          sdu_lenP);
-  }
+  trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
 
   if (UE_id != -1) {
     UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
     UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
     LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
           enb_mod_idP,
           harq_pid,
@@ -167,7 +156,6 @@ rx_sdu(const module_id_t enb_mod_idP,
           current_rnti,
           UE_id,
           ul_cqi);
-
     AssertFatal(UE_scheduling_control->round_UL[CC_idP][harq_pid] < 8, "round >= 8\n");
 
     if (sduP != NULL) {
@@ -182,7 +170,6 @@ rx_sdu(const module_id_t enb_mod_idP,
       UE_scheduling_control->ta_update = (UE_scheduling_control->ta_update * 3 + timing_advance) / 4;
       UE_scheduling_control->pusch_snr[CC_idP] = ul_cqi;
       UE_scheduling_control->ul_consecutive_errors = 0;
-
       first_rb = UE_template_ptr->first_rb_ul[harq_pid];
 
       if (UE_scheduling_control->ul_out_of_sync > 0) {
@@ -239,7 +226,7 @@ rx_sdu(const module_id_t enb_mod_idP,
       if (UE_scheduling_control->cdrx_configured == TRUE) {
         /* Synchronous UL HARQ */
         UE_scheduling_control->ul_synchronous_harq_timer[CC_idP][harq_pid] = 5;
-        /* 
+        /*
          * The NACK is programmed in n+4 subframes, so UE will have drxRetransmission running.
          * Setting ul_synchronous_harq_timer = 5 will trigger drxRetransmission timer.
          * Note: in case of asynchronous UL HARQ process restart here relevant RTT timer.
@@ -248,13 +235,11 @@ rx_sdu(const module_id_t enb_mod_idP,
       }
 
       first_rb = UE_template_ptr->first_rb_ul[harq_pid];
-
       /* Program NACK for PHICH */
       LOG_D(MAC, "Programming PHICH NACK for rnti %x harq_pid %d (first_rb %d)\n",
             current_rnti,
             harq_pid,
             first_rb);
-
       nfapi_hi_dci0_request_t *hi_dci0_req = NULL;
       uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP], subframeP);
       hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP + sf_ahead_dl) % 10];
@@ -309,22 +294,20 @@ rx_sdu(const module_id_t enb_mod_idP,
       if (ra->msg3_round >= mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) {
         cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
       } else {
-    	  if (ra->rach_resource_type > 0) {
-    		  cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);				// TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
-    	      }
-    	  else
-    	  {
-    		  // first_rb = UE_template_ptr->first_rb_ul[harq_pid]; // UE_id = -1 !!!!
-    		          ra->msg3_round++;
-    		          /* Prepare handling of retransmission */
-    		          get_Msg3allocret(&mac->common_channels[CC_idP],
-    		                           ra->Msg3_subframe,
-    		                           ra->Msg3_frame,
-    		                           &ra->Msg3_frame,
-    		                           &ra->Msg3_subframe);
-    		          // prepare handling of retransmission
-    		          add_msg3(enb_mod_idP, CC_idP, ra, frameP, subframeP);
-    	  }
+        if (ra->rach_resource_type > 0) {
+          cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);        // TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
+        } else {
+          // first_rb = UE_template_ptr->first_rb_ul[harq_pid]; // UE_id = -1 !!!!
+          ra->msg3_round++;
+          /* Prepare handling of retransmission */
+          get_Msg3allocret(&mac->common_channels[CC_idP],
+                           ra->Msg3_subframe,
+                           ra->Msg3_frame,
+                           &ra->Msg3_frame,
+                           &ra->Msg3_subframe);
+          // prepare handling of retransmission
+          add_msg3(enb_mod_idP, CC_idP, ra, frameP, subframeP);
+        }
       }
 
       /* TODO: program NACK for PHICH? */
@@ -400,7 +383,6 @@ rx_sdu(const module_id_t enb_mod_idP,
                 CC_idP,
                 rx_ces[i],
                 UE_template_ptr->phr_info);
-
           UE_template_ptr->phr_info_configured = 1;
           UE_scheduling_control->phr_received = 1;
         }
@@ -432,13 +414,11 @@ rx_sdu(const module_id_t enb_mod_idP,
                   CC_idP,
                   old_rnti,
                   old_UE_id);
-
             UE_id = old_UE_id;
             current_rnti = old_rnti;
             /* Clear timer */
             UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
             UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
             UE_scheduling_control->uplane_inactivity_timer = 0;
             UE_scheduling_control->ul_inactivity_timer = 0;
             UE_scheduling_control->ul_failure_timer = 0;
@@ -451,6 +431,7 @@ rx_sdu(const module_id_t enb_mod_idP,
                                      subframeP,
                                      old_rnti);
             }
+
             UE_template_ptr->ul_SR = 1;
             UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
             UE_list->UE_template[UE_PCCID(enb_mod_idP, UE_id)][UE_id].configured = 1;
@@ -475,51 +456,52 @@ rx_sdu(const module_id_t enb_mod_idP,
             if (RA_id != -1) {
               RA_t *ra = &(mac->common_channels[CC_idP].ra[RA_id]);
               int8_t ret = mac_rrc_data_ind(enb_mod_idP,
-                               CC_idP,
-                               frameP, subframeP,
-                               UE_id,
-                               old_rnti,
-                               DCCH,
-                               (uint8_t *) payload_ptr,
-                               rx_lengths[i],
-                               0
+                                            CC_idP,
+                                            frameP, subframeP,
+                                            UE_id,
+                                            old_rnti,
+                                            DCCH,
+                                            (uint8_t *) payload_ptr,
+                                            rx_lengths[i],
+                                            0
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                               ,ra->rach_resource_type > 0
+                                            ,ra->rach_resource_type > 0
 #endif
-                              );
+                                           );
+
               /* Received a new rnti */
               if (ret == 0) {
-              ra->state = MSGCRNTI;
-              LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Received rnti(Msg4)\n",
-                    enb_mod_idP,
-                    frameP,
-                    subframeP,
-                    CC_idP,
-                    old_rnti,
-                    old_UE_id);
-              UE_id = old_UE_id;
-              current_rnti = old_rnti;
-              ra->rnti = old_rnti;
-              ra->crnti_rrc_mui = rrc_eNB_mui-1;
-              ra->crnti_harq_pid = -1;
-
-              /* Clear timer */
-              UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
-              UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
-              UE_scheduling_control->uplane_inactivity_timer = 0;
-              UE_scheduling_control->ul_inactivity_timer = 0;
-              UE_scheduling_control->ul_failure_timer = 0;
+                ra->state = MSGCRNTI;
+                LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Received rnti(Msg4)\n",
+                      enb_mod_idP,
+                      frameP,
+                      subframeP,
+                      CC_idP,
+                      old_rnti,
+                      old_UE_id);
+                UE_id = old_UE_id;
+                current_rnti = old_rnti;
+                ra->rnti = old_rnti;
+                ra->crnti_rrc_mui = rrc_eNB_mui-1;
+                ra->crnti_harq_pid = -1;
+                /* Clear timer */
+                UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
+                UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
+                UE_scheduling_control->uplane_inactivity_timer = 0;
+                UE_scheduling_control->ul_inactivity_timer = 0;
+                UE_scheduling_control->ul_failure_timer = 0;
+
+                if (UE_scheduling_control->ul_out_of_sync > 0) {
+                  UE_scheduling_control->ul_out_of_sync = 0;
+                  mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti);
+                }
 
-              if (UE_scheduling_control->ul_out_of_sync > 0) {
-                UE_scheduling_control->ul_out_of_sync = 0;
-                mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti);
-              }
-              UE_template_ptr->ul_SR = 1;
-              UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
+                UE_template_ptr->ul_SR = 1;
+                UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
               } else {
                 cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
               }
+
               // break;
             }
           }
@@ -553,7 +535,6 @@ rx_sdu(const module_id_t enb_mod_idP,
             UE_template_ptr->ul_buffer_info[LCGID1] +
             UE_template_ptr->ul_buffer_info[LCGID2] +
             UE_template_ptr->ul_buffer_info[LCGID3];
-
           RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = (payload_ptr[0] & 0x3f);
 
           if (UE_id == UE_list->head) {
@@ -594,21 +575,19 @@ rx_sdu(const module_id_t enb_mod_idP,
           UE_template_ptr->ul_buffer_info[LCGID1] = BSR_TABLE[bsr1];
           UE_template_ptr->ul_buffer_info[LCGID2] = BSR_TABLE[bsr2];
           UE_template_ptr->ul_buffer_info[LCGID3] = BSR_TABLE[bsr3];
-
           UE_template_ptr->estimated_ul_buffer =
             UE_template_ptr->ul_buffer_info[LCGID0] +
             UE_template_ptr->ul_buffer_info[LCGID1] +
             UE_template_ptr->ul_buffer_info[LCGID2] +
             UE_template_ptr->ul_buffer_info[LCGID3];
-
           LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR. Size is LCGID0 = %u LCGID1 = %u LCGID2 = %u LCGID3 = %u\n",
-            enb_mod_idP,
-            CC_idP,
-            rx_ces[i],
-            UE_template_ptr->ul_buffer_info[LCGID0],
-            UE_template_ptr->ul_buffer_info[LCGID1],
-            UE_template_ptr->ul_buffer_info[LCGID2],
-            UE_template_ptr->ul_buffer_info[LCGID3]);
+                enb_mod_idP,
+                CC_idP,
+                rx_ces[i],
+                UE_template_ptr->ul_buffer_info[LCGID0],
+                UE_template_ptr->ul_buffer_info[LCGID1],
+                UE_template_ptr->ul_buffer_info[LCGID2],
+                UE_template_ptr->ul_buffer_info[LCGID3]);
 
           if (crnti_rx == 1) {
             LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received CRNTI.\n",
@@ -719,7 +698,6 @@ rx_sdu(const module_id_t enb_mod_idP,
                     frameP,
                     ra->rnti,
                     UE_id);
-
               UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
               UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
             }
@@ -815,7 +793,7 @@ rx_sdu(const module_id_t enb_mod_idP,
           mac_rlc_data_ind(enb_mod_idP, current_rnti, enb_mod_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, rx_lcids[i], (char *) payload_ptr, rx_lengths[i], 1, NULL);  //(unsigned int*)crc_status);
           UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]] += 1;
           UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]] += rx_lengths[i];
-        
+
           if (mac_eNB_get_rrc_status(enb_mod_idP, current_rnti) < RRC_RECONFIGURED) {
             UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer = 0;
           }
@@ -878,7 +856,6 @@ rx_sdu(const module_id_t enb_mod_idP,
               UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]] += rx_lengths[i];
               /* Clear uplane_inactivity_timer */
               UE_scheduling_control->uplane_inactivity_timer = 0;
-
               /* Reset RRC inactivity timer after uplane activity */
               ue_contextP = rrc_eNB_get_ue_context(RC.rrc[enb_mod_idP], current_rnti);
 
@@ -920,7 +897,7 @@ rx_sdu(const module_id_t enb_mod_idP,
     if (UE_scheduling_control->cdrx_configured == TRUE) {
       /* Synchronous UL HARQ */
       UE_scheduling_control->ul_synchronous_harq_timer[CC_idP][harq_pid] = 5;
-      /* 
+      /*
        * The ACK is programmed in n+4 subframes, so UE will have drxRetransmission running.
        * Setting ul_synchronous_harq_timer = 5 will trigger drxRetransmission timer.
        * Note: in case of asynchronous UL HARQ process restart here relevant RTT timer
@@ -934,11 +911,9 @@ rx_sdu(const module_id_t enb_mod_idP,
         current_rnti,
         harq_pid,
         first_rb);
-
   nfapi_hi_dci0_request_t *hi_dci0_req;
   uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP], subframeP);
   hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP+sf_ahead_dl)%10];
-
   nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
   nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci +
                                       hi_dci0_req_body->number_of_hi];
@@ -1143,13 +1118,11 @@ schedule_ulsch(module_id_t module_idP,
   COMMON_channels_t *cc = NULL;
   int sched_subframe;
   int sched_frame;
-
   /* Init */
   mac = RC.mac[module_idP];
   sli = &(mac->slice_info);
   memset(first_rb, 0, NFAPI_CC_MAX * sizeof(uint16_t));
   start_meas(&(mac->schedule_ulsch));
-
   sched_subframe = (subframeP + 4) % 10;
   sched_frame = frameP;
   cc = mac->common_channels;
@@ -1260,13 +1233,26 @@ schedule_ulsch(module_id_t module_idP,
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
     first_rb[CC_id] = (emtc_active[CC_id] == 1) ? 7 : 1;
 #else
+
     /* Note: the size of PUCCH is arbitrary, to be done properly. */
     switch (RC.eNB[module_idP][CC_id]->frame_parms.N_RB_DL) {
-    case 25:  first_rb[CC_id] = 1; break; // leave out first RB for PUCCH
-    case 50:  first_rb[CC_id] = 2; break; // leave out first RB for PUCCH
-    case 100: first_rb[CC_id] = 3; break; // leave out first RB for PUCCH
-    default: LOG_E(MAC, "nb RBs not handled, todo.\n"); exit(1);
+      case 25:
+        first_rb[CC_id] = 1;
+        break; // leave out first RB for PUCCH
+
+      case 50:
+        first_rb[CC_id] = 2;
+        break; // leave out first RB for PUCCH
+
+      case 100:
+        first_rb[CC_id] = 3;
+        break; // leave out first RB for PUCCH
+
+      default:
+        LOG_E(MAC, "nb RBs not handled, todo.\n");
+        exit(1);
     }
+
 #endif
     RA_t *ra_ptr = cc->ra;
 
@@ -1392,6 +1378,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
   /* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
   for (CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++) {
     n_rb_ul_tab[CC_id] = to_prb(cc[CC_id].ul_Bandwidth); // return total number of PRB
+
     /* HACK: let's remove the PUCCH from available RBs
      * we suppose PUCCH size is:
      * - for 25 RBs: 1 RB (top and bottom of ressource grid)
@@ -1402,15 +1389,27 @@ schedule_ulsch_rnti(module_id_t   module_idP,
      * so we only remove the top part of the resource grid.
      */
     switch (n_rb_ul_tab[CC_id]) {
-    case 25:  n_rb_ul_tab[CC_id] -= 1; break;
-    case 50:  n_rb_ul_tab[CC_id] -= 2; break;
-    case 100: n_rb_ul_tab[CC_id] -= 3; break;
-    default: LOG_E(MAC, "RBs setting not handled. Todo.\n"); exit(1);
+      case 25:
+        n_rb_ul_tab[CC_id] -= 1;
+        break;
+
+      case 50:
+        n_rb_ul_tab[CC_id] -= 2;
+        break;
+
+      case 100:
+        n_rb_ul_tab[CC_id] -= 3;
+        break;
+
+      default:
+        LOG_E(MAC, "RBs setting not handled. Todo.\n");
+        exit(1);
     }
+
     UE_list->first_rb_offset[CC_id][slice_idx] = cmin(n_rb_ul_tab[CC_id], sli->ul[slice_idx].first_rb);
   }
 
-  /* 
+  /*
    * ULSCH preprocessor: set UE_template->
    * pre_allocated_nb_rb_ul[slice_idx]
    * pre_assigned_mcs_ul
@@ -1427,7 +1426,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
     if (!ue_ul_slice_membership(module_idP, UE_id, slice_idx)) {
       continue;
     }
-    
+
     if (UE_list->UE_template[UE_PCCID(module_idP, UE_id)][UE_id].rach_resource_type > 0)  continue;
 
     // don't schedule if Msg5 is not received yet
@@ -1455,7 +1454,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
     for (int n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) {
       /* This is the actual CC_id in the list */
       CC_id = UE_list->ordered_ULCCids[n][UE_id];
-
       UE_template_ptr = &(UE_list->UE_template[CC_id][UE_id]);
       UE_sched_ctrl_ptr = &(UE_list->UE_sched_ctrl[UE_id]);
       harq_pid = subframe2harqpid(&cc[CC_id], sched_frame, sched_subframeP);
@@ -1497,7 +1495,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
               UE_sched_ctrl_ptr->ul_inactivity_timer,
               UE_sched_ctrl_ptr->ul_failure_timer,
               UE_sched_ctrl_ptr->cqi_req_timer);
-
         /* Reset the scheduling request */
         UE_template_ptr->ul_SR = 0;
         status = mac_eNB_get_rrc_status(module_idP, rnti);
@@ -1507,13 +1504,12 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           /* Be sure that there are some free RBs */
           if (first_rb_slice[CC_id] >= n_rb_ul_tab[CC_id]) {
             LOG_W(MAC, "[eNB %d] frame %d, subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
-              module_idP,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              CC_id);
-
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  CC_id);
             continue;
           }
 
@@ -1521,27 +1517,27 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           /* This test seems to be way too long, can we provide an optimization? */
           if (CCE_allocation_infeasible(module_idP, CC_id, 1, subframeP, aggregation, rnti)) {
             LOG_W(MAC, "[eNB %d] frame %d, subframe %d, UE %d/%x CC %d: not enough CCE\n",
-              module_idP,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              CC_id);
-
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  CC_id);
             continue;
           }
-          
+
           /* Handle the aperiodic CQI report */
           cqi_req = 0;
           LOG_D(MAC,"RRC Conenction status %d, cqi_timer %d\n",status,UE_sched_ctrl_ptr->cqi_req_timer);
+
           if (status >= RRC_CONNECTED && UE_sched_ctrl_ptr->cqi_req_timer > 30) {
             if (UE_sched_ctrl_ptr->cqi_received == 0) {
               if (NFAPI_MODE != NFAPI_MONOLITHIC) {
                 cqi_req = 0;
               } else {
                 cqi_req = 1;
-
                 LOG_D(MAC,"Setting CQI_REQ (timer %d)\n",UE_sched_ctrl_ptr->cqi_req_timer);
+
                 /* TDD: to be safe, do not ask CQI in special Subframes:36.213/7.2.3 CQI definition */
                 if (cc[CC_id].tdd_Config) {
                   switch (cc[CC_id].tdd_Config->subframeAssignment) {
@@ -1549,12 +1545,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                       if(subframeP == 1 || subframeP == 6) {
                         cqi_req=0;
                       }
+
                       break;
 
                     case 3:
                       if(subframeP == 1) {
                         cqi_req=0;
                       }
+
                       break;
 
                     default:
@@ -1583,7 +1581,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
            */
           snr = (5 * UE_sched_ctrl_ptr->pusch_snr[CC_id] - 640) / 10;
           target_snr = mac->puSch10xSnr / 10;
-
           /*
            * This assumes accumulated tpc
            * Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
@@ -1592,7 +1589,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
 
           if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
               ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { //frame wrap-around
-
             UE_template_ptr->pusch_tpc_tx_frame = frameP;
             UE_template_ptr->pusch_tpc_tx_subframe = subframeP;
 
@@ -1611,14 +1607,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
 
           if (tpc != 1) {
             LOG_D(MAC, "[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
-              module_idP,
-              frameP,
-              subframeP,
-              harq_pid,
-              tpc,
-              tpc_accumulated,
-              snr,
-              target_snr);
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  harq_pid,
+                  tpc,
+                  tpc_accumulated,
+                  snr,
+                  target_snr);
           }
 
           ndi = 1 - UE_template_ptr->oldNDI_UL[harq_pid]; // NDI: new data indicator
@@ -1632,8 +1628,8 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           if (UE_sched_ctrl_ptr->cdrx_configured) {
             UE_sched_ctrl_ptr->drx_inactivity_timer = 1; // reset drx inactivity timer when new transmission
             VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_INACTIVITY, (unsigned long) UE_sched_ctrl_ptr->drx_inactivity_timer);
-            UE_sched_ctrl_ptr->dci0_ongoing_timer = 1; // when set the UE_template_ptr->ul_SR cannot be set to 1, 
-                                                       // see definition for more information
+            UE_sched_ctrl_ptr->dci0_ongoing_timer = 1; // when set the UE_template_ptr->ul_SR cannot be set to 1,
+            // see definition for more information
           }
 
           if (UE_template_ptr->pre_allocated_rb_table_index_ul >= 0) {
@@ -1771,6 +1767,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                  1,  // repetition_number
                                                  (frameP * 10) + subframeP);
           }
+
 #endif
 
           if (dlsch_flag == 1) {
@@ -1877,6 +1874,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                0, // n_srs
                                                UE_template_ptr->TBS_UL[harq_pid]);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+
           /* This is a BL/CE UE allocation */
           if (UE_template_ptr->rach_resource_type > 0) {
             fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index],
@@ -1885,6 +1883,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                  1, // repetition_number
                                                  (frameP * 10) + subframeP);
           }
+
 #endif
 
           if(dlsch_flag == 1) {
@@ -1916,14 +1915,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           ul_req_tmp->sfn_sf = sched_frame<<4|sched_subframeP;
           ul_req_tmp->header.message_id = NFAPI_UL_CONFIG_REQUEST;
           LOG_D(MAC, "[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d cqi_req %d\n",
-            harq_pid,
-            frameP,
-            subframeP,
-            UE_id,
-            rnti,
-            sched_frame,
-            sched_subframeP,
-            cqi_req);
+                harq_pid,
+                frameP,
+                subframeP,
+                UE_id,
+                rnti,
+                sched_frame,
+                sched_subframeP,
+                cqi_req);
 
           /* HACK: RBs used by retransmission have to be reserved.
            * The current mechanism uses the notion of 'first_rb', so
@@ -1937,7 +1936,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
            */
           if (first_rb_slice[CC_id] < UE_template_ptr->first_rb_ul[harq_pid] + UE_template_ptr->nb_rb_ul[harq_pid])
             first_rb_slice[CC_id] = UE_template_ptr->first_rb_ul[harq_pid] + UE_template_ptr->nb_rb_ul[harq_pid];
-        }  // end of round > 0 
+        }  // end of round > 0
       }  // UE_is_to_be_scheduled
     }  // loop over all active CC_ids
   }  // loop over UE_ids
@@ -1977,8 +1976,8 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
   UE_list_t         *UE_list = &(eNB->UE_list);
   UE_TEMPLATE       *UE_template = NULL;
   UE_sched_ctrl_t     *UE_sched_ctrl = NULL;
-  uint8_t	    Total_Num_Rep_ULSCH,pusch_maxNumRepetitionCEmodeA_r13;
-  uint8_t	    UL_Scheduling_DCI_SF,UL_Scheduling_DCI_Frame_Even_Odd_Flag;							//TODO: To be removed after scheduler relaxation Task
+  uint8_t     Total_Num_Rep_ULSCH,pusch_maxNumRepetitionCEmodeA_r13;
+  uint8_t     UL_Scheduling_DCI_SF,UL_Scheduling_DCI_Frame_Even_Odd_Flag;             //TODO: To be removed after scheduler relaxation Task
 
   if (sched_subframeP < subframeP) {
     sched_frame++;
@@ -2046,367 +2045,362 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
             N_RB_UL);
       RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->estimated_ul_buffer;
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO, UE_template->estimated_ul_buffer);
-
       pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
       Total_Num_Rep_ULSCH = pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][UE_template->pusch_repetition_levels];
-      UL_Scheduling_DCI_SF = (40-4 - Total_Num_Rep_ULSCH)%10;										//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
-      UL_Scheduling_DCI_Frame_Even_Odd_Flag= ! (((40-4 - Total_Num_Rep_ULSCH)/10 )%2);							//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+      UL_Scheduling_DCI_SF = (40-4 - Total_Num_Rep_ULSCH)%10;                   //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+      UL_Scheduling_DCI_Frame_Even_Odd_Flag= ! (((40-4 - Total_Num_Rep_ULSCH)/10 )%2);              //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
 
       /* If frameP odd don't schedule */
-      if ((frameP&1) == UL_Scheduling_DCI_Frame_Even_Odd_Flag)										//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
-      {
+      if ((frameP&1) == UL_Scheduling_DCI_Frame_Even_Odd_Flag) {                  //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+        //if ((UE_is_to_be_scheduled(module_idP, CC_id, UE_id) > 0) && (subframeP == 5)) {
+        if ((UE_template->ul_SR > 0 || round_UL > 0 || status < RRC_CONNECTED) && (subframeP == UL_Scheduling_DCI_SF)) {
+          /*
+           * if there is information on bsr of DCCH, DTCH,
+           * or if there is UL_SR,
+           * or if there is a packet to retransmit,
+           * or we want to schedule a periodic feedback every frame
+           */
+          LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round_UL %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
+                module_idP,
+                harq_pid,
+                frameP,
+                subframeP,
+                UE_id,
+                rnti,
+                round_UL,
+                UE_template->ul_SR,
+                UE_sched_ctrl->ul_inactivity_timer,
+                UE_sched_ctrl->ul_failure_timer,
+                UE_sched_ctrl->cqi_req_timer);
+          /* Reset the scheduling request */
+          emtc_active[CC_id] = 1;
+          UE_template->ul_SR = 0;
+          status = mac_eNB_get_rrc_status(module_idP,rnti);
+          cqi_req = 0;
+          /* Power control: compute the expected ULSCH RX snr (for the stats) */
+          /* This is the normalized snr and this should be constant (regardless of mcs) */
+          snr = (5 * UE_sched_ctrl->pusch_snr[CC_id] - 640) / 10;
+          target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */
+          /* This assumes accumulated tpc */
+          /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
+          int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe;
 
+          if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
+              ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { // frame wrap-around
+            UE_template->pusch_tpc_tx_frame = frameP;
+            UE_template->pusch_tpc_tx_subframe = subframeP;
 
-      //if ((UE_is_to_be_scheduled(module_idP, CC_id, UE_id) > 0) && (subframeP == 5)) {
-      if ((UE_template->ul_SR > 0 || round_UL > 0 || status < RRC_CONNECTED) && (subframeP == UL_Scheduling_DCI_SF)) {
-        /*
-         * if there is information on bsr of DCCH, DTCH,
-         * or if there is UL_SR,
-         * or if there is a packet to retransmit,
-         * or we want to schedule a periodic feedback every frame
-         */
-        LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round_UL %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
-              module_idP,
-              harq_pid,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              round_UL,
-              UE_template->ul_SR,
-              UE_sched_ctrl->ul_inactivity_timer,
-              UE_sched_ctrl->ul_failure_timer,
-              UE_sched_ctrl->cqi_req_timer);
-        /* Reset the scheduling request */
-        emtc_active[CC_id] = 1;
-        UE_template->ul_SR = 0;
-        status = mac_eNB_get_rrc_status(module_idP,rnti);
-        cqi_req = 0;
-        /* Power control: compute the expected ULSCH RX snr (for the stats) */
-        /* This is the normalized snr and this should be constant (regardless of mcs) */
-        snr = (5 * UE_sched_ctrl->pusch_snr[CC_id] - 640) / 10;
-        target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */
-        /* This assumes accumulated tpc */
-        /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
-        int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe;
-
-        if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
-            ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { // frame wrap-around
-          UE_template->pusch_tpc_tx_frame = frameP;
-          UE_template->pusch_tpc_tx_subframe = subframeP;
-
-          if (snr > target_snr + 4) {
-            tpc = 0; //-1
-            UE_sched_ctrl->tpc_accumulated[CC_id]--;
-          } else if (snr < target_snr - 4) {
-            tpc = 2; //+1
-            UE_sched_ctrl->tpc_accumulated[CC_id]++;
+            if (snr > target_snr + 4) {
+              tpc = 0; //-1
+              UE_sched_ctrl->tpc_accumulated[CC_id]--;
+            } else if (snr < target_snr - 4) {
+              tpc = 2; //+1
+              UE_sched_ctrl->tpc_accumulated[CC_id]++;
+            } else {
+              tpc = 1; //0
+            }
           } else {
             tpc = 1; //0
           }
-        } else {
-          tpc = 1; //0
-        }
 
-        if (tpc != 1) {
-          LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
-                module_idP,
-                frameP,
-                subframeP,
-                harq_pid,
-                tpc,
-                UE_sched_ctrl->tpc_accumulated[CC_id],
-                snr,
-                target_snr);
-        }
+          if (tpc != 1) {
+            LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  harq_pid,
+                  tpc,
+                  UE_sched_ctrl->tpc_accumulated[CC_id],
+                  snr,
+                  target_snr);
+          }
 
-        /* New transmission */
-        if (round_UL == 0) {
-          ndi = 1 - UE_template->oldNDI_UL[harq_pid];
-          UE_template->oldNDI_UL[harq_pid] = ndi;
-          UE_template->mcs_UL[harq_pid] = 4;
-          UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid], 6);
-          UE_list->eNB_UE_stats[CC_id][UE_id].snr = snr;
-          UE_list->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1 = 4;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = UE_template->mcs_UL[harq_pid];
-          UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += 6;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS = UE_template->TBS_UL[harq_pid];
-          T(T_ENB_MAC_UE_UL_SCHEDULE,
-            T_INT(module_idP),
-            T_INT(CC_id),
-            T_INT(rnti),
-            T_INT(frameP),
-            T_INT(subframeP),
-            T_INT(harq_pid),
-            T_INT(UE_template->mcs_UL[harq_pid]),
-            T_INT(0),
-            T_INT(6),
-            T_INT(UE_template->TBS_UL[harq_pid]),
-            T_INT(ndi));
-          /* Store for possible retransmission */
-          UE_template->nb_rb_ul[harq_pid]    = 6;
-          UE_sched_ctrl->ul_scheduled |= (1 << harq_pid);
+          /* New transmission */
+          if (round_UL == 0) {
+            ndi = 1 - UE_template->oldNDI_UL[harq_pid];
+            UE_template->oldNDI_UL[harq_pid] = ndi;
+            UE_template->mcs_UL[harq_pid] = 4;
+            UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid], 6);
+            UE_list->eNB_UE_stats[CC_id][UE_id].snr = snr;
+            UE_list->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1 = 4;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = UE_template->mcs_UL[harq_pid];
+            UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += 6;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS = UE_template->TBS_UL[harq_pid];
+            T(T_ENB_MAC_UE_UL_SCHEDULE,
+              T_INT(module_idP),
+              T_INT(CC_id),
+              T_INT(rnti),
+              T_INT(frameP),
+              T_INT(subframeP),
+              T_INT(harq_pid),
+              T_INT(UE_template->mcs_UL[harq_pid]),
+              T_INT(0),
+              T_INT(6),
+              T_INT(UE_template->TBS_UL[harq_pid]),
+              T_INT(ndi));
+            /* Store for possible retransmission */
+            UE_template->nb_rb_ul[harq_pid]    = 6;
+            UE_sched_ctrl->ul_scheduled |= (1 << harq_pid);
+
+            if (UE_id == UE_list->head) {
+              VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, UE_sched_ctrl->ul_scheduled);
+            }
 
-          if (UE_id == UE_list->head) {
-            VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, UE_sched_ctrl->ul_scheduled);
+            /* Adjust total UL buffer status by TBS, wait for UL sdus to do final update */
+            UE_template->scheduled_ul_bytes += UE_template->TBS_UL[harq_pid];
+            LOG_D(MAC, "scheduled_ul_bytes, new %d\n", UE_template->scheduled_ul_bytes);
+            /* Cyclic shift for DMRS */
+            cshift = 0; // values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
+            /* save it for a potential retransmission */
+            UE_template->cshift[harq_pid] = cshift;
+            AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
+            LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
+            AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
+                        "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS MPDCCH Narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb (cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + hi_dci0_req->number_of_hi]);
+            memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
+            hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
+            hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
+            AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
+                        "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2; // already set above...
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB = 3
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = UE_template->pusch_repetition_levels;
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
+            hi_dci0_req->number_of_dci++;
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG. Request for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS mpdcch narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 cqi_req,
+                                                 cc,
+                                                 UE_template->physicalConfigDedicated,
+                                                 get_tmode(module_idP,CC_id,UE_id),
+                                                 eNB->ul_handle,
+                                                 rnti,
+                                                 UE_template->first_rb_ul[harq_pid], // resource_block_start
+                                                 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
+                                                 UE_template->mcs_UL[harq_pid],
+                                                 cshift, // cyclic_shift_2_for_drms
+                                                 0, // frequency_hopping_enabled_flag
+                                                 0, // frequency_hopping_bits
+                                                 UE_template->oldNDI_UL[harq_pid], // new_data_indication
+                                                 rvidx_tab[round_UL&3], // redundancy_version
+                                                 harq_pid, // harq_process_number
+                                                 0, // ul_tx_mode
+                                                 0, // current_tx_nb
+                                                 0, // n_srs
+                                                 UE_template->TBS_UL[harq_pid]
+                                                );
+            fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 UE_template->rach_resource_type > 2 ? 2 : 1,
+                                                 Total_Num_Rep_ULSCH, // total_number_of_repetitions
+                                                 1, // repetition_number
+                                                 (frameP * 10) + subframeP);
+            ul_req_tmp->number_of_pdus++;
+            eNB->ul_handle++;
+            add_ue_ulsch_info(module_idP,
+                              CC_id,
+                              UE_id,
+                              subframeP,
+                              S_UL_SCHEDULED);
+            LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
+                  module_idP,
+                  CC_id,
+                  frameP,
+                  subframeP,
+                  UE_id);
+          } else { // round_UL > 0 => retransmission
+            /* In LTE-M the UL HARQ process is asynchronous */
+            T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
+              T_INT(module_idP),
+              T_INT(CC_id),
+              T_INT(rnti),
+              T_INT(frameP),
+              T_INT(subframeP),
+              T_INT(harq_pid),
+              T_INT(UE_template->mcs_UL[harq_pid]),
+              T_INT(0),
+              T_INT(6),
+              T_INT(round_UL));
+            AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
+            LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
+            AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
+                        "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d,UESS MPDCCH Narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb(cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13-1);
+            hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]);
+            memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
+            hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
+            hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
+            AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
+                        "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB=3
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = 0;
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag  = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = rvidx_tab[round_UL&3];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = harq_pid;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
+            hi_dci0_req->number_of_dci++;
+            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 cqi_req,
+                                                 cc,
+                                                 UE_template->physicalConfigDedicated,
+                                                 get_tmode(module_idP,CC_id,UE_id),
+                                                 eNB->ul_handle,
+                                                 rnti,
+                                                 UE_template->first_rb_ul[harq_pid], // resource_block_start
+                                                 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
+                                                 UE_template->mcs_UL[harq_pid],
+                                                 cshift, // cyclic_shift_2_for_drms
+                                                 0, // frequency_hopping_enabled_flag
+                                                 0, // frequency_hopping_bits
+                                                 UE_template->oldNDI_UL[harq_pid], // new_data_indication
+                                                 rvidx_tab[round_UL&3], // redundancy_version
+                                                 harq_pid, // harq_process_number
+                                                 0, // ul_tx_mode
+                                                 0, // current_tx_nb
+                                                 0, // n_srs
+                                                 UE_template->TBS_UL[harq_pid]
+                                                );
+            fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 UE_template->rach_resource_type>2 ? 2 : 1,
+                                                 1, //total_number_of_repetitions
+                                                 1, //repetition_number
+                                                 (frameP * 10) + subframeP);
+            ul_req_tmp->number_of_pdus++;
+            eNB->ul_handle++;
           }
-
-          /* Adjust total UL buffer status by TBS, wait for UL sdus to do final update */
-          UE_template->scheduled_ul_bytes += UE_template->TBS_UL[harq_pid];
-          LOG_D(MAC, "scheduled_ul_bytes, new %d\n", UE_template->scheduled_ul_bytes);
-          /* Cyclic shift for DMRS */
-          cshift = 0; // values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
-          /* save it for a potential retransmission */
-          UE_template->cshift[harq_pid] = cshift;
-          AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
-          LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
-          AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
-                      "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS MPDCCH Narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb (cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + hi_dci0_req->number_of_hi]);
-          memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
-          hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
-          hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
-          AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
-                      "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2; // already set above...
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB = 3
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = UE_template->pusch_repetition_levels;
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
-          hi_dci0_req->number_of_dci++;
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG. Request for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS mpdcch narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               cqi_req,
-                                               cc,
-                                               UE_template->physicalConfigDedicated,
-                                               get_tmode(module_idP,CC_id,UE_id),
-                                               eNB->ul_handle,
-                                               rnti,
-                                               UE_template->first_rb_ul[harq_pid], // resource_block_start
-                                               UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
-                                               UE_template->mcs_UL[harq_pid],
-                                               cshift, // cyclic_shift_2_for_drms
-                                               0, // frequency_hopping_enabled_flag
-                                               0, // frequency_hopping_bits
-                                               UE_template->oldNDI_UL[harq_pid], // new_data_indication
-                                               rvidx_tab[round_UL&3], // redundancy_version
-                                               harq_pid, // harq_process_number
-                                               0, // ul_tx_mode
-                                               0, // current_tx_nb
-                                               0, // n_srs
-                                               UE_template->TBS_UL[harq_pid]
-                                              );
-          fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               UE_template->rach_resource_type > 2 ? 2 : 1,
-                                               Total_Num_Rep_ULSCH, // total_number_of_repetitions
-                                               1, // repetition_number
-                                               (frameP * 10) + subframeP);
-          ul_req_tmp->number_of_pdus++;
-          eNB->ul_handle++;
-          add_ue_ulsch_info(module_idP,
-                            CC_id,
-                            UE_id,
-                            subframeP,
-                            S_UL_SCHEDULED);
-          LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
-                module_idP,
-                CC_id,
-                frameP,
-                subframeP,
-                UE_id);
-        } else { // round_UL > 0 => retransmission
-          /* In LTE-M the UL HARQ process is asynchronous */
-          T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
-            T_INT(module_idP),
-            T_INT(CC_id),
-            T_INT(rnti),
-            T_INT(frameP),
-            T_INT(subframeP),
-            T_INT(harq_pid),
-            T_INT(UE_template->mcs_UL[harq_pid]),
-            T_INT(0),
-            T_INT(6),
-            T_INT(round_UL));
-          AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
-          LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
-          AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
-                      "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d,UESS MPDCCH Narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb(cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13-1);
-          hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]);
-          memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
-          hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
-          hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
-          AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
-                      "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB=3
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = 0;
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag  = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = rvidx_tab[round_UL&3];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = harq_pid;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
-          hi_dci0_req->number_of_dci++;
-          fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               cqi_req,
-                                               cc,
-                                               UE_template->physicalConfigDedicated,
-                                               get_tmode(module_idP,CC_id,UE_id),
-                                               eNB->ul_handle,
-                                               rnti,
-                                               UE_template->first_rb_ul[harq_pid], // resource_block_start
-                                               UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
-                                               UE_template->mcs_UL[harq_pid],
-                                               cshift, // cyclic_shift_2_for_drms
-                                               0, // frequency_hopping_enabled_flag
-                                               0, // frequency_hopping_bits
-                                               UE_template->oldNDI_UL[harq_pid], // new_data_indication
-                                               rvidx_tab[round_UL&3], // redundancy_version
-                                               harq_pid, // harq_process_number
-                                               0, // ul_tx_mode
-                                               0, // current_tx_nb
-                                               0, // n_srs
-                                               UE_template->TBS_UL[harq_pid]
-                                              );
-          fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               UE_template->rach_resource_type>2 ? 2 : 1,
-                                               1, //total_number_of_repetitions
-                                               1, //repetition_number
-                                               (frameP * 10) + subframeP);
-          ul_req_tmp->number_of_pdus++;
-          eNB->ul_handle++;
-        }
-      } // UE_is_to_be_scheduled
-    } // ULCCs
-   } // loop over UE_id
+        } // UE_is_to_be_scheduled
+      } // ULCCs
+    } // loop over UE_id
   } // Schedule new ULSCH
 
   // This section is to repeat ULSCH PDU for a number of MTC repetitions
-  for(int i=0;i<ul_req_tmp->number_of_pdus;i++)
-  {
-	  ul_config_pdu = &ul_req_tmp->ul_config_pdu_list[i];
-	  if (ul_config_pdu->pdu_type!=NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) // Repeat ULSCH PDUs only
-		  continue ;
-
-	  if(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number < ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions)
-	  {
-		  ul_req_body_Rep = &eNB->UL_req_tmp[CC_id][(sched_subframeP+1)%10].ul_config_request_body;
-		  ul_config_pdu_Rep = &ul_req_body_Rep->ul_config_pdu_list[ul_req_body_Rep->number_of_pdus];
-		  memcpy ((void *) ul_config_pdu_Rep, ul_config_pdu, sizeof (nfapi_ul_config_request_pdu_t));
-		  ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++;
-		  ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel13.repetition_number = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number +1;
-		  ul_req_body_Rep->number_of_pdus++;
-	  } //repetition_number < total_number_of_repetitions
+  for(int i=0; i<ul_req_tmp->number_of_pdus; i++) {
+    ul_config_pdu = &ul_req_tmp->ul_config_pdu_list[i];
+
+    if (ul_config_pdu->pdu_type!=NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) // Repeat ULSCH PDUs only
+      continue ;
+
+    if(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number < ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions) {
+      ul_req_body_Rep = &eNB->UL_req_tmp[CC_id][(sched_subframeP+1)%10].ul_config_request_body;
+      ul_config_pdu_Rep = &ul_req_body_Rep->ul_config_pdu_list[ul_req_body_Rep->number_of_pdus];
+      memcpy ((void *) ul_config_pdu_Rep, ul_config_pdu, sizeof (nfapi_ul_config_request_pdu_t));
+      ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++;
+      ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel13.repetition_number = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number +1;
+      ul_req_body_Rep->number_of_pdus++;
+    } //repetition_number < total_number_of_repetitions
   }   // For loop on PDUs
 }
 #endif
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index 70cee3e24bc26f41a600f6cb0d1083ae6508e501..bfa8660c9e3a36c2729c4d8510edb9f3ed1433e7 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -255,17 +255,11 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id,
               "Transmission on secondary CCs is not supported yet\n");
   // start contention resolution timer
   UE_mac_inst[module_idP].RA_attempt_number++;
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
-              UE_mac_inst[module_idP].RA_prach_resources.
-              ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0,
-              UE_mac_inst[module_idP].RA_attempt_number);
-    LOG_D(OPT,
-          "[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size);
-  }
+  trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
+            UE_mac_inst[module_idP].RA_prach_resources.
+            ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0,
+            UE_mac_inst[module_idP].RA_attempt_number);
 }
 
 
@@ -280,19 +274,11 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id,
         module_idP, frameP);
   UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0;
   UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
-
-  if (opt_enabled) {    // msg3
-    trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
-              UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti,
-              UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][RAPROC] MSG3 Frame %d trace pdu Preamble %d   with size %d\n",
-          module_idP, frameP, UE_mac_inst[module_idP].crnti
-          /*UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex */
-          , UE_mac_inst[module_idP].RA_Msg3_size);
-  }
+  trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
+            UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti,
+            UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0, 0);
 }
 
 
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index cb18d8dffe7d60e811707aec00058a876b1c2b2a..e7af451f6ba079b126855827b19d34cb43e983c6 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -49,63 +49,54 @@ extern RAN_CONTEXT_t RC;
 //------------------------------------------------------------------------------
 unsigned short
 fill_rar(const module_id_t module_idP,
-	 const int CC_id,
-	 RA_t * ra,
-	 const frame_t frameP,
-	 uint8_t * const dlsch_buffer,
-	 const uint16_t N_RB_UL, const uint8_t input_buffer_length)
+         const int CC_id,
+         RA_t *ra,
+         const frame_t frameP,
+         uint8_t *const dlsch_buffer,
+         const uint16_t N_RB_UL, const uint8_t input_buffer_length)
 //------------------------------------------------------------------------------
 {
-
-    RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
-    uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
-
-
-    // subheader fixed
-    rarh->E = 0;		// First and last RAR
-    rarh->T = 1;		// 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
-    rarh->RAPID = ra->preamble_index;	// Respond to Preamble 0 only for the moment
-    rar[4] = (uint8_t) (ra->rnti >> 8);
-    rar[5] = (uint8_t) (ra->rnti & 0xff);
-    //ra->timing_offset = 0;
-    ra->timing_offset /= 16;	//T_A = N_TA/16, where N_TA should be on a 30.72Msps
-    rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));	// 7 MSBs of timing advance + divide by 4
-    rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0;	// 4 LSBs of timing advance + divide by 4
-    COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
-    if(N_RB_UL == 25){
-      ra->msg3_first_rb = 1;
-    }else{
-      if (cc->tdd_Config && N_RB_UL == 100) {
-        ra->msg3_first_rb = 3;
-      } else {
-        ra->msg3_first_rb = 2;
-      }
-    }
-    ra->msg3_nb_rb = 1;
-    uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb);	// first PRB only for UL Grant
-    rar[1] |= (rballoc >> 7) & 7;	// Hopping = 0 (bit 3), 3 MSBs of rballoc
-    rar[2] = ((uint8_t) (rballoc & 0xff)) << 1;	// 7 LSBs of rballoc
-    ra->msg3_mcs = 10;
-    ra->msg3_TPC = 3;
-    ra->msg3_ULdelay = 0;
-    ra->msg3_cqireq = 0;
-    ra->msg3_round = 0;
-    rar[2] |= ((ra->msg3_mcs & 0x8) >> 3);	// mcs 10
-    rar[3] =
-	(((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) |
-	((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
-
-    if (opt_enabled) {
-	trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, module_idP,  WS_RA_RNTI , 1,
-		  RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
-		  0, 0);
-	LOG_D(OPT,
-	      "[eNB %d][RAPROC] CC_id %d RAR Frame %d trace pdu for rnti %x and  rapid %d size %d\n",
-	      module_idP, CC_id, frameP, ra->rnti, rarh->RAPID,
-	      input_buffer_length);
+  RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
+  uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
+  // subheader fixed
+  rarh->E = 0;    // First and last RAR
+  rarh->T = 1;    // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
+  rarh->RAPID = ra->preamble_index; // Respond to Preamble 0 only for the moment
+  rar[4] = (uint8_t) (ra->rnti >> 8);
+  rar[5] = (uint8_t) (ra->rnti & 0xff);
+  //ra->timing_offset = 0;
+  ra->timing_offset /= 16;  //T_A = N_TA/16, where N_TA should be on a 30.72Msps
+  rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));  // 7 MSBs of timing advance + divide by 4
+  rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
+  COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
+
+  if(N_RB_UL == 25) {
+    ra->msg3_first_rb = 1;
+  } else {
+    if (cc->tdd_Config && N_RB_UL == 100) {
+      ra->msg3_first_rb = 3;
+    } else {
+      ra->msg3_first_rb = 2;
     }
+  }
 
-    return (ra->rnti);
+  ra->msg3_nb_rb = 1;
+  uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb);  // first PRB only for UL Grant
+  rar[1] |= (rballoc >> 7) & 7; // Hopping = 0 (bit 3), 3 MSBs of rballoc
+  rar[2] = ((uint8_t) (rballoc & 0xff)) << 1; // 7 LSBs of rballoc
+  ra->msg3_mcs = 10;
+  ra->msg3_TPC = 3;
+  ra->msg3_ULdelay = 0;
+  ra->msg3_cqireq = 0;
+  ra->msg3_round = 0;
+  rar[2] |= ((ra->msg3_mcs & 0x8) >> 3);  // mcs 10
+  rar[3] =
+    (((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) |
+    ((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
+  trace_pdu(DIRECTION_DOWNLINK, dlsch_buffer, input_buffer_length, module_idP,  WS_RA_RNTI, 1,
+            RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
+            0, 0);
+  return (ra->rnti);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -118,14 +109,13 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
                            RA_t *ra,
                            const frame_t frameP,
                            const sub_frame_t subframeP,
-                           uint8_t* const dlsch_buffer,
+                           uint8_t *const dlsch_buffer,
                            const uint8_t ce_level)
 //------------------------------------------------------------------------------
 {
   RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
   COMMON_channels_t *cc = &eNB->common_channels[CC_id];
   uint8_t *rar = (uint8_t *)(dlsch_buffer + 1);
-
   uint32_t rballoc = 0;
   uint32_t ULdelay = 0;
   uint32_t cqireq = 0;
@@ -133,30 +123,24 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
   uint32_t TPC = 0;
   int input_buffer_length = 0;
   int N_NB_index = 0;
-
   AssertFatal(ra != NULL, "RA is null \n");
-  
   /* Subheader fixed */
-  rarh->E = 0;		// First and last RAR
-  rarh->T = 1;		// 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
-  rarh->RAPID = ra->preamble_index;	// Respond to Preamble
-
+  rarh->E = 0;    // First and last RAR
+  rarh->T = 1;    // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
+  rarh->RAPID = ra->preamble_index; // Respond to Preamble
   /* RAR PDU */
   /* TA Command */
-  ra->timing_offset /= 16;	// T_A = N_TA/16, where N_TA should be on a 30.72Msps
-  rar[0] = (uint8_t) (ra->timing_offset >> 4) & 0x7f;	// 7 MSBs of timing advance
-  rar[1] = (uint8_t) (ra->timing_offset & 0x0f) << 4;	// 4 LSBs of timing advance
-  
+  ra->timing_offset /= 16;  // T_A = N_TA/16, where N_TA should be on a 30.72Msps
+  rar[0] = (uint8_t) (ra->timing_offset >> 4) & 0x7f; // 7 MSBs of timing advance
+  rar[1] = (uint8_t) (ra->timing_offset & 0x0f) << 4; // 4 LSBs of timing advance
   /* Copy the Msg2 narrowband */
   ra->msg34_narrowband = ra->msg2_narrowband;
   ra->msg3_first_rb    = 0;
   ra->msg3_nb_rb       = 2;
 
-  if (ce_level < 2) {	// CE Level 0, 1 (CEmodeA)
+  if (ce_level < 2) { // CE Level 0, 1 (CEmodeA)
     input_buffer_length = 6;
-    
     N_NB_index = get_numnarrowbandbits(cc->mib->message.dl_Bandwidth);
-
     /* UL Grant */
     ra->msg3_mcs = 7;
     TPC = 3; // no power increase
@@ -164,7 +148,6 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
     cqireq = 0;
     mpdcch_nb_index = 0;
     rballoc = mac_computeRIV(6, ra->msg3_first_rb, ra->msg3_nb_rb);
-
     uint32_t buffer = 0;
     buffer |= ra->msg34_narrowband << (16 + (4 - N_NB_index));
     buffer |= ((rballoc & 0x0F) << (12 + (4 - N_NB_index)));
@@ -174,21 +157,15 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
     buffer |= ((cqireq & 0x01) << (3 + (4 - N_NB_index)));
     buffer |= ((ULdelay & 0x01) << (2 + (4 - N_NB_index)));
     buffer |= (mpdcch_nb_index << (4 - N_NB_index));
-
     rar[1] |= (uint8_t) (buffer >> 16) & 0x0F;
     rar[2] = (uint8_t) (buffer >> 8) & 0xFF;
     rar[3] = (uint8_t) buffer & 0xFF;
-
     /* RA CRNTI */
     rar[4] = (uint8_t)(ra->rnti >> 8);
     rar[5] = (uint8_t)(ra->rnti & 0xff);
-  
   } else { // CE level 2, 3 (CEModeB)
-
     AssertFatal(1 == 0, "Shouldn't get here ...\n");
-
     input_buffer_length = 5;
-
     rar[3] = (uint8_t)(ra->rnti >> 8);
     rar[4] = (uint8_t)(ra->rnti & 0xff);
   }
@@ -196,7 +173,7 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
   LOG_I(MAC, "[RAPROC] Frame %d Subframe %d : Generating RAR BR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ce_level %d, CRNTI %x, preamble %d/%d, TIMING OFFSET %d\n",
         frameP,
         subframeP,
-        *(uint8_t*) rarh,
+        *(uint8_t *) rarh,
         rar[0],
         rar[1],
         rar[2],
@@ -208,26 +185,16 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
         rarh->RAPID,
         ra->preamble_index,
         ra->timing_offset);
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_DOWNLINK, 
-              dlsch_buffer, 
-              input_buffer_length, 
-              eNB->Mod_id,  
-              WS_RA_RNTI, 
-              1, 
-              eNB->frame, 
-              eNB->subframe, 
-              0, 
-              0);
-
-    LOG_D(OPT, "[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
-	        frameP, 
-          ra->rnti, 
-          rarh->RAPID, 
-          input_buffer_length);
-  }
-
+  trace_pdu(DIRECTION_DOWNLINK,
+            dlsch_buffer,
+            input_buffer_length,
+            eNB->Mod_id,
+            WS_RA_RNTI,
+            1,
+            eNB->frame,
+            eNB->subframe,
+            0,
+            0);
   return (ra->rnti);
 }
 #endif
diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c
index 35d1f7925e55ddc07c0d37dbe4217f19a0910aa0..611aaf865b27d1d36f21785f7dbdcfa2ef086764 100644
--- a/openair2/LAYER2/MAC/rar_tools_ue.c
+++ b/openair2/LAYER2/MAC/rar_tools_ue.c
@@ -41,103 +41,96 @@
 #define DEBUG_RAR
 
 //------------------------------------------------------------------------------
-uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const frame_t frameP, const rnti_t ra_rnti, uint8_t * const dlsch_buffer, rnti_t * const t_crnti, const uint8_t preamble_index, uint8_t * selected_rar_buffer	// output argument for storing the selected RAR header and RAR payload
-    )
+uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const frame_t frameP, const rnti_t ra_rnti, uint8_t *const dlsch_buffer, rnti_t *const t_crnti, const uint8_t preamble_index,
+                        uint8_t *selected_rar_buffer   // output argument for storing the selected RAR header and RAR payload
+                       )
 //------------------------------------------------------------------------------
 {
-    uint16_t ret = 0;		// return value
-
-    RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
-    //  RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
-    uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
-
-    // get the last RAR payload for working with CMW500
-    uint8_t n_rarpy = 0;	// number of RAR payloads
-    uint8_t n_rarh = 0;		// number of MAC RAR subheaders
-    uint8_t best_rx_rapid = -1;	// the closest RAPID receive from all RARs
-    while (1) {
-	n_rarh++;
-	if (rarh->T == 1) {
-	    n_rarpy++;
-	    LOG_D(MAC, "RAPID %d\n", rarh->RAPID);
-	}
-
-	if (rarh->RAPID == preamble_index) {
-	    LOG_D(PHY, "Found RAR with the intended RAPID %d\n",
-		  rarh->RAPID);
-	    rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
-	    break;
-	}
-
-	if (abs((int) rarh->RAPID - (int) preamble_index) <
-	    abs((int) best_rx_rapid - (int) preamble_index)) {
-	    best_rx_rapid = rarh->RAPID;
-	    rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
-	}
-
-	if (rarh->E == 0) {
-	    LOG_I(PHY,
-		  "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n",
-		  best_rx_rapid);
-	    break;
-	} else {
-	    rarh++;
-	}
-    };
-    LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n",
-	  n_rarh, n_rarpy);
-
-    if (CC_id > 0) {
-	LOG_W(MAC, "Should not have received RAR on secondary CCs! \n");
-	return (0xffff);
+  uint16_t ret = 0;   // return value
+  RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
+  //  RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
+  uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
+  // get the last RAR payload for working with CMW500
+  uint8_t n_rarpy = 0;  // number of RAR payloads
+  uint8_t n_rarh = 0;   // number of MAC RAR subheaders
+  uint8_t best_rx_rapid = -1; // the closest RAPID receive from all RARs
+
+  while (1) {
+    n_rarh++;
+
+    if (rarh->T == 1) {
+      n_rarpy++;
+      LOG_D(MAC, "RAPID %d\n", rarh->RAPID);
     }
 
-    LOG_I(MAC,
-	  "[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
-	  module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2],
-	  rar[3], rar[4], rar[5], rarh->RAPID, preamble_index);
-#ifdef DEBUG_RAR
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->E %d\n", module_idP, rarh->E);
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->T %d\n", module_idP, rarh->T);
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->RAPID %d\n", module_idP,
-	  rarh->RAPID);
-
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R);
-    LOG_D(MAC, "[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",
-	  module_idP, (((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req);
-    LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP,
-	  (uint16_t) rar[5] + (rar[4] << 8));
-#endif
+    if (rarh->RAPID == preamble_index) {
+      LOG_D(PHY, "Found RAR with the intended RAPID %d\n",
+            rarh->RAPID);
+      rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
+      break;
+    }
 
-    if (opt_enabled) {
-	LOG_D(OPT,
-	      "[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n",
-	      module_idP, CC_id, frameP, ra_rnti);
-	trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
-		  module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
-		  UE_mac_inst[module_idP].rxSubframe, 0, 0);
+    if (abs((int) rarh->RAPID - (int) preamble_index) <
+        abs((int) best_rx_rapid - (int) preamble_index)) {
+      best_rx_rapid = rarh->RAPID;
+      rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
     }
 
-    if (preamble_index == rarh->RAPID) {
-	*t_crnti = (uint16_t) rar[5] + (rar[4] << 8);	//rar->t_crnti;
-	UE_mac_inst[module_idP].crnti = *t_crnti;	//rar->t_crnti;
-	//return(rar->Timing_Advance_Command);
-	ret = ((((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+    if (rarh->E == 0) {
+      LOG_I(PHY,
+            "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n",
+            best_rx_rapid);
+      break;
     } else {
-	UE_mac_inst[module_idP].crnti = 0;
-	ret = (0xffff);
+      rarh++;
     }
+  };
 
-    // move the selected RAR to the front of the RA_PDSCH buffer
-    memcpy(selected_rar_buffer + 0, (uint8_t *) rarh, 1);
-    memcpy(selected_rar_buffer + 1, (uint8_t *) rar, 6);
+  LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n",
+        n_rarh, n_rarpy);
 
-    return ret;
+  if (CC_id > 0) {
+    LOG_W(MAC, "Should not have received RAR on secondary CCs! \n");
+    return (0xffff);
+  }
 
+  LOG_I(MAC,
+        "[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
+        module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2],
+        rar[3], rar[4], rar[5], rarh->RAPID, preamble_index);
+#ifdef DEBUG_RAR
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->E %d\n", module_idP, rarh->E);
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->T %d\n", module_idP, rarh->T);
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->RAPID %d\n", module_idP,
+        rarh->RAPID);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R);
+  LOG_D(MAC, "[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",
+        module_idP, (((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req);
+  LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP,
+        (uint16_t) rar[5] + (rar[4] << 8));
+#endif
+  trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
+            module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
+
+  if (preamble_index == rarh->RAPID) {
+    *t_crnti = (uint16_t) rar[5] + (rar[4] << 8); //rar->t_crnti;
+    UE_mac_inst[module_idP].crnti = *t_crnti; //rar->t_crnti;
+    //return(rar->Timing_Advance_Command);
+    ret = ((((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+  } else {
+    UE_mac_inst[module_idP].crnti = 0;
+    ret = (0xffff);
+  }
+
+  // move the selected RAR to the front of the RA_PDSCH buffer
+  memcpy(selected_rar_buffer + 0, (uint8_t *) rarh, 1);
+  memcpy(selected_rar_buffer + 1, (uint8_t *) rar, 6);
+  return ret;
 }
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index f001c5f2ae064966fd2a4df46fd72efd412c92a6..23f699b058995cf37faaaba928d9114fa52d046c 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -400,17 +400,9 @@ ue_send_sdu(module_id_t module_idP,
 #endif
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
   (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
-
   //LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][DLSCH] Frame %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, UE_mac_inst[module_idP].crnti, sdu_len);
-  }
-
+  trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
   payload_ptr =
     parse_header(sdu, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths,
                  sdu_len);
@@ -597,39 +589,31 @@ ue_send_sdu(module_id_t module_idP,
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
 void
 ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP,
-            uint8_t eNB_index, void *pdu, uint16_t len)
-{
+                  uint8_t eNB_index, void *pdu, uint16_t len) {
 #if UE_TIMING_TRACE
-    start_meas(&UE_mac_inst[module_idP].rx_si);
+  start_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
-       (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN);
-
-    LOG_D(MAC, "[UE %d] Frame %d Sending SI MBMS to RRC (LCID Id %d,len %d)\n",
-         module_idP, frameP, BCCH, len);
-
-    mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0,  // unknown subframe
-                    SI_RNTI,
-                    BCCH_SI_MBMS, (uint8_t *) pdu, len, eNB_index,
-                    0);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
-       (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
+  (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN);
+  LOG_D(MAC, "[UE %d] Frame %d Sending SI MBMS to RRC (LCID Id %d,len %d)\n",
+        module_idP, frameP, BCCH, len);
+  mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0,  // unknown subframe
+                      SI_RNTI,
+                      BCCH_SI_MBMS, (uint8_t *) pdu, len, eNB_index,
+                      0);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
+  (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
 #if UE_TIMING_TRACE
-    stop_meas(&UE_mac_inst[module_idP].rx_si);
+  stop_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-    if (opt_enabled == 1) {
-       trace_pdu(DIRECTION_UPLINK,
-                 (uint8_t *) pdu,
-                 len,
-                 module_idP,
-                 WS_SI_RNTI,
-                 0xffff,
-                 UE_mac_inst[module_idP].rxFrame,
-                 UE_mac_inst[module_idP].rxSubframe, 0, 0);
-       LOG_D(OPT,
-             "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-             module_idP, frameP, CC_id, 0xffff, len);
-    }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            0xffff,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 #endif
 
@@ -652,20 +636,14 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK,
-              (uint8_t *) pdu,
-              len,
-              module_idP,
-              WS_SI_RNTI,
-              0xffff,
-              UE_mac_inst[module_idP].rxFrame,
-              UE_mac_inst[module_idP].rxSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-          module_idP, frameP, CC_id, 0xffff, len);
-  }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            0xffff,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 
 void
@@ -688,20 +666,14 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].rx_p);
 #endif
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK,
-              (uint8_t *) pdu,
-              len,
-              module_idP,
-              WS_SI_RNTI,
-              P_RNTI,
-              UE_mac_inst[module_idP].rxFrame,
-              UE_mac_inst[module_idP].rxSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-          module_idP, frameP, CC_id, P_RNTI, len);
-  }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            P_RNTI,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
@@ -2461,17 +2433,10 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
 #endif
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti,
-              UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][ULSCH] Frame %d subframe %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, subframe, UE_mac_inst[module_idP].crnti,
-          buflen);
-  }
+  trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti,
+            UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0, 0);
 }
 
 
diff --git a/openair2/PHY_INTERFACE/IF_Module.c b/openair2/PHY_INTERFACE/IF_Module.c
index 2cc43189c696134b92bf82d14c53411516c35f13..5b3b6d5da63a3f08adff5b4835dbc083f3aeeffe 100644
--- a/openair2/PHY_INTERFACE/IF_Module.c
+++ b/openair2/PHY_INTERFACE/IF_Module.c
@@ -22,45 +22,45 @@ extern UL_RCC_IND_t  UL_RCC_INFO;
 uint16_t frame_cnt=0;
 void handle_rach(UL_IND_t *UL_info) {
   int i;
-  if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-     if (UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles>0) {
 
-       AssertFatal(UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
-       LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_RCC_INFO.rach_ind[j].sfn_sf));
-       initiate_ra_proc(UL_info->module_id,
-                        UL_info->CC_id,
-                        NFAPI_SFNSF2SFN(UL_RCC_INFO.rach_ind[j].sfn_sf),
-                        NFAPI_SFNSF2SF(UL_RCC_INFO.rach_ind[j].sfn_sf),
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.preamble,
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.rnti
+  if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if (UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles>0) {
+        AssertFatal(UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+        LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_RCC_INFO.rach_ind[j].sfn_sf));
+        initiate_ra_proc(UL_info->module_id,
+                         UL_info->CC_id,
+                         NFAPI_SFNSF2SFN(UL_RCC_INFO.rach_ind[j].sfn_sf),
+                         NFAPI_SFNSF2SF(UL_RCC_INFO.rach_ind[j].sfn_sf),
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.rnti
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                        ,0
+                         ,0
 #endif
-       );
-       free(UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list);
-       UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles = 0;
-       UL_RCC_INFO.rach_ind[j].header.message_id = 0;
-     }
-   }
-  }else{
-  if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
-    AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
-    UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
-    LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
-    initiate_ra_proc(UL_info->module_id,
-                     UL_info->CC_id,
-                     NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
-                     NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
+                        );
+        free(UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list);
+        UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles = 0;
+        UL_RCC_INFO.rach_ind[j].header.message_id = 0;
+      }
+    }
+  } else {
+    if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
+      AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+      UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
+      LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
+      initiate_ra_proc(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
+                       NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                     ,0
+                       ,0
 #endif
-                    );
-  }
+                      );
+    }
   }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -97,17 +97,18 @@ void handle_sr(UL_IND_t *UL_info) {
     if (UL_info->sr_ind.sr_indication_body.number_of_srs>0) {
       oai_nfapi_sr_indication(&UL_info->sr_ind);
     }
-  } else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs > 0){
-        for (i=0;i<UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs;i++){
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs > 0) {
+        for (i=0; i<UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs; i++) {
           SR_indication(UL_info->module_id,
-              UL_info->CC_id,
-              NFAPI_SFNSF2SFN(UL_RCC_INFO.sr_ind[j].sfn_sf),
-              NFAPI_SFNSF2SF(UL_RCC_INFO.sr_ind[j].sfn_sf),
-              UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
-              UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
+                        UL_info->CC_id,
+                        NFAPI_SFNSF2SFN(UL_RCC_INFO.sr_ind[j].sfn_sf),
+                        NFAPI_SFNSF2SF(UL_RCC_INFO.sr_ind[j].sfn_sf),
+                        UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
+                        UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
         }
+
         free(UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list);
         UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs=0;
         UL_RCC_INFO.sr_ind[j].header.message_id = 0;
@@ -134,14 +135,13 @@ void handle_cqi(UL_IND_t *UL_info) {
       LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.cqi_indication_body.number_of_cqis);
       UL_info->cqi_ind.header.message_id = NFAPI_RX_CQI_INDICATION;
       UL_info->cqi_ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
-
       oai_nfapi_cqi_indication(&UL_info->cqi_ind);
       UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
     }
   } else if (NFAPI_MODE == NFAPI_MODE_VNF) {
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis > 0){
-        for (i=0;i<UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis;i++){
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis > 0) {
+        for (i=0; i<UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis; i++) {
           cqi_indication(UL_info->module_id,
                          UL_info->CC_id,
                          NFAPI_SFNSF2SFN(UL_RCC_INFO.cqi_ind[j].sfn_sf),
@@ -159,15 +159,15 @@ void handle_cqi(UL_IND_t *UL_info) {
       }
     }
   } else {
-    for (i=0;i<UL_info->cqi_ind.cqi_indication_body.number_of_cqis;i++)
+    for (i=0; i<UL_info->cqi_ind.cqi_indication_body.number_of_cqis; i++)
       cqi_indication(UL_info->module_id,
                      UL_info->CC_id,
-          NFAPI_SFNSF2SFN(UL_info->cqi_ind.sfn_sf),
-          NFAPI_SFNSF2SF(UL_info->cqi_ind.sfn_sf),
-          UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
-          &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
-          UL_info->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[i].pdu,
-          &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
+                     NFAPI_SFNSF2SFN(UL_info->cqi_ind.sfn_sf),
+                     NFAPI_SFNSF2SF(UL_info->cqi_ind.sfn_sf),
+                     UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
+                     &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
+                     UL_info->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[i].pdu,
+                     &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
 
     UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
   }
@@ -183,15 +183,15 @@ void handle_harq(UL_IND_t *UL_info) {
     }
 
     UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
-  }else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs > 0){
-        for (int i=0;i<UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs;i++){
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs > 0) {
+        for (int i=0; i<UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs; i++) {
           harq_indication(UL_info->module_id,
-                         UL_info->CC_id,
-                         NFAPI_SFNSF2SFN(UL_RCC_INFO.harq_ind[j].sfn_sf),
-                         NFAPI_SFNSF2SF(UL_RCC_INFO.harq_ind[j].sfn_sf),
-                         &UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list[i]);
+                          UL_info->CC_id,
+                          NFAPI_SFNSF2SFN(UL_RCC_INFO.harq_ind[j].sfn_sf),
+                          NFAPI_SFNSF2SF(UL_RCC_INFO.harq_ind[j].sfn_sf),
+                          &UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list[i]);
         }
 
         free(UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list);
@@ -226,48 +226,52 @@ void handle_ulsch(UL_IND_t *UL_info) {
       oai_nfapi_rx_ind(&UL_info->rx_ind);
       UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
     }
-  } else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t k = 0;k < NUM_NFPAI_SUBFRAME;k++){
-      if((UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus>0) && (UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs>0)){
-        for (i=0;i<UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus;i++) {
-          for (j=0;j<UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs;j++) {
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t k = 0; k < NUM_NFPAI_SUBFRAME; k++) {
+      if((UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus>0) && (UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs>0)) {
+        for (i=0; i<UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus; i++) {
+          for (j=0; j<UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs; j++) {
             // find crc_indication j corresponding rx_indication i
             LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x\n",
-                       j,UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i,UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+                  j,UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i,UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+
             if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti == UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti) {
               LOG_D(PHY, "UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d\n",
-                          j, UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+                    j, UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+
               if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
                 LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
-                  rx_sdu(UL_info->module_id,
-                      UL_info->CC_id,
-                      NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
-                      NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
-                      (uint8_t *)NULL,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
-              }
-              else {
-                  LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
-                  rx_sdu(UL_info->module_id,
-                      UL_info->CC_id,
-                      NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
-                      NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+                rx_sdu(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
+                       NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                       (uint8_t *)NULL,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+              } else {
+                LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
+                rx_sdu(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
+                       NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
               }
-              if(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data != NULL){
+
+              if(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data != NULL) {
                 free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data);
               }
+
               break;
             } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti == UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
           } //    for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
         } //   for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
+
         free(UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list);
         free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list);
         UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs = 0;
@@ -388,10 +392,10 @@ static void dump_ul(UL_IND_t *u) {
 
   A("XXXX     crc_ind  %d\n", u->crc_ind.crc_indication_body.number_of_crcs);
   A("XXXX     sr_ind   %d\n", u->sr_ind.sr_indication_body.number_of_srs);
-  A("XXXX     cqi_ind  %d\n", u->cqi_ind.number_of_cqis);
+  A("XXXX     cqi_ind  %d\n", u->cqi_ind.cqi_indication_body.number_of_cqis);
 
-  for (i = 0; i < u->cqi_ind.number_of_cqis; i++) {
-    nfapi_cqi_indication_pdu_t *v = &u->cqi_ind.cqi_pdu_list[i];
+  for (i = 0; i < u->cqi_ind.cqi_indication_body.number_of_cqis; i++) {
+    nfapi_cqi_indication_pdu_t *v = &u->cqi_ind.cqi_indication_body.cqi_pdu_list[i];
     A("XXXX         cqi ind %d\n", i);
     A("XXXX cqi         ul_cqi %d channel %d\n", v->ul_cqi_information.ul_cqi,
       v->ul_cqi_information.channel);
@@ -699,11 +703,11 @@ void UL_indication(UL_IND_t *UL_info) {
   Sched_Rsp_t  *sched_info = &Sched_INFO[module_id][CC_id];
   IF_Module_t  *ifi        = if_inst[module_id];
   eNB_MAC_INST *mac        = RC.mac[module_id];
-
   LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n",
         UL_info->frame,UL_info->subframe,
         module_id,CC_id,
-        UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.cqi_indication_body.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
+        UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs,
+        UL_info->cqi_ind.cqi_indication_body.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
 
   if(UL_info->frame==1023&&UL_info->subframe==6) { // dl scheduling (0,0)
     frame_cnt= (frame_cnt + 1)%7; // to prevent frame_cnt get too big
@@ -729,7 +733,6 @@ void UL_indication(UL_IND_t *UL_info) {
   handle_sr(UL_info);
   handle_cqi(UL_info);
   handle_harq(UL_info);
-
   // clear HI prior to handling ULSCH
   uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_id], UL_info->subframe);
 
diff --git a/openair2/UTIL/OPT/README.txt b/openair2/UTIL/OPT/README.txt
index c56aeda93d96902b490d583c034f6101abecd540..2ac68f83fdbf1057f414e88a7559e6eb0c7345db 100644
--- a/openair2/UTIL/OPT/README.txt
+++ b/openair2/UTIL/OPT/README.txt
@@ -1,13 +1,20 @@
+
 How to configure wireshark for dissecting LTE protocols:
 - start the wireshark as a sudoers
-- goto analyze->enabled prototols
+  - goto analyze->enabled prototols
   => enable mac_lte_udp and rlc_lte_udp
-- goto edit/preferences and expand Protocols
-- select UDP and check "try heuristic sub-dissectors first"
-- select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
-- select RLC-LTE, and check all the options except the "May see RLC headers only", and set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
+  - goto edit/preferences and expand Protocols
+  - select UDP and check "try heuristic sub-dissectors first"
+  - select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
+    - select RLC-LTE, and check all the options except the "May see RLC headers only", and
+    set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
 
-How to use
-- start eNB or UE with option -W (or -P if you want to make a pcap file)
-- capture on local interface "lo" 
-- filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp") 
+    How to use
+    - start eNB or UE with option --opt.type wireshark
+  --opt options are:
+    --opt.type none/wireshark/pcap
+  --opt.ip 127.0.0.1 to specify the output IP address (default: 127.0.0.1)
+        output port is always: 9999 (to change it, change constant: PACKET_MAC_LTE_DEFAULT_UDP_PORT in OAI code)
+        --opt.path file_name to specify the file name (pcap)
+        - capture on local interface "lo"
+        - filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp")
diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h
index 5ae19f9b552e1f08d3206b81ac5196c4e17f7310..85c25cf8ad259a8cf87cb3af376f65b9e4fc7f1a 100644
--- a/openair2/UTIL/OPT/opt.h
+++ b/openair2/UTIL/OPT/opt.h
@@ -111,15 +111,17 @@ typedef enum radio_type_e {
  * function def
 */
 
-void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
-               int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
-               int oob_event, int oob_event_value);
+extern int opt_enabled;
+#define trace_pdu(x...) if (opt_enabled) trace_pdu_implementation(x)
+
+void trace_pdu_implementation(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
+                              int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
+                              int oob_event, int oob_event_value);
 
 int init_opt(void);
 
 void terminate_opt(void);
 
-extern int opt_enabled;
 //double *timing_analyzer(int index, int direction );
 
 #endif /* OPT_H_ */
diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c
index b032784028ee4dc7f2349e615cc7bbef5a6cbc6d..88adb1b209f29bdfb81640cb26186b5499addc6f 100644
--- a/openair2/UTIL/OPT/probe.c
+++ b/openair2/UTIL/OPT/probe.c
@@ -390,17 +390,22 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
 extern RAN_CONTEXT_t RC;
 #include <openair1/PHY/phy_extern_ue.h>
 /* Remote serveraddress (where Wireshark is running) */
-void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
-               int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
-               int oob_event_value) {
+void trace_pdu_implementation(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
+                              int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
+                              int oob_event_value) {
   MAC_Context_Info_t pdu_context;
   int radioType=FDD_RADIO;
+  LOG_D(OPT,"sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n",
+        direction?"DL":"UL", pdu_buffer_size, ueid, rnti, sysFrameNumber,subFrameNumber);
 
-  if (RC.eNB[0][0]!=NULL)
+  if (RC.eNB && RC.eNB[0][0]!=NULL)
     radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
-
-  if (PHY_vars_UE_g[0][0] != NULL)
+  else if (PHY_vars_UE_g && PHY_vars_UE_g[0][0] != NULL)
     radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
+  else {
+    LOG_E(OPT,"not a eNB neither a UE!!! \n");
+    return;
+  }
 
   switch (opt_type) {
     case OPT_WIRESHARK :
diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c
index 76f2f3f0fbacfce031b70b5a50cef0b9107d52a1..7a7e1a31f8e1a99b4ba0b90600ac45a89dc336dc 100644
--- a/targets/ARCH/rfsimulator/simulator.c
+++ b/targets/ARCH/rfsimulator/simulator.c
@@ -431,7 +431,8 @@ static bool flushInput(rfsimulator_state_t *t, int timeout) {
             }
           }
 
-          LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
+          if ( abs(b->th.timestamp-b->lastReceivedTS) > 50 )
+            LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
         }
 
         b->lastReceivedTS=b->th.timestamp;
diff --git a/targets/ARCH/rfsimulator/stored_node.c b/targets/ARCH/rfsimulator/stored_node.c
index 8cf3aa3bb269958070a582801ae5650229579d5a..a523c66bb25f7bcb2f8c635d1cd613abbfea7a4c 100644
--- a/targets/ARCH/rfsimulator/stored_node.c
+++ b/targets/ARCH/rfsimulator/stored_node.c
@@ -7,6 +7,24 @@
 
 volatile int             oai_exit = 0;
 
+int fullread(int fd, void *_buf, int count) {
+  char *buf = _buf;
+  int ret = 0;
+  int l;
+
+  while (count) {
+    l = read(fd, buf, count);
+
+    if (l <= 0) return -1;
+
+    count -= l;
+    buf += l;
+    ret += l;
+  }
+
+  return ret;
+}
+
 void fullwrite(int fd, void *_buf, int count) {
   char *buf = _buf;
   int l;
@@ -63,10 +81,9 @@ sin_addr:
   bool connected=false;
 
   while(!connected) {
-    LOG_I(HW,"rfsimulator: trying to connect to %s:%d\n", IP, port);
-
+    //LOG_I(HW,"rfsimulator: trying to connect to %s:%d\n", IP, port);
     if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
-      LOG_I(HW,"rfsimulator: connection established\n");
+      //LOG_I(HW,"rfsimulator: connection established\n");
       connected=true;
     }
 
@@ -108,12 +125,13 @@ int main(int argc, char *argv[]) {
   if (strcmp(argv[2],"server")==0) {
     serviceSock=server_start(atoi(argv[3]));
   } else {
-    client_start(argv[2],atoi(argv[3]));
+    serviceSock=client_start(argv[2],atoi(argv[3]));
   }
 
   samplesBlockHeader_t header;
   int bufSize=100000;
   void *buff=malloc(bufSize);
+  uint64_t readTS=0;
 
   while (1) {
     //Rewind the file to loop on the samples
@@ -125,9 +143,11 @@ int main(int argc, char *argv[]) {
     AssertFatal(read(fd,&header,sizeof(header)), "");
     fullwrite(serviceSock, &header, sizeof(header));
     int dataSize=sizeof(int32_t)*header.size*header.nbAnt;
+    uint64_t wroteTS=header.timestamp;
 
     if (dataSize>bufSize) {
-      void * new_buff = realloc(buff, dataSize);
+      void *new_buff = realloc(buff, dataSize);
+
       if (new_buff == NULL) {
         free(buff);
         AssertFatal(1, "Could not reallocate");
@@ -139,9 +159,18 @@ int main(int argc, char *argv[]) {
     AssertFatal(read(fd,buff,dataSize) == dataSize, "");
     fullwrite(serviceSock, buff, dataSize);
     // Purge incoming samples
-    setblocking(serviceSock, notBlocking);
+    setblocking(serviceSock, blocking);
+
+    while(readTS < wroteTS) {
+      if ( fullread(serviceSock, &header,sizeof(header)) != sizeof(header) ||
+           fullread(serviceSock, buff, sizeof(int32_t)*header.size*header.nbAnt) !=
+           sizeof(int32_t)*header.size*header.nbAnt
+         ) {
+        printf("error: %s\n", strerror(errno));
+        exit(1);
+      }
 
-    while(recv(serviceSock,buff, bufSize, MSG_DONTWAIT) > 0) {
+      readTS=header.timestamp;
     }
   }
 
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 89abd124999abc6d964670340d9f57997e7c96ff..9310d5559567272d9f302f5ab038707c014438a6 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -152,19 +152,21 @@ static inline void fh_if5_south_out(RU_t *ru) {
 // southbound IF4p5 fronthaul
 static inline void fh_if4p5_south_out(RU_t *ru) {
   if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
+
   LOG_D(PHY,"ENTERED fh_if4p5_south_out   Sending IF4p5 for frame %d subframe %d ru %d\n",ru->proc.frame_tx,ru->proc.subframe_tx,ru->idx);
+
   if (subframe_select(&ru->frame_parms,ru->proc.subframe_tx)!=SF_UL) {
     send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT);
     ru->south_out_cnt++;
     LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt);
   }
-/*if (ru == RC.ru[0] || ru == RC.ru[1]) {
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU+ru->idx, ru->proc.frame_tx );
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, ru->proc.subframe_tx );
-  }*/
-VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.frame_tx);
-VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.subframe_tx);
 
+  /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU+ru->idx, ru->proc.frame_tx );
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, ru->proc.subframe_tx );
+    }*/
+  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.frame_tx);
+  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.subframe_tx);
 }
 
 /*************************************************************/
@@ -207,61 +209,67 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_mask_full;
   int pultick_received=0;
 
+  if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S))
+    symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1;
+  else
+    symbol_mask_full = (1<<fp->symbols_per_tti)-1;
 
-  if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S))  
-    symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1;   
-  else     
-    symbol_mask_full = (1<<fp->symbols_per_tti)-1; 
   LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, ru %d, mask %x\n",ru->idx,*frame,*subframe,ru->idx,proc->symbol_mask[*subframe]);
   AssertFatal(proc->symbol_mask[*subframe]==0 || proc->symbol_mask[*subframe]==symbol_mask_full,"rx_fh_if4p5: proc->symbol_mask[%d] = %x\n",*subframe,proc->symbol_mask[*subframe]);
-  if (proc->symbol_mask[*subframe]==0) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished 
-     do {
-       recv_IF4p5(ru, &f, &sf, &packet_type, &symbol_number);
-	 LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, f %d, sf %d\n",ru->idx,*frame,*subframe,f,sf);
-       if (oai_exit == 1 || ru->cmd== STOP_RU) break;
-       if (packet_type == IF4p5_PULFFT) proc->symbol_mask[sf] = proc->symbol_mask[sf] | (1<<symbol_number);
-       else if (packet_type == IF4p5_PULTICK) {           
-         proc->symbol_mask[sf] = symbol_mask_full;
-         pultick_received++;
-/*
-         if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx);       
-         else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx);       
-         else break; */
-         if (f==*frame || sf==*subframe) break;
-       } else if (packet_type == IF4p5_PRACH) {
-      // nothing in RU for RAU
-       }
-       LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol mask %x\n",ru->idx,*subframe,sf,proc->symbol_mask[sf]);
-     } while(proc->symbol_mask[sf] != symbol_mask_full);    
-  }
-  else {
-   f = *frame;
-   sf = *subframe;
+
+  if (proc->symbol_mask[*subframe]==0) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished
+    do {
+      recv_IF4p5(ru, &f, &sf, &packet_type, &symbol_number);
+      LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, f %d, sf %d\n",ru->idx,*frame,*subframe,f,sf);
+
+      if (oai_exit == 1 || ru->cmd== STOP_RU) break;
+
+      if (packet_type == IF4p5_PULFFT) proc->symbol_mask[sf] = proc->symbol_mask[sf] | (1<<symbol_number);
+      else if (packet_type == IF4p5_PULTICK) {
+        proc->symbol_mask[sf] = symbol_mask_full;
+        pultick_received++;
+
+        /*
+                 if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx);
+                 else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx);
+                 else break; */
+        if (f==*frame || sf==*subframe) break;
+      } else if (packet_type == IF4p5_PRACH) {
+        // nothing in RU for RAU
+      }
+
+      LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol mask %x\n",ru->idx,*subframe,sf,proc->symbol_mask[sf]);
+    } while(proc->symbol_mask[sf] != symbol_mask_full);
+  } else {
+    f = *frame;
+    sf = *subframe;
   }
+
   //calculate timestamp_rx, timestamp_tx based on frame and subframe
   proc->subframe_rx  = sf;
   proc->frame_rx     = f;
   proc->timestamp_rx = ((proc->frame_rx * 10)  + proc->subframe_rx ) * fp->samples_per_tti ;
+
   if (get_nprocs()<=4) {
-     proc->subframe_tx  = (sf+sf_ahead)%10;
-     proc->frame_tx     = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
+    proc->subframe_tx  = (sf+sf_ahead)%10;
+    proc->frame_tx     = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
   }
 
   LOG_D(PHY,"Setting proc for (%d,%d)\n",sf,f);
 
   if (proc->first_rx == 0) {
-   if (proc->subframe_rx != *subframe){
+    if (proc->subframe_rx != *subframe) {
       LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d, symbol_mask %x)\n",proc->subframe_rx,*subframe,proc->symbol_mask[*subframe]);
-      *subframe=sf; 
+      *subframe=sf;
       //exit_fun("Exiting");
     }
+
     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,symbol_mask %x\n",proc->frame_rx,*frame,proc->symbol_mask[*subframe]);
       //exit_fun("Exiting");
-    }
-    else if (ru->cmd == WAIT_RESYNCH && proc->frame_rx != *frame){
-       ru->cmd=EMPTY;
-       *frame=proc->frame_rx; 
+    } else if (ru->cmd == WAIT_RESYNCH && proc->frame_rx != *frame) {
+      ru->cmd=EMPTY;
+      *frame=proc->frame_rx;
     }
   } else {
     proc->first_rx = 0;
@@ -272,12 +280,10 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU+ru->idx, f );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU+ru->idx, sf );
-    
-  }*/
 
+  }*/
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,f);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,sf);
-
   proc->symbol_mask[sf] = 0;
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );
   LOG_D(PHY,"RU %d: fh_if4p5_south_in returning ...\n",ru->idx);
@@ -311,6 +317,7 @@ void fh_if4p5_south_asynch_in(RU_t *ru,int *frame,int *subframe) {
     recv_IF4p5(ru, &proc->frame_rx, &proc->subframe_rx, &packet_type, &symbol_number);
 
     if (ru->cmd == STOP_RU) break;
+
     // grab first prach information for this new subframe
     if (got_prach_info==0) {
       prach_rx       = is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx);
@@ -365,12 +372,13 @@ void fh_if4p5_north_in(RU_t *ru,int *frame,int *subframe) {
   symbol_mask_full = (1<<ru->frame_parms.symbols_per_tti)-1;
   LOG_D(PHY,"fh_if4p5_north_in: frame %d, subframe %d\n",*frame,*subframe);
 
-  do { 
+  do {
     recv_IF4p5(ru, frame, subframe, &packet_type, &symbol_number);
     symbol_mask = symbol_mask | (1<<symbol_number);
-  } while (symbol_mask != symbol_mask_full); 
-  
+  } while (symbol_mask != symbol_mask_full);
+
   ru->north_in_cnt++;
+
   // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, *frame );
@@ -387,10 +395,9 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   //      printf("Received subframe %d (TS %llu) from RCC\n",subframe_tx,timestamp_tx);
   subframe_tx = (timestamp_tx/fp->samples_per_tti)%10;
   frame_tx    = (timestamp_tx/(fp->samples_per_tti*10))&1023;
-
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
-  
+
   if (proc->first_tx != 0) {
     *subframe = subframe_tx;
     *frame    = frame_tx;
@@ -401,6 +408,7 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     AssertFatal(frame_tx == *frame,
                 "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
   }
+
   ru->north_in_cnt++;
 }
 
@@ -411,26 +419,28 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_number,symbol_mask,symbol_mask_full;
   int subframe_tx,frame_tx;
   int ret;
-
   symbol_number = 0;
   symbol_mask = 0;
   symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
   LOG_D(PHY,"fh_if4p5_north_asynch_in: RU %d, frame %d, subframe %d\n",ru->idx,*frame,*subframe);
-  do {   
+
+  do {
     recv_IF4p5(ru, &frame_tx, &subframe_tx, &packet_type, &symbol_number);
     LOG_D(PHY,"income frame.subframe %d.%d, our frame.subframe.symbol_number %d.%d.%d (symbol mask %x)\n",frame_tx,subframe_tx,*frame,*subframe,symbol_number,symbol_mask);
-    if (ru->cmd == STOP_RU){
+
+    if (ru->cmd == STOP_RU) {
       LOG_E(PHY,"Got STOP_RU\n");
       AssertFatal((ret=pthread_mutex_lock(&proc->mutex_ru))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_ru = -1;
       AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_ru))==0,"mutex_unlock returns %d\n",ret);
       ru->cmd=STOP_RU;
       return;
-    } 
+    }
+
     if ((subframe_select(fp,subframe_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
 
     LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n",
-	  *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number);
+          *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number);
 
     if (proc->first_tx != 0) {
       *frame    = frame_tx;
@@ -438,25 +448,23 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
       proc->first_tx = 0;
       symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
     } else {
-     /* AssertFatal(frame_tx == *frame,
-                  "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
-      AssertFatal(subframe_tx == *subframe,
-		  "In frame_tx %d : subframe_tx %d is not what we expect %d\n",frame_tx,subframe_tx,*subframe);
-     */
+      /* AssertFatal(frame_tx == *frame,
+                   "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
+       AssertFatal(subframe_tx == *subframe,
+       "In frame_tx %d : subframe_tx %d is not what we expect %d\n",frame_tx,subframe_tx,*subframe);
+      */
       *frame    = frame_tx;
       *subframe = subframe_tx;
     }
 
     if (packet_type == IF4p5_PDLFFT) {
       symbol_mask = symbol_mask | (1<<symbol_number);
-    }
-    else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT got %d\n",packet_type);
-  } while (symbol_mask != symbol_mask_full);    
+    } else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT got %d\n",packet_type);
+  } while (symbol_mask != symbol_mask_full);
 
   if (subframe_select(fp,subframe_tx) == SF_DL) stop_meas(&ru->rx_fhaul);
 
   ru->north_in_cnt++;
-
   proc->subframe_tx  = subframe_tx;
   proc->frame_tx     = frame_tx;
 
@@ -464,6 +472,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
 
   proc->timestamp_tx = ((((uint64_t)frame_tx + (uint64_t)proc->frame_tx_unwrap) * 10) + (uint64_t)subframe_tx) * (uint64_t)fp->samples_per_tti;
   LOG_D(PHY,"RU %d/%d TST %llu, frame %d, subframe %d\n",ru->idx,0,(long long unsigned int)proc->timestamp_tx,frame_tx,subframe_tx);
+
   // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
     /*VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame_tx );
@@ -473,7 +482,6 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_ASYNCH_IN,subframe_tx);
   }
 
-
   if (ru->feptx_ofdm) ru->feptx_ofdm(ru);
 
   if (ru->fh_south_out) ru->fh_south_out(ru);
@@ -493,11 +501,14 @@ void fh_if4p5_north_out(RU_t *ru) {
   RU_proc_t *proc=&ru->proc;
   LTE_DL_FRAME_PARMS *fp = &ru->frame_parms;
   const int subframe     = proc->subframe_rx;
-  if (ru->idx==0){
- 	 VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_OUT, proc->subframe_rx );
-         VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_NORTH_OUT, proc->frame_rx );
+
+  if (ru->idx==0) {
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_OUT, proc->subframe_rx );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_NORTH_OUT, proc->frame_rx );
   }
+
   LOG_D(PHY,"fh_if4p5_north_out: Sending IF4p5_PULFFT SFN.SF %d.%d\n",proc->frame_rx,proc->subframe_rx);
+
   if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) {
     /// **** in TDD during DL send_IF4 of ULTICK to RCC **** ///
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK);
@@ -537,7 +548,6 @@ static void *emulatedRF_thread(void *param) {
   pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
   int policy;
   int ret;
-
   struct sched_param sparam;
   memset(&sparam, 0, sizeof(sparam));
   sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
@@ -568,12 +578,9 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   void *rxp[ru->nb_rx];
   unsigned int rxs;
   int i;
-
-
   int resynch=0;
-  
-
   openair0_timestamp ts=0,old_ts=0;
+
   for (i=0; i<ru->nb_rx; i++)
     rxp[i] = (void *)&ru->common.rxdata[i][*subframe*fp->samples_per_tti];
 
@@ -593,19 +600,20 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
-
   ru->south_in_cnt++;
   LOG_D(PHY,"south_in_cnt %d\n",ru->south_in_cnt);
 
   if (ru->cmd==RU_FRAME_RESYNCH) {
     LOG_I(PHY,"Applying frame resynch %d => %d\n",*frame,ru->cmdval);
+
     if (proc->frame_rx>ru->cmdval) ru->ts_offset += (proc->frame_rx - ru->cmdval)*fp->samples_per_tti*10;
     else ru->ts_offset -= (-proc->frame_rx + ru->cmdval)*fp->samples_per_tti*10;
+
     *frame = ru->cmdval;
     ru->cmd=EMPTY;
     resynch=1;
   }
- 
+
   proc->timestamp_rx = ts-ru->ts_offset;
 
   //  AssertFatal(rxs == fp->samples_per_tti,
@@ -618,19 +626,16 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   if (proc->first_rx == 1) {
     ru->ts_offset = proc->timestamp_rx;
     proc->timestamp_rx = 0;
-  } 
-  else if (resynch==0 && (proc->timestamp_rx - old_ts != fp->samples_per_tti)) {
+  } else if (resynch==0 && (proc->timestamp_rx - old_ts != fp->samples_per_tti)) {
     LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples (ts_off %"PRId64")\n",proc->timestamp_rx - old_ts - fp->samples_per_tti,ru->ts_offset);
     ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
     proc->timestamp_rx = ts-ru->ts_offset;
   }
 
-
   proc->frame_rx     = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023;
   proc->subframe_rx  = (proc->timestamp_rx / fp->samples_per_tti)%10;
   // synchronize first reception to frame 0 subframe 0
 
-
   if (ru->fh_north_asynch_in == NULL) {
 #ifdef PHY_TX_THREAD
     proc->timestamp_phy_tx = proc->timestamp_rx+((sf_ahead-1)*fp->samples_per_tti);
@@ -638,23 +643,24 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
     proc->frame_phy_tx     = (proc->subframe_rx>(9-(sf_ahead-1))) ? (proc->frame_rx+1)&1023 : proc->frame_rx;
 #endif
     LOG_D(PHY,"RU %d/%d TS %llu (off %d), frame %d, subframe %d\n",
-	  ru->idx,
-	  0,
-	  (unsigned long long int)proc->timestamp_rx,
-	  (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
-    
+          ru->idx,
+          0,
+          (unsigned long long int)proc->timestamp_rx,
+          (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
     LOG_D(PHY,"south_in/rx_rf: RU %d/%d TS %llu (off %d), frame %d, subframe %d\n",
-	  ru->idx, 
-	  0, 
-	  (unsigned long long int)proc->timestamp_rx,
-	  (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
+          ru->idx,
+          0,
+          (unsigned long long int)proc->timestamp_rx,
+          (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
+
     // dump VCD output for first RU in list
     if (ru == RC.ru[0]) {
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, proc->frame_rx );
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, proc->subframe_rx );
+
       if (ru->fh_north_asynch_in == NULL) {
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
       }
     }
   }
@@ -700,7 +706,6 @@ void tx_rf(RU_t *ru) {
   lte_subframe_t SF_type     = subframe_select(fp,proc->subframe_tx%10);
   lte_subframe_t prevSF_type = subframe_select(fp,(proc->subframe_tx+9)%10);
   int sf_extension = 0;
-  
 
   if ((SF_type == SF_DL) ||
       (SF_type == SF_S)) {
@@ -780,17 +785,18 @@ void tx_rf(RU_t *ru) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
     // prepare tx buffer pointers
     txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
-				      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
-				      txp,
-				      siglen+sf_extension,
-				      ru->nb_tx,
-				      flags);
+                                      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
+                                      txp,
+                                      siglen+sf_extension,
+                                      ru->nb_tx,
+                                      flags);
     ru->south_out_cnt++;
     LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt);
     int se = dB_fixed(signal_energy(txp[0],siglen+sf_extension));
 
     if (SF_type == SF_S) LOG_D(PHY,"[TXPATH] RU %d tx_rf (en %d,len %d), writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx,se,siglen+sf_extension,
-	  (long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
+                                 (long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
 
     //    AssertFatal(txs ==  siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
@@ -818,9 +824,7 @@ void *ru_thread_asynch_rxtx( void *param ) {
   wait_sync("ru_thread_asynch_rxtx");
   // wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe
   LOG_I(PHY, "waiting for devices (ru_thread_asynch_rxtx)\n");
-
   wait_on_condition(&proc->mutex_asynch_rxtx,&proc->cond_asynch_rxtx,&proc->instance_cnt_asynch_rxtx,"thread_asynch");
-
   LOG_I(PHY, "devices ok (ru_thread_asynch_rxtx)\n");
 
   while (!oai_exit) {
@@ -830,24 +834,25 @@ void *ru_thread_asynch_rxtx( void *param ) {
       subframe=0;
       frame=0;
       usleep(1000);
-    }
-    else {
-      if (subframe==9) { 
-         subframe=0;
-         frame++;
-         frame&=1023;
-       } else {
-         subframe++;
-      }      
+    } else {
+      if (subframe==9) {
+        subframe=0;
+        frame++;
+        frame&=1023;
+      } else {
+        subframe++;
+      }
+
       LOG_D(PHY,"ru_thread_asynch_rxtx: Waiting on incoming fronthaul\n");
+
       // asynchronous receive from north (RRU IF4/IF5)
       if (ru->fh_north_asynch_in) {
-	if (subframe_select(&ru->frame_parms,subframe)!=SF_UL)
-	  ru->fh_north_asynch_in(ru,&frame,&subframe);
-      }
-      else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
+        if (subframe_select(&ru->frame_parms,subframe)!=SF_UL)
+          ru->fh_north_asynch_in(ru,&frame,&subframe);
+      } else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
     }
   }
+
   ru_thread_asynch_rxtx_status=0;
   return(&ru_thread_asynch_rxtx_status);
 }
@@ -862,18 +867,17 @@ void wakeup_slaves(RU_proc_t *proc) {
 
   for (i=0; i<proc->num_slaves; i++) {
     RU_proc_t *slave_proc = proc->slave_proc[i];
-
     // wake up slave FH thread
     // lock the FH mutex and make sure the thread is ready
     clock_gettime(CLOCK_REALTIME,&wait);
     wait.tv_nsec += time_ns;
-    if(wait.tv_nsec >= 1000*1000*1000)
-    {
+
+    if(wait.tv_nsec >= 1000*1000*1000) {
       wait.tv_nsec -= 1000*1000*1000;
       wait.tv_sec  += 1;
     }
-    AssertFatal((ret=pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait))==0,"ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
 
+    AssertFatal((ret=pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait))==0,"ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
     int cnt_slave            = ++slave_proc->instance_cnt_FH;
     slave_proc->frame_rx     = proc->frame_rx;
     slave_proc->subframe_rx  = proc->subframe_rx;
@@ -884,9 +888,9 @@ void wakeup_slaves(RU_proc_t *proc) {
     if (cnt_slave == 0) {
       // the thread was presumably waiting where it should and can now be woken up
       if (pthread_cond_signal(&slave_proc->cond_FH) != 0) {
-	LOG_E( PHY, "ERROR pthread_cond_signal for RU %d, slave RU %d\n",proc->ru->idx,slave_proc->ru->idx);
-	exit_fun( "ERROR pthread_cond_signal" );
-	break;
+        LOG_E( PHY, "ERROR pthread_cond_signal for RU %d, slave RU %d\n",proc->ru->idx,slave_proc->ru->idx);
+        exit_fun( "ERROR pthread_cond_signal" );
+        break;
       }
     } else {
       LOG_W( PHY,"[RU] Frame %d, slave %d thread busy!! (cnt_FH %i)\n",slave_proc->frame_rx,slave_proc->ru->idx, cnt_slave);
@@ -937,7 +941,7 @@ void *ru_thread_prach( void *param ) {
                NULL,
                NULL,
                NULL,
-	       NULL,
+               NULL,
                proc->frame_prach,
                0
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -976,7 +980,7 @@ void *ru_thread_prach_br( void *param ) {
              NULL,
              NULL,
              NULL,
-	     NULL,
+             NULL,
              proc->frame_prach_br,
              0,
              1);
@@ -994,18 +998,17 @@ int wakeup_synch(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
   // wake up synch thread
   // lock the synch mutex and make sure the thread is readif (pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait) != 0) {
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
   ++ru->proc.instance_cnt_synch;
 
   // the thread can now be woken up
@@ -1051,6 +1054,7 @@ void do_ru_synch(RU_t *ru) {
                                      ru->nb_rx);
 
     if (rxs != fp->samples_per_tti*10) LOG_E(PHY,"requested %d samples, got %d\n",fp->samples_per_tti*10,rxs);
+
     // wakeup synchronization processing thread
     wakeup_synch(ru);
     ic=0;
@@ -1077,79 +1081,79 @@ void do_ru_synch(RU_t *ru) {
   // read in rx_offset samples
   LOG_I(PHY,"Resynchronizing by %d samples\n",ru->rx_offset);
   rxs = ru->rfdevice.trx_read_func(&ru->rfdevice,
-				   &(proc->timestamp_rx),
-				   rxp,
-				   ru->rx_offset,
-				   ru->nb_rx);
+                                   &(proc->timestamp_rx),
+                                   rxp,
+                                   ru->rx_offset,
+                                   ru->nb_rx);
   // Verification of synchronization procedure
   ru->state = RU_CHECK_SYNC;
-
   LOG_I(PHY,"Exiting synch routine\n");
 }
 
-int check_sync(RU_t *ru, RU_t *ru_master, int subframe){
+int check_sync(RU_t *ru, RU_t *ru_master, int subframe) {
+  if (fabs(ru_master->proc.t[subframe].tv_nsec - ru->proc.t[subframe].tv_nsec) > 500000)
+    return 0;
 
-	if (fabs(ru_master->proc.t[subframe].tv_nsec - ru->proc.t[subframe].tv_nsec) > 500000)
-		return 0;
-	return 1;
+  return 1;
 }
 
 void wakeup_L1s(RU_t *ru) {
   int i;
   PHY_VARS_eNB **eNB_list = ru->eNB_list;
   LOG_D(PHY,"wakeup_L1s (num %d) for RU %d (%d.%d)\n",ru->num_eNB,ru->idx, ru->proc.frame_rx,ru->proc.subframe_rx);
-
   PHY_VARS_eNB *eNB=eNB_list[0];
   L1_proc_t *proc      = &eNB->proc;
   struct timespec t;
   LOG_D(PHY,"wakeup_L1s (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top);
-
   // call eNB function directly
   char string[20];
   sprintf(string,"Incoming RU %d",ru->idx);
-
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
-  
   AssertFatal(0==pthread_mutex_lock(&proc->mutex_RU),"");
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 1 );
-  
   //printf("wakeup_L1s: 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]);
   //    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
   //    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
   clock_gettime(CLOCK_MONOTONIC,&ru->proc.t[ru->proc.subframe_rx]);
-  
-  if (proc->RU_mask[ru->proc.subframe_rx] == 0){
+
+  if (proc->RU_mask[ru->proc.subframe_rx] == 0) {
     //clock_gettime(CLOCK_MONOTONIC,&proc->t[ru->proc.subframe_rx]);
     proc->t[ru->proc.subframe_rx] = ru->proc.t[ru->proc.subframe_rx];
     //start_meas(&proc->ru_arrival_time);
     LOG_D(PHY,"RU %d starting timer for frame %d subframe %d\n",ru->idx, ru->proc.frame_rx,ru->proc.subframe_rx);
   }
-  
-  for (i=0;i<eNB->num_RU;i++) {
+
+  for (i=0; i<eNB->num_RU; i++) {
     if (eNB->RU_list[i]->wait_cnt==1 && ru->proc.subframe_rx!=9) eNB->RU_list[i]->wait_cnt=0;
+
     LOG_D(PHY,"RU %d has frame %d and subframe %d, state %s\n",eNB->RU_list[i]->idx,eNB->RU_list[i]->proc.frame_rx, eNB->RU_list[i]->proc.subframe_rx, ru_states[eNB->RU_list[i]->state]);
+
     if (ru == eNB->RU_list[i] && eNB->RU_list[i]->wait_cnt == 0) {
-      //	AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
+      //  AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
       proc->RU_mask[ru->proc.subframe_rx] |= (1<<i);
-    }else if (/*eNB->RU_list[i]->state == RU_SYNC || */
-	      (eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] && ru->is_slave==0)){
+    } else if (/*eNB->RU_list[i]->state == RU_SYNC || */
+      (eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] && ru->is_slave==0)) {
       proc->RU_mask[ru->proc.subframe_rx] |= (1<<i);
     }
+
     //printf("RU %d, RU_mask[%d] %d, i %d, frame %d, slave %d, ru->cnt %d, i->cnt %d\n",ru->idx,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx],i,ru->proc.frame_rx,ru->is_slave,ru->wait_cnt,eNB->RU_list[i]->wait_cnt);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_RU, proc->RU_mask[ru->proc.subframe_rx]);
+
     if (ru->is_slave == 0 && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<i)) == 1) && eNB->RU_list[i]->state == RU_RUN) { // This is master & the RRU has already been received
       if (check_sync(eNB->RU_list[i],eNB->RU_list[0],ru->proc.subframe_rx)  == 0)
-	LOG_E(PHY,"RU %d is not SYNC, subframe %d, time  %f this is master\n", eNB->RU_list[i]->idx, ru->proc.subframe_rx, fabs(eNB->RU_list[i]->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
-    }else if (ru->is_slave == 1 && ru->state == RU_RUN && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<0)) == 1)){ // master already received. TODO: we assume that RU0 is master.
+        LOG_E(PHY,"RU %d is not SYNC, subframe %d, time  %f this is master\n", eNB->RU_list[i]->idx, ru->proc.subframe_rx,
+              fabs(eNB->RU_list[i]->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
+    } else if (ru->is_slave == 1 && ru->state == RU_RUN && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<0)) == 1)) { // master already received. TODO: we assume that RU0 is master.
       if (check_sync(ru,eNB->RU_list[0],ru->proc.subframe_rx)  == 0)
-	LOG_E(PHY,"RU %d is not SYNC time, subframe %d, time  %f\n", ru->idx, ru->proc.subframe_rx, fabs(ru->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
+        LOG_E(PHY,"RU %d is not SYNC time, subframe %d, time  %f\n", ru->idx, ru->proc.subframe_rx, fabs(ru->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
     }
   }
+
   //clock_gettime(CLOCK_MONOTONIC,&t);
   //LOG_I(PHY,"RU mask is now %x, time is %lu\n",proc->RU_mask[ru->proc.subframe_rx], t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec);
-  
+
   if (proc->RU_mask[ru->proc.subframe_rx] == (1<<eNB->num_RU)-1) { // all RUs have provided their information so continue on and wakeup eNB top
     LOG_D(PHY,"ru_mask is %d \n ", proc->RU_mask[ru->proc.subframe_rx]);
     LOG_D(PHY,"the number of RU is %d, the current ru is RU %d \n ", (1<<eNB->num_RU)-1, ru->idx);
@@ -1160,29 +1164,30 @@ void wakeup_L1s(RU_t *ru) {
     clock_gettime(CLOCK_MONOTONIC,&t);
     //stop_meas(&proc->ru_arrival_time);
     /*    AssertFatal(t.tv_nsec < proc->t[ru->proc.subframe_rx].tv_nsec+5000000,
-		"Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
-		ru->proc.subframe_rx, ru->proc.frame_rx, t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
+    "Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
+    ru->proc.subframe_rx, ru->proc.frame_rx, t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
     */
     // VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
     //VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
     AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 0 );
-    
     // unlock RUs that are waiting for eNB processing to be completed
     LOG_D(PHY,"RU %d wakeup eNB top for subframe %d\n", ru->idx,ru->proc.subframe_rx);
+
     if (ru->wait_cnt == 0) {
       if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD)
-	ru->eNB_top(eNB_list[0],proc->frame_rx,proc->subframe_rx,string,ru);
+        ru->eNB_top(eNB_list[0],proc->frame_rx,proc->subframe_rx,string,ru);
       else {
-	for (i=0;i<ru->num_eNB;i++) {
-	  eNB_list[i]->proc.ru_proc = &ru->proc;
-	  if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0)
-	    {
-	      LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
-	    }
-	}
+        for (i=0; i<ru->num_eNB; i++) {
+          eNB_list[i]->proc.ru_proc = &ru->proc;
+
+          if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) {
+            LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
+          }
+        }
       }
     }
+
     /*
       AssertFatal(0==pthread_mutex_lock(&ruproc->mutex_eNBs),"");
       LOG_D(PHY,"RU %d sending signal to unlock waiting ru_threads\n", ru->idx);
@@ -1190,32 +1195,30 @@ void wakeup_L1s(RU_t *ru) {
       if (ruproc->instance_cnt_eNBs==-1) ruproc->instance_cnt_eNBs++;
       AssertFatal(0==pthread_mutex_unlock(&ruproc->mutex_eNBs),"");
     */
-    }
-    else{ // not all RUs have provided their information  
+  } else { // not all RUs have provided their information
     AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 0 );
   }
-//      pthread_mutex_unlock(&proc->mutex_RU);
-//      LOG_D(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);
 
-    ru->proc.emulate_rf_busy = 0;
-  
+  //      pthread_mutex_unlock(&proc->mutex_RU);
+  //      LOG_D(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);
+  ru->proc.emulate_rf_busy = 0;
 }
-inline int wakeup_prach_ru(RU_t *ru) {
+
+void  wakeup_prach_ru(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
 
   if (ru->proc.instance_cnt_prach==-1) {
     ++ru->proc.instance_cnt_prach;
@@ -1234,25 +1237,22 @@ inline int wakeup_prach_ru(RU_t *ru) {
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
   AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach ))==0,"mutex_unlock returns %d\n",ret);
-  return(0);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-inline int wakeup_prach_ru_br(RU_t *ru) {
+void wakeup_prach_ru_br(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
-
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait))==0,"[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait))==0,"[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
 
   if (ru->proc.instance_cnt_prach_br==-1) {
     ++ru->proc.instance_cnt_prach_br;
@@ -1264,7 +1264,6 @@ inline int wakeup_prach_ru_br(RU_t *ru) {
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
   AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach_br ))==0,"mutex_unlock returns %d\n",ret);
-  return(0);
 }
 #endif
 
@@ -1323,7 +1322,6 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
     cfg->rx_bw = 1.5e6;
   } else AssertFatal(1==0,"Unknown N_RB_DL %d\n",fp->N_RB_DL);
 
-
   if (fp->frame_type==TDD)
     cfg->duplex_mode = duplex_mode_TDD;
   else //FDD
@@ -1431,30 +1429,33 @@ int setup_RU_buffers(RU_t *ru) {
   return(0);
 }
 
-void* ru_stats_thread(void* param) {
-
-  RU_t               *ru      = (RU_t*)param;
-
+void *ru_stats_thread(void *param) {
+  RU_t               *ru      = (RU_t *)param;
   wait_sync("ru_stats_thread");
-  
+
   while (!oai_exit) {
     sleep(1);
+
     if (opp_enabled) {
       if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL);
+
       if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL);
+
       if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL);
+
       if (ru->fh_north_out) {
-	print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
-	print_meas(&ru->compression,"compression",NULL,NULL);
-	print_meas(&ru->transport,"transport",NULL,NULL);
-	LOG_I(PHY,"ru->north_out_cnt = %d\n",ru->north_out_cnt);
+        print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
+        print_meas(&ru->compression,"compression",NULL,NULL);
+        print_meas(&ru->transport,"transport",NULL,NULL);
+        LOG_I(PHY,"ru->north_out_cnt = %d\n",ru->north_out_cnt);
       }
+
       if (ru->fh_south_out) LOG_I(PHY,"ru->south_out_cnt = %d\n",ru->south_out_cnt);
+
       if (ru->fh_north_asynch_in) LOG_I(PHY,"ru->north_in_cnt = %d\n",ru->north_in_cnt);
-      
     }
   }
-  
+
   return(NULL);
 }
 
@@ -1487,7 +1488,6 @@ void *ru_thread_tx( void *param ) {
     LOG_D(PHY,"ru_thread_tx (ru %d): Waiting for TX processing\n",ru->idx);
     // wait until eNBs are finished subframe RX n and TX n+4
     wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
-
     LOG_D(PHY,"ru_thread_tx: TX in %d.%d\n",ru->proc.frame_tx,ru->proc.subframe_tx);
 
     if (oai_exit) break;
@@ -1502,6 +1502,7 @@ void *ru_thread_tx( void *param ) {
       // do outgoing fronthaul (south) if needed
       if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
     }
+
     LOG_D(PHY,"ru_thread_tx: releasing RU TX in %d.%d\n",proc->frame_tx,proc->subframe_tx);
     release_thread(&proc->mutex_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
 
@@ -1509,34 +1510,35 @@ void *ru_thread_tx( void *param ) {
       eNB       = ru->eNB_list[i];
       eNB_proc  = &eNB->proc;
       L1_proc   = (get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)? &eNB_proc->L1_proc_tx : &eNB_proc->L1_proc;
-
       AssertFatal((ret=pthread_mutex_lock(&eNB_proc->mutex_RU_tx))==0,"mutex_lock returns %d\n",ret);
+
       for (int j=0; j<eNB->num_RU; j++) {
         if (ru == eNB->RU_list[j]) {
           if ((eNB_proc->RU_mask_tx&(1<<j)) > 0)
             LOG_E(PHY,"eNB %d frame %d, subframe %d : previous information from RU tx %d (num_RU %d,mask %x) has not been served yet!\n",
                   eNB->Mod_id,eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,eNB->num_RU,eNB_proc->RU_mask_tx);
 
+          eNB_proc->RU_mask_tx |= (1<<j);
+        } else if (/*eNB->RU_list[j]->state==RU_SYNC ||*/ (eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j] && ru->is_slave==0)) {
           eNB_proc->RU_mask_tx |= (1<<j);
         }
-        else if (/*eNB->RU_list[j]->state==RU_SYNC ||*/ (eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j] && ru->is_slave==0)){
-		eNB_proc->RU_mask_tx |= (1<<j);
-        }
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
+
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
       }
+
       if (eNB_proc->RU_mask_tx != (1<<eNB->num_RU)-1) {  // not all RUs have provided their information so return
-      	//printf("Not all RUs have provided their info (mask = %d), RU %d, num_RUs %d\n", eNB_proc->RU_mask_tx,ru->idx,eNB->num_RU);
+        //printf("Not all RUs have provided their info (mask = %d), RU %d, num_RUs %d\n", eNB_proc->RU_mask_tx,ru->idx,eNB->num_RU);
         AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
       } else { // all RUs TX are finished so send the ready signal to eNB processing
         eNB_proc->RU_mask_tx = 0;
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
         AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
         AssertFatal((ret=pthread_mutex_lock( &L1_proc->mutex_RUs))==0,"mutex_lock returns %d\n",ret);
         L1_proc->instance_cnt_RUs = 0;
-
         LOG_D(PHY,"ru_thread_tx: Signaling RU TX done in %d.%d\n",proc->frame_tx,proc->subframe_tx);
         // the thread can now be woken up
-        LOG_D(PHY,"ru_thread_tx: clearing mask and Waking up L1 thread\n"); 
+        LOG_D(PHY,"ru_thread_tx: clearing mask and Waking up L1 thread\n");
+
         if (pthread_cond_signal(&L1_proc->cond_RUs) != 0) {
           LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB TXnp4 thread\n");
           exit_fun( "ERROR pthread_cond_signal" );
@@ -1545,8 +1547,9 @@ void *ru_thread_tx( void *param ) {
         AssertFatal((ret=pthread_mutex_unlock( &L1_proc->mutex_RUs))==0,"mutex_unlock returns %d\n",ret);
       }
     }
+
     //printf("ru_thread_tx: Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask_tx %d\n",
-      //    eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,ru->wait_cnt,eNB_proc->RU_mask_tx);
+    //    eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,ru->wait_cnt,eNB_proc->RU_mask_tx);
   }
 
   release_thread(&proc->mutex_FH1,&proc->instance_cnt_FH1,"ru_thread_tx");
@@ -1564,7 +1567,6 @@ void *ru_thread( void *param ) {
   cpu_set_t cpuset;
   CPU_ZERO(&cpuset);
   // set default return value
-
 #if defined(PRE_SCD_THREAD)
   dlsch_ue_select_tbl_in_use = 1;
 #endif
@@ -1575,105 +1577,100 @@ void *ru_thread( void *param ) {
   pthread_setname_np( pthread_self(),"ru thread");
   LOG_I(PHY,"thread ru created id=%ld\n", syscall(__NR_gettid));
   LOG_I(PHY,"Starting RU %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
-  
+
   if(get_softmodem_params()->emulate_rf) {
     fill_rf_config(ru,ru->rf_config_file);
     init_frame_parms(&ru->frame_parms,1);
     phy_init_RU(ru);
-    
+
     if (setup_RU_buffers(ru)!=0) {
       printf("Exiting, cannot initialize RU Buffers\n");
       exit(-1);
     }
-    
+
     LOG_I(PHY, "Signaling main thread that RU %d is ready\n",ru->idx);
     AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
     AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     ru->state = RU_RUN;
-  }
-  else if (ru->has_ctrl_prt == 0){
+  } else if (ru->has_ctrl_prt == 0) {
     // There is no control port: start everything here
     LOG_I(PHY, "RU %d has not ctrl port\n",ru->idx);
-    if (ru->if_south == LOCAL_RF){
+
+    if (ru->if_south == LOCAL_RF) {
       fill_rf_config(ru,ru->rf_config_file);
       init_frame_parms(&ru->frame_parms,1);
       ru->frame_parms.nb_antennas_rx = ru->nb_rx;
       phy_init_RU(ru);
-      
-      
       openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
-      
+
       if (setup_RU_buffers(ru)!=0) {
-	printf("Exiting, cannot initialize RU Buffers\n");
-	exit(-1);
+        printf("Exiting, cannot initialize RU Buffers\n");
+        exit(-1);
       }
+
       AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
       RC.ru_mask &= ~(1<<ru->idx);
       pthread_cond_signal(&RC.ru_cond);
       AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     }
+
     AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
     AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
-    
     ru->state = RU_RUN;
-    
-    
   }
-  
+
   AssertFatal((ret=pthread_mutex_lock(&proc->mutex_FH1))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_FH1 = 0;
   pthread_cond_signal(&proc->cond_FH1);
   AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH1))==0,"mutex_unlock returns %d\n",ret);
 
   while (!oai_exit) {
-    
     if (ru->if_south != LOCAL_RF && ru->is_slave==1) {
       ru->wait_cnt = 100;
-    }
-    else { 
+    } else {
       ru->wait_cnt = 0;
       ru->wait_check = 0;
     }
-    
-    
+
     // wait to be woken up
     if (ru->function!=eNodeB_3GPP && ru->has_ctrl_prt == 1) {
       if (wait_on_condition(&ru->proc.mutex_ru,&ru->proc.cond_ru_thread,&ru->proc.instance_cnt_ru,"ru_thread")<0) break;
-    }
-    else wait_sync("ru_thread");
-    
+    } else wait_sync("ru_thread");
+
     if(!(get_softmodem_params()->emulate_rf)) {
       if (ru->is_slave == 0) AssertFatal(ru->state == RU_RUN,"ru-%d state = %s != RU_RUN\n",ru->idx,ru_states[ru->state]);
-      else if (ru->is_slave == 1) AssertFatal(ru->state == RU_SYNC || ru->state == RU_RUN || ru->state == RU_CHECK_SYNC,"ru %d state = %s != RU_SYNC or RU_RUN or RU_CHECK_SYNC\n",ru->idx,ru_states[ru->state]); 
+      else if (ru->is_slave == 1) AssertFatal(ru->state == RU_SYNC || ru->state == RU_RUN ||
+                                                ru->state == RU_CHECK_SYNC,"ru %d state = %s != RU_SYNC or RU_RUN or RU_CHECK_SYNC\n",ru->idx,ru_states[ru->state]);
+
       // Start RF device if any
       if (ru->start_rf) {
-	if (ru->start_rf(ru) != 0)
-	  LOG_E(HW,"Could not start the RF device\n");
-	else LOG_I(PHY,"RU %d rf device ready\n",ru->idx);
-      }
-      else LOG_D(PHY,"RU %d no rf device\n",ru->idx);
+        if (ru->start_rf(ru) != 0)
+          LOG_E(HW,"Could not start the RF device\n");
+        else LOG_I(PHY,"RU %d rf device ready\n",ru->idx);
+      } else LOG_D(PHY,"RU %d no rf device\n",ru->idx);
     }
+
     // if an asnych_rxtx thread exists
     // wakeup the thread because the devices are ready at this point
-    
+
     if ((ru->fh_south_asynch_in)||(ru->fh_north_asynch_in)) {
       AssertFatal((ret=pthread_mutex_lock(&proc->mutex_asynch_rxtx))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_asynch_rxtx=0;
       pthread_cond_signal(&proc->cond_asynch_rxtx);
       AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_asynch_rxtx))==0,"mutex_unlock returns %d\n",ret);
     } else LOG_D(PHY,"RU %d no asynch_south interface\n",ru->idx);
-    
+
     // if this is a slave RRU, try to synchronize on the DL frequency
     if ((ru->is_slave == 1) && (ru->if_south == LOCAL_RF)) do_ru_synch(ru);
-    
+
     LOG_D(PHY,"Starting steady-state operation\n");
+
     // This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
     while (ru->state == RU_RUN || ru->state == RU_CHECK_SYNC) {
-      
       // these are local subframe/frame counters to check that we are in synch with the fronthaul timing.
       // They are set on the first rx/tx in the underly FH routines.
       if (subframe==9) {
@@ -1683,159 +1680,159 @@ void *ru_thread( void *param ) {
       } else {
         subframe++;
       }
-      
+
       // synchronization on input FH interface, acquire signals/data and block
       if (ru->fh_south_in) ru->fh_south_in(ru,&frame,&subframe);
       else AssertFatal(1==0, "No fronthaul interface at south port");
-      
+
 #ifdef PHY_TX_THREAD
-      if(first_phy_tx == 0)
-	{ 
-	  phy_tx_end = 0;
-	  phy_tx_txdataF_end = 0;
-          AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_phy_tx))==0,"[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
-
-	  if (ru->proc.instance_cnt_phy_tx==-1) {
-	    ++ru->proc.instance_cnt_phy_tx;
-	    
-	    // the thread can now be woken up
-	    AssertFatal(pthread_cond_signal(&ru->proc.cond_phy_tx) == 0, "ERROR pthread_cond_signal for phy_tx thread\n");
-	  }else{
-	    LOG_E(PHY,"phy tx thread busy, skipping\n");
-	    ++ru->proc.instance_cnt_phy_tx;
-	  }
-          AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_phy_tx ))==0,"mutex_unlock returns %d\n",ret);
-	} else { 
+
+      if(first_phy_tx == 0) {
+        phy_tx_end = 0;
+        phy_tx_txdataF_end = 0;
+        AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_phy_tx))==0,"[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
+
+        if (ru->proc.instance_cnt_phy_tx==-1) {
+          ++ru->proc.instance_cnt_phy_tx;
+          // the thread can now be woken up
+          AssertFatal(pthread_cond_signal(&ru->proc.cond_phy_tx) == 0, "ERROR pthread_cond_signal for phy_tx thread\n");
+        } else {
+          LOG_E(PHY,"phy tx thread busy, skipping\n");
+          ++ru->proc.instance_cnt_phy_tx;
+        }
+
+        AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_phy_tx ))==0,"mutex_unlock returns %d\n",ret);
+      } else {
         phy_tx_end = 1;
         phy_tx_txdataF_end = 1;
       }
+
       first_phy_tx = 0;
 #endif
-      
+
       if (ru->stop_rf && ru->cmd == STOP_RU) {
         ru->stop_rf(ru);
         ru->state = RU_IDLE;
         ru->cmd   = EMPTY;
         LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
         break;
-      }
-      else if (ru->cmd == STOP_RU) {
+      } else if (ru->cmd == STOP_RU) {
         ru->state = RU_IDLE;
         ru->cmd   = EMPTY;
         LOG_I(PHY,"RU %d stopped\n",ru->idx);
         break;
       }
+
       if (oai_exit == 1) break;
-      
+
       if (ru->wait_cnt > 0) {
-	
         ru->wait_cnt--;
         LOG_D(PHY,"RU thread %d, frame %d, subframe %d, wait_cnt %d \n",ru->idx, frame, subframe, ru->wait_cnt);
-	
+
         if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=20 && subframe == 5 && frame != RC.ru[0]->proc.frame_rx && resynch_done == 0) {
-	  // Send RRU_frame adjust
+          // 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;
+          ((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 %d\n", RC.ru[0]->proc.frame_rx,ru->idx);
           AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),"Failed to send msg to RAU\n");
           resynch_done=1;
         }
+
         wakeup_L1s(ru);
-      }
-      else {
-	
+      } else {
         LOG_D(PHY,"RU thread %d, frame %d, subframe %d \n",
               ru->idx,frame,subframe);
-	
+
         if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) {
           LOG_D(PHY,"Waking up prach for %d.%d\n",proc->frame_rx,proc->subframe_rx);
           wakeup_prach_ru(ru);
         }
-	
-	
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
         else if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>1))
           wakeup_prach_ru_br(ru);
+
 #endif
-	
-	// adjust for timing offset between RU
-	if (ru->idx!=0) proc->frame_tx = (proc->frame_tx+proc->frame_offset)&1023;
-	
-	// At this point, all information for subframe has been received on FH interface
-	// If this proc is to provide synchronization, do so
-	wakeup_slaves(proc);
-	
+
+        // adjust for timing offset between RU
+        if (ru->idx!=0) proc->frame_tx = (proc->frame_tx+proc->frame_offset)&1023;
+
+        // At this point, all information for subframe has been received on FH interface
+        // If this proc is to provide synchronization, do so
+        wakeup_slaves(proc);
+
         // do RX front-end processing (frequency-shift, dft) if needed
-	if (ru->feprx) ru->feprx(ru);
-	
+        if (ru->feprx) ru->feprx(ru);
+
         // wakeup all eNB processes waiting for this RU
         AssertFatal((ret=pthread_mutex_lock(&proc->mutex_eNBs))==0,"mutex_lock returns %d\n",ret);
-	if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
+
+        if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
+
         AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_eNBs))==0,"mutex_unlock returns %d\n",ret);
-	
 #if defined(PRE_SCD_THREAD)
-	new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use;
-	dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use;
-	memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
-	memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX);
+        new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use;
+        dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use;
+        memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
+        memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX);
         AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_pre_scd))==0,"[eNB] error locking proc mutex for eNB pre scd\n");
-	
-	ru->proc.instance_pre_scd++;
-	
-	if (ru->proc.instance_pre_scd == 0) {
-	  if (pthread_cond_signal(&ru->proc.cond_pre_scd) != 0) {
-	    LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB pre scd\n" );
-	    exit_fun( "ERROR pthread_cond_signal cond_pre_scd" );
-	  }
-	}else{
-	  LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n",
-		 frame,subframe,ru->proc.instance_pre_scd );
-	}
-
-	AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
+        ru->proc.instance_pre_scd++;
 
+        if (ru->proc.instance_pre_scd == 0) {
+          if (pthread_cond_signal(&ru->proc.cond_pre_scd) != 0) {
+            LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB pre scd\n" );
+            exit_fun( "ERROR pthread_cond_signal cond_pre_scd" );
+          }
+        } else {
+          LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n",
+                 frame,subframe,ru->proc.instance_pre_scd );
+        }
+
+        AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
 #endif
-	// wakeup all eNB processes waiting for this RU
-	if (ru->num_eNB>0) wakeup_L1s(ru);
-	
+
+        // wakeup all eNB processes waiting for this RU
+        if (ru->num_eNB>0) wakeup_L1s(ru);
+
 #ifndef PHY_TX_THREAD
-	
-	if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0) {
-	  // do TX front-end processing if needed (precoding and/or IDFTs)
-	  if (ru->feptx_prec) ru->feptx_prec(ru);
-	  
-	  // do OFDM if needed
-	  if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru);
-	  
-	  if(!(get_softmodem_params()->emulate_rf)) {
-	    // do outgoing fronthaul (south) if needed
-	    if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
-	    
-	    if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru);
-	  }
-	  
-	  proc->emulate_rf_busy = 0;
-	}
-	
+
+        if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0) {
+          // do TX front-end processing if needed (precoding and/or IDFTs)
+          if (ru->feptx_prec) ru->feptx_prec(ru);
+
+          // do OFDM if needed
+          if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru);
+
+          if(!(get_softmodem_params()->emulate_rf)) {
+            // do outgoing fronthaul (south) if needed
+            if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
+
+            if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru);
+          }
+
+          proc->emulate_rf_busy = 0;
+        }
+
 #else
-	struct timespec time_req, time_rem;
-	time_req.tv_sec = 0;
-	time_req.tv_nsec = 10000;
-	
-	while((!oai_exit)&&(phy_tx_end == 0)){
-	  nanosleep(&time_req,&time_rem);
-	  continue;
-	}
+        struct timespec time_req, time_rem;
+        time_req.tv_sec = 0;
+        time_req.tv_nsec = 10000;
+
+        while((!oai_exit)&&(phy_tx_end == 0)) {
+          nanosleep(&time_req,&time_rem);
+          continue;
+        }
+
 #endif
       } // else wait_cnt == 0
     } // ru->state = RU_RUN
   } // while !oai_exit
-  
+
   printf( "Exiting ru_thread \n");
-  
+
   if (!(get_softmodem_params()->emulate_rf)) {
     if (ru->stop_rf != NULL) {
       if (ru->stop_rf(ru) != 0)
@@ -1843,9 +1840,8 @@ void *ru_thread( void *param ) {
       else LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
     }
   }
-  
-  return NULL;
 
+  return NULL;
 }
 
 
@@ -1857,7 +1853,6 @@ void *ru_thread_synch(void *arg) {
   int64_t avg;
   static int ru_thread_synch_status=0;
   int cnt=0;
-
   thread_top_init("ru_thread_synch",0,5000000,10000000,10000000);
   wait_sync("ru_thread_synch");
   // initialize variables for PSS detection
@@ -1872,37 +1867,36 @@ void *ru_thread_synch(void *arg) {
       // run intial synch like UE
       LOG_I(PHY,"Running initial synchronization\n");
       ru->rx_offset = ru_sync_time(ru,
-				   &peak_val,
-				   &avg);
+                                   &peak_val,
+                                   &avg);
       LOG_I(PHY,"RU synch cnt %d: %d, val %llu (%d dB,%d dB)\n",cnt,ru->rx_offset,(unsigned long long)peak_val,dB_fixed64(peak_val),dB_fixed64(avg));
       cnt++;
+
       //if (/*ru->rx_offset >= 0*/dB_fixed(peak_val)>=85 && cnt>10) {
       if (ru->rx_offset >= 0 && avg>0 && dB_fixed(peak_val/avg)>=15 && cnt>10) {
-	LOG_I(PHY,"Estimated peak_val %d dB, avg %d => timing offset %llu\n",dB_fixed(peak_val),dB_fixed(avg),(unsigned long long int)ru->rx_offset);
-	ru->in_synch = 1;
-/*
-        LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
-        LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
-        LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
-  */      
-//exit(-1);
+        LOG_I(PHY,"Estimated peak_val %d dB, avg %d => timing offset %llu\n",dB_fixed(peak_val),dB_fixed(avg),(unsigned long long int)ru->rx_offset);
+        ru->in_synch = 1;
+        /*
+                LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
+                LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
+                LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
+          */
+        //exit(-1);
       } // sync_pos > 0
-      else //AssertFatal(cnt<1000,"Cannot find synch reference\n");
-          { 
-              if (cnt>200) {
-                 LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
-                 LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
-                 LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
-
-                 exit(-1);
-              }
-          }
+      else { //AssertFatal(cnt<1000,"Cannot find synch reference\n");
+        if (cnt>200) {
+          LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
+          LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
+          LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
+          exit(-1);
+        }
+      }
     } // ru->in_synch==0
+
     if (release_thread(&ru->proc.mutex_synch,&ru->proc.instance_cnt_synch,"ru_synch_thread") < 0) break;
   } // oai_exit
 
   ru_sync_time_free(ru);
-
   ru_thread_synch_status = 0;
   return &ru_thread_synch_status;
 }
@@ -1993,13 +1987,11 @@ static void *eNB_thread_phy_tx( void *param ) {
     if (wait_on_condition(&proc->mutex_phy_tx,&proc->cond_phy_tx,&proc->instance_cnt_phy_tx,"eNB_phy_tx_thread") < 0) break;
 
     LOG_D(PHY,"Running eNB phy tx procedures\n");
-
     AssertFatal(ru->num_eNB == 1, "handle multiple L1 case\n");
     L1_proc.subframe_tx = proc->subframe_phy_tx;
     L1_proc.frame_tx = proc->frame_phy_tx;
     phy_procedures_eNB_TX(eNB_list[0], &L1_proc, 1);
     phy_tx_txdataF_end = 1;
-
     AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_rf_tx))==0,"[RU] ERROR pthread_mutex_lock for rf tx thread (IC %d)\n", ru->proc.instance_cnt_rf_tx);
 
     if (ru->proc.instance_cnt_rf_tx==-1) {
@@ -2097,26 +2089,23 @@ extern void kill_fep_thread(RU_t *ru);
 extern void kill_feptx_thread(RU_t *ru);
 
 extern void configure_ru(int idx,
-		  void *arg);
+                         void *arg);
 
 void reset_proc(RU_t *ru) {
-
   int i=0;
   RU_proc_t *proc;
-
   AssertFatal(ru != NULL, "ru is null\n");
   proc = &ru->proc;
-
   proc->ru = ru;
   proc->first_rx                 = 1;
   proc->first_tx                 = 1;
   proc->frame_offset             = 0;
   proc->frame_tx_unwrap          = 0;
 
-  for (i=0;i<10;i++) proc->symbol_mask[i]=0;
+  for (i=0; i<10; i++) proc->symbol_mask[i]=0;
 }
 
-extern void* ru_thread_control( void* param );
+extern void *ru_thread_control( void *param );
 
 void init_RU_proc(RU_t *ru) {
   int i=0,ret;
@@ -2126,7 +2115,6 @@ void init_RU_proc(RU_t *ru) {
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   pthread_attr_t *attr_prach_br=NULL;
 #endif
-
 #ifndef OCP_FRAMEWORK
   LOG_I(PHY,"Initializing RU proc %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
 #endif
@@ -2139,11 +2127,8 @@ void init_RU_proc(RU_t *ru) {
   proc->instance_cnt_FH1         = -1;
   proc->instance_cnt_emulateRF   = -1;
   proc->instance_cnt_asynch_rxtx = -1;
-
-  proc->instance_cnt_ru 	 = -1;
-
+  proc->instance_cnt_ru    = -1;
   proc->instance_cnt_eNBs        = -1;
-
   proc->first_rx                 = 1;
   proc->first_tx                 = 1;
   proc->frame_offset             = 0;
@@ -2160,7 +2145,6 @@ void init_RU_proc(RU_t *ru) {
   pthread_mutex_init( &proc->mutex_emulateRF,NULL);
   pthread_mutex_init( &proc->mutex_eNBs, NULL);
   pthread_mutex_init( &proc->mutex_ru,NULL);
-
   pthread_cond_init( &proc->cond_prach, NULL);
   pthread_cond_init( &proc->cond_FH, NULL);
   pthread_cond_init( &proc->cond_FH1, NULL);
@@ -2169,7 +2153,6 @@ void init_RU_proc(RU_t *ru) {
   pthread_cond_init( &proc->cond_synch,NULL);
   pthread_cond_init( &proc->cond_eNBs, NULL);
   pthread_cond_init( &proc->cond_ru_thread,NULL);
-
   pthread_attr_init( &proc->attr_FH);
   pthread_attr_init( &proc->attr_FH1);
   pthread_attr_init( &proc->attr_emulateRF);
@@ -2202,11 +2185,10 @@ void init_RU_proc(RU_t *ru) {
   attr_prach_br  = &proc->attr_prach_br;
 #endif
 #endif
-  if (ru->function!=eNodeB_3GPP) pthread_create( &proc->pthread_ctrl, attr_ctrl, ru_thread_control, (void*)ru );
-  
 
-  pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void*)ru );
+  if (ru->function!=eNodeB_3GPP) pthread_create( &proc->pthread_ctrl, attr_ctrl, ru_thread_control, (void *)ru );
 
+  pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void *)ru );
 #if defined(PRE_SCD_THREAD)
   proc->instance_pre_scd = -1;
   pthread_mutex_init( &proc->mutex_pre_scd, NULL);
@@ -2226,7 +2208,6 @@ void init_RU_proc(RU_t *ru) {
   if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)
     pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void *)ru );
 
-
   if (ru->function == NGFI_RRU_IF4p5) {
     pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void *)ru );
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -2236,41 +2217,36 @@ void init_RU_proc(RU_t *ru) {
     if (ru->is_slave == 1) pthread_create( &proc->pthread_synch, attr_synch, ru_thread_synch, (void *)ru);
 
     if ((ru->if_timing == synch_to_other) ||
-	(ru->function == NGFI_RRU_IF5) ||
-	(ru->function == NGFI_RRU_IF4p5)) {
-        LOG_I(PHY,"Starting ru_thread_asynch_rxtx, ru->is_slave %d, ru->generate_dmrs_sync %d\n",
-              ru->is_slave,ru->generate_dmrs_sync);
-	//generate_ul_ref_sigs();
-        //ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t)); 
-        pthread_create( &proc->pthread_asynch_rxtx, attr_asynch, ru_thread_asynch_rxtx, (void*)ru );
+        (ru->function == NGFI_RRU_IF5) ||
+        (ru->function == NGFI_RRU_IF4p5)) {
+      LOG_I(PHY,"Starting ru_thread_asynch_rxtx, ru->is_slave %d, ru->generate_dmrs_sync %d\n",
+            ru->is_slave,ru->generate_dmrs_sync);
+      //generate_ul_ref_sigs();
+      //ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t));
+      pthread_create( &proc->pthread_asynch_rxtx, attr_asynch, ru_thread_asynch_rxtx, (void *)ru );
     }
-    
-    
-  }
-  else if (ru->function == eNodeB_3GPP && ru->if_south == LOCAL_RF) { // DJP - need something else to distinguish between monolithic and PNF
+  } else if (ru->function == eNodeB_3GPP && ru->if_south == LOCAL_RF) { // DJP - need something else to distinguish between monolithic and PNF
     LOG_I(PHY,"%s() DJP - added creation of pthread_prach\n", __FUNCTION__);
-    pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru );
+    pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void *)ru );
     ru->state=RU_RUN;
     fill_rf_config(ru,ru->rf_config_file);
     init_frame_parms(&ru->frame_parms,1);
     ru->frame_parms.nb_antennas_rx = ru->nb_rx;
     phy_init_RU(ru);
-
-
     openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
 
-   if (setup_RU_buffers(ru)!=0) {
+    if (setup_RU_buffers(ru)!=0) {
       printf("Exiting, cannot initialize RU Buffers\n");
       exit(-1);
-   }
+    }
   }
 
   if (get_thread_worker_conf() == WORKER_ENABLE) {
     init_fep_thread(ru,NULL);
     init_feptx_thread(ru,NULL);
-  } 
-  if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void*)ru); 
- 
+  }
+
+  if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void *)ru);
 
   if (ru->function == eNodeB_3GPP) {
     usleep(10000);
@@ -2446,153 +2422,153 @@ void set_function_spec_param(RU_t *ru) {
   int ret;
 
   switch (ru->if_south) {
-  case LOCAL_RF:   // this is an RU with integrated RF (RRU, eNB)
-    if (ru->function ==  NGFI_RRU_IF5) {                 // IF5 RRU
-      ru->do_prach              = 0;                      // no prach processing in RU
-      ru->fh_north_in           = NULL;                   // no shynchronous incoming fronthaul from north
-      ru->fh_north_out          = fh_if5_north_out;       // need only to do send_IF5  reception
-      ru->fh_south_out          = tx_rf;                  // send output to RF
-      ru->fh_north_asynch_in    = fh_if5_north_asynch_in; // TX packets come asynchronously
-      ru->feprx                 = NULL;                   // nothing (this is a time-domain signal)
-      ru->feptx_ofdm            = NULL;                   // nothing (this is a time-domain signal)
-      ru->feptx_prec            = NULL;                   // nothing (this is a time-domain signal)
-      ru->start_if              = start_if;               // need to start the if interface for if5
-      ru->ifdevice.host_type    = RRU_HOST;
-      ru->rfdevice.host_type    = RRU_HOST;
-      ru->ifdevice.eth_params   = &ru->eth_params;
-      reset_meas(&ru->rx_fhaul);
-      reset_meas(&ru->tx_fhaul);
-      reset_meas(&ru->compression);
-      reset_meas(&ru->transport);
+    case LOCAL_RF:   // this is an RU with integrated RF (RRU, eNB)
+      if (ru->function ==  NGFI_RRU_IF5) {                 // IF5 RRU
+        ru->do_prach              = 0;                      // no prach processing in RU
+        ru->fh_north_in           = NULL;                   // no shynchronous incoming fronthaul from north
+        ru->fh_north_out          = fh_if5_north_out;       // need only to do send_IF5  reception
+        ru->fh_south_out          = tx_rf;                  // send output to RF
+        ru->fh_north_asynch_in    = fh_if5_north_asynch_in; // TX packets come asynchronously
+        ru->feprx                 = NULL;                   // nothing (this is a time-domain signal)
+        ru->feptx_ofdm            = NULL;                   // nothing (this is a time-domain signal)
+        ru->feptx_prec            = NULL;                   // nothing (this is a time-domain signal)
+        ru->start_if              = start_if;               // need to start the if interface for if5
+        ru->ifdevice.host_type    = RRU_HOST;
+        ru->rfdevice.host_type    = RRU_HOST;
+        ru->ifdevice.eth_params   = &ru->eth_params;
+        reset_meas(&ru->rx_fhaul);
+        reset_meas(&ru->tx_fhaul);
+        reset_meas(&ru->compression);
+        reset_meas(&ru->transport);
+        ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+        printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
+
+        if (ret<0) {
+          printf("Exiting, cannot initialize transport protocol\n");
+          exit(-1);
+        }
+      } else if (ru->function == NGFI_RRU_IF4p5) {
+        ru->do_prach              = 1;                        // do part of prach processing in RU
+        ru->fh_north_in           = NULL;                     // no synchronous incoming fronthaul from north
+        ru->fh_north_out          = fh_if4p5_north_out;       // send_IF4p5 on reception
+        ru->fh_south_out          = tx_rf;                    // send output to RF
+        ru->fh_north_asynch_in    = fh_if4p5_north_asynch_in; // TX packets come asynchronously
+        ru->feprx                 = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
+        ru->feptx_ofdm            = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
+        ru->feptx_prec            = NULL;
+        ru->start_if              = start_if;                 // need to start the if interface for if4p5
+        ru->ifdevice.host_type    = RRU_HOST;
+        ru->rfdevice.host_type    = RRU_HOST;
+        ru->ifdevice.eth_params   = &ru->eth_params;
+        reset_meas(&ru->rx_fhaul);
+        reset_meas(&ru->tx_fhaul);
+        reset_meas(&ru->compression);
+        reset_meas(&ru->transport);
+        ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+        printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
+
+        if (ret<0) {
+          printf("Exiting, cannot initialize transport protocol\n");
+          exit(-1);
+        }
+
+        malloc_IF4p5_buffer(ru);
+      } else if (ru->function == eNodeB_3GPP) {
+        ru->do_prach             = 0;                       // no prach processing in RU
+        ru->feprx                = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : ru_fep_full_2thread;                // RX DFTs
+        ru->feptx_ofdm           = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;              // this is fep with idft and precoding
+        ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
+        ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
+        ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
+        ru->start_if             = NULL;                    // no if interface
+        ru->rfdevice.host_type   = RAU_HOST;
+      }
+
+      ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
+      ru->fh_south_out           = tx_rf;                               // local synchronous RF TX
+      ru->start_rf               = start_rf;                            // need to start the local RF interface
+      ru->stop_rf                = stop_rf;
+      printf("configuring ru_id %d (start_rf %p)\n", ru->idx, start_rf);
+      /*
+        if (ru->function == eNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
+        fill_rf_config(ru,rf_config_file);
+        init_frame_parms(&ru->frame_parms,1);
+        phy_init_RU(ru);
+        }
+
+        ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
+        if (setup_RU_buffers(ru)!=0) {
+        printf("Exiting, cannot initialize RU Buffers\n");
+        exit(-1);
+        }*/
+      break;
+
+    case REMOTE_IF5: // the remote unit is IF5 RRU
+      ru->do_prach               = 0;
+      ru->feprx                  = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : fep_full;                   // this is frequency-shift + DFTs
+      ru->feptx_prec             = feptx_prec;                 // need to do transmit Precoding + IDFTs
+      ru->feptx_ofdm             = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;                 // need to do transmit Precoding + IDFTs
+
+      if (ru->if_timing == synch_to_other) {
+        ru->fh_south_in          = fh_slave_south_in;                  // synchronize to master
+      } else {
+        ru->fh_south_in          = fh_if5_south_in;     // synchronous IF5 reception
+        ru->fh_south_out         = fh_if5_south_out;    // synchronous IF5 transmission
+        ru->fh_south_asynch_in   = NULL;                // no asynchronous UL
+      }
+
+      ru->start_rf               = NULL;                 // no local RF
+      ru->stop_rf                = NULL;
+      ru->start_if               = start_if;             // need to start if interface for IF5
+      ru->ifdevice.host_type     = RAU_HOST;
+      ru->ifdevice.eth_params    = &ru->eth_params;
+      ru->ifdevice.configure_rru = configure_ru;
       ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
       printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-      
+
       if (ret<0) {
-	printf("Exiting, cannot initialize transport protocol\n");
-	exit(-1);
+        printf("Exiting, cannot initialize transport protocol\n");
+        exit(-1);
       }
-    } else if (ru->function == NGFI_RRU_IF4p5) {
-      ru->do_prach              = 1;                        // do part of prach processing in RU
-      ru->fh_north_in           = NULL;                     // no synchronous incoming fronthaul from north
-      ru->fh_north_out          = fh_if4p5_north_out;       // send_IF4p5 on reception
-      ru->fh_south_out          = tx_rf;                    // send output to RF
-      ru->fh_north_asynch_in    = fh_if4p5_north_asynch_in; // TX packets come asynchronously
-      ru->feprx                 = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
-      ru->feptx_ofdm            = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
-      ru->feptx_prec            = NULL;
-      ru->start_if              = start_if;                 // need to start the if interface for if4p5
-      ru->ifdevice.host_type    = RRU_HOST;
-      ru->rfdevice.host_type    = RRU_HOST;
-      ru->ifdevice.eth_params   = &ru->eth_params;
-      reset_meas(&ru->rx_fhaul);
-      reset_meas(&ru->tx_fhaul);
-      reset_meas(&ru->compression);
-      reset_meas(&ru->transport);
-      ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+
+      break;
+
+    case REMOTE_IF4p5:
+      ru->do_prach               = 0;
+      ru->feprx                  = NULL;                // DFTs
+      ru->feptx_prec             = feptx_prec;          // Precoding operation
+      ru->feptx_ofdm             = NULL;                // no OFDM mod
+      ru->fh_south_in            = fh_if4p5_south_in;   // synchronous IF4p5 reception
+      ru->fh_south_out           = fh_if4p5_south_out;  // synchronous IF4p5 transmission
+      ru->fh_south_asynch_in     = (ru->if_timing == synch_to_other) ? fh_if4p5_south_in : NULL;                // asynchronous UL if synch_to_other
+      ru->fh_north_out           = NULL;
+      ru->fh_north_asynch_in     = NULL;
+      ru->start_rf               = NULL;                // no local RF
+      ru->stop_rf                = NULL;
+      ru->start_if               = start_if;            // need to start if interface for IF4p5
+      ru->ifdevice.host_type     = RAU_HOST;
+      ru->ifdevice.eth_params    = &ru->eth_params;
+      ru->ifdevice.configure_rru = configure_ru;
+      ret = openair0_transport_load(&ru->ifdevice, &ru->openair0_cfg, &ru->eth_params);
       printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-      
+
       if (ret<0) {
-	printf("Exiting, cannot initialize transport protocol\n");
-	exit(-1);
+        printf("Exiting, cannot initialize transport protocol\n");
+        exit(-1);
       }
-      
+
       malloc_IF4p5_buffer(ru);
-    } else if (ru->function == eNodeB_3GPP) {
-      ru->do_prach             = 0;                       // no prach processing in RU
-      ru->feprx                = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : ru_fep_full_2thread;                // RX DFTs
-      ru->feptx_ofdm           = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;              // this is fep with idft and precoding
-      ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
-      ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
-      ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
-      ru->start_if             = NULL;                    // no if interface
-      ru->rfdevice.host_type   = RAU_HOST;
-    }
-    
-    ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
-    ru->fh_south_out           = tx_rf;                               // local synchronous RF TX
-    ru->start_rf               = start_rf;                            // need to start the local RF interface
-    ru->stop_rf                = stop_rf;
-    printf("configuring ru_id %d (start_rf %p)\n", ru->idx, start_rf);
-    /*
-      if (ru->function == eNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
-      fill_rf_config(ru,rf_config_file);
-      init_frame_parms(&ru->frame_parms,1);
-      phy_init_RU(ru);
-      }
-      
-      ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
-      if (setup_RU_buffers(ru)!=0) {
-      printf("Exiting, cannot initialize RU Buffers\n");
-      exit(-1);
-      }*/
-    break;
-    
-  case REMOTE_IF5: // the remote unit is IF5 RRU
-    ru->do_prach               = 0;
-    ru->feprx                  = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : fep_full;                   // this is frequency-shift + DFTs
-    ru->feptx_prec             = feptx_prec;                 // need to do transmit Precoding + IDFTs
-    ru->feptx_ofdm             = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;                 // need to do transmit Precoding + IDFTs
-    
-    if (ru->if_timing == synch_to_other) {
-      ru->fh_south_in          = fh_slave_south_in;                  // synchronize to master
-    } else {
-      ru->fh_south_in          = fh_if5_south_in;     // synchronous IF5 reception
-      ru->fh_south_out         = fh_if5_south_out;    // synchronous IF5 transmission
-      ru->fh_south_asynch_in   = NULL;                // no asynchronous UL
-    }
-    
-    ru->start_rf               = NULL;                 // no local RF
-    ru->stop_rf                = NULL;
-    ru->start_if               = start_if;             // need to start if interface for IF5
-    ru->ifdevice.host_type     = RAU_HOST;
-    ru->ifdevice.eth_params    = &ru->eth_params;
-    ru->ifdevice.configure_rru = configure_ru;
-    ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
-    printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-    
-    if (ret<0) {
-      printf("Exiting, cannot initialize transport protocol\n");
-      exit(-1);
-    }
-    
-    break;
-    
-  case REMOTE_IF4p5:
-    ru->do_prach               = 0;
-    ru->feprx                  = NULL;                // DFTs
-    ru->feptx_prec             = feptx_prec;          // Precoding operation
-    ru->feptx_ofdm             = NULL;                // no OFDM mod
-    ru->fh_south_in            = fh_if4p5_south_in;   // synchronous IF4p5 reception
-    ru->fh_south_out           = fh_if4p5_south_out;  // synchronous IF4p5 transmission
-    ru->fh_south_asynch_in     = (ru->if_timing == synch_to_other) ? fh_if4p5_south_in : NULL;                // asynchronous UL if synch_to_other
-    ru->fh_north_out           = NULL;
-    ru->fh_north_asynch_in     = NULL;
-    ru->start_rf               = NULL;                // no local RF
-    ru->stop_rf                = NULL;
-    ru->start_if               = start_if;            // need to start if interface for IF4p5
-    ru->ifdevice.host_type     = RAU_HOST;
-    ru->ifdevice.eth_params    = &ru->eth_params;
-    ru->ifdevice.configure_rru = configure_ru;
-    ret = openair0_transport_load(&ru->ifdevice, &ru->openair0_cfg, &ru->eth_params);
-    printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-    
-    if (ret<0) {
-      printf("Exiting, cannot initialize transport protocol\n");
-      exit(-1);
-    }
-    malloc_IF4p5_buffer(ru);
-    break;
-  
-  default:
-    LOG_E(PHY,"RU with invalid or unknown southbound interface type %d\n",ru->if_south);
-    break;
+      break;
+
+    default:
+      LOG_E(PHY,"RU with invalid or unknown southbound interface type %d\n",ru->if_south);
+      break;
   } // switch on interface type
 }
- 
+
 //extern void RCconfig_RU(void);
 
 void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t time_source,int send_dmrssync) {
-  
   int ru_id;
   RU_t *ru;
   PHY_VARS_eNB *eNB0= (PHY_VARS_eNB *)NULL;
@@ -2619,31 +2595,36 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
     ru->rf_config_file = rf_config_file;
     ru->idx          = ru_id;
     ru->ts_offset    = 0;
+
     if (ru->is_slave == 1) {
-       ru->in_synch    = 0;
-       ru->generate_dmrs_sync = 0; 	
-    }
-    else {
-       ru->in_synch    = 1;
-       ru->generate_dmrs_sync=send_dmrssync;
+      ru->in_synch    = 0;
+      ru->generate_dmrs_sync = 0;
+    } else {
+      ru->in_synch    = 1;
+      ru->generate_dmrs_sync=send_dmrssync;
     }
-    ru->cmd	     = EMPTY;
+
+    ru->cmd      = EMPTY;
     ru->south_out_cnt= 0;
     // use eNB_list[0] as a reference for RU frame parameters
     // NOTE: multiple CC_id are not handled here yet!
     ru->openair0_cfg.clock_source  = clock_source;
     ru->openair0_cfg.time_source = time_source;
+
     //ru->generate_dmrs_sync = (ru->is_slave == 0) ? 1 : 0;
     if ((ru->is_slave == 0) && (ru->ota_sync_enable == 1))
       ru->generate_dmrs_sync = 1;
     else
       ru->generate_dmrs_sync = 0;
+
     if (ru->generate_dmrs_sync == 1) {
       generate_ul_ref_sigs();
-      ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t)); 	
+      ru->dmrssync = (int16_t *)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t));
     }
+
     ru->wakeup_L1_sleeptime = 2000;
     ru->wakeup_L1_sleep_cnt_max  = 3;
+
     if (ru->num_eNB > 0) {
       LOG_D(PHY, "%s() RC.ru[%d].num_eNB:%d ru->eNB_list[0]:%p RC.eNB[0][0]:%p rf_config_file:%s\n", __FUNCTION__, ru_id, ru->num_eNB, ru->eNB_list[0], RC.eNB[0][0], ru->rf_config_file);
 
@@ -2662,68 +2643,70 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
     eNB0             = ru->eNB_list[0];
     LOG_D(PHY, "RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south);
     LOG_D(PHY, "eNB0:%p\n", eNB0);
-    if (eNB0)
-      {
-	if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
-	  AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
-
-	if (eNB0) {
-	  LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
-	  memcpy((void*)&ru->frame_parms,(void*)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
-
-	  // attach all RU to all eNBs in its list/
-	  LOG_D(PHY,"ru->num_eNB:%d eNB0->num_RU:%d\n", ru->num_eNB, eNB0->num_RU);
-	  for (i=0;i<ru->num_eNB;i++) {
-	    eNB0 = ru->eNB_list[i];
-	    eNB0->RU_list[eNB0->num_RU++] = ru;
-	  }
-	}
+
+    if (eNB0) {
+      if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
+        AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
+
+      if (eNB0) {
+        LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
+        memcpy((void *)&ru->frame_parms,(void *)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+        // attach all RU to all eNBs in its list/
+        LOG_D(PHY,"ru->num_eNB:%d eNB0->num_RU:%d\n", ru->num_eNB, eNB0->num_RU);
+
+        for (i=0; i<ru->num_eNB; i++) {
+          eNB0 = ru->eNB_list[i];
+          eNB0->RU_list[eNB0->num_RU++] = ru;
+        }
       }
+    }
+
     //    LOG_I(PHY,"Initializing RRU descriptor %d : (%s,%s,%d)\n",ru_id,ru_if_types[ru->if_south],eNB_timing[ru->if_timing],ru->function);
     LOG_I(PHY,"Initializing RRU descriptor %d : (%s,%s,%d)\n",ru_id,ru_if_types[ru->if_south],eNB_timing[ru->if_timing],ru->function);
     set_function_spec_param(ru);
     LOG_I(PHY,"Starting ru_thread %d, is_slave %d, send_dmrs %d\n",ru_id,ru->is_slave,ru->generate_dmrs_sync);
-
     init_RU_proc(ru);
   } // for ru_id
-  
+
   //  sleep(1);
   LOG_D(HW,"[lte-softmodem.c] RU threads created\n");
 }
 
 void stop_ru(RU_t *ru) {
-
 #if defined(PRE_SCD_THREAD) || defined(PHY_TX_THREAD)
   int *status;
 #endif
-  printf("Stopping RU %p processing threads\n",(void*)ru);
+  printf("Stopping RU %p processing threads\n",(void *)ru);
 #if defined(PRE_SCD_THREAD)
-  if(ru){
+
+  if(ru) {
     ru->proc.instance_pre_scd = 0;
     pthread_cond_signal( &ru->proc.cond_pre_scd );
-    pthread_join(ru->proc.pthread_pre_scd, (void**)&status );
+    pthread_join(ru->proc.pthread_pre_scd, (void **)&status );
     pthread_mutex_destroy(&ru->proc.mutex_pre_scd );
     pthread_cond_destroy(&ru->proc.cond_pre_scd );
   }
+
 #endif
 #ifdef PHY_TX_THREAD
-  if(ru){
-      ru->proc.instance_cnt_phy_tx = 0;
-      pthread_cond_signal(&ru->proc.cond_phy_tx);
-      pthread_join( ru->proc.pthread_phy_tx, (void**)&status );
-      pthread_mutex_destroy( &ru->proc.mutex_phy_tx );
-      pthread_cond_destroy( &ru->proc.cond_phy_tx );
-      ru->proc.instance_cnt_rf_tx = 0;
-      pthread_cond_signal(&ru->proc.cond_rf_tx);
-      pthread_join( ru->proc.pthread_rf_tx, (void**)&status );
-      pthread_mutex_destroy( &ru->proc.mutex_rf_tx );
-      pthread_cond_destroy( &ru->proc.cond_rf_tx );
+
+  if(ru) {
+    ru->proc.instance_cnt_phy_tx = 0;
+    pthread_cond_signal(&ru->proc.cond_phy_tx);
+    pthread_join( ru->proc.pthread_phy_tx, (void **)&status );
+    pthread_mutex_destroy( &ru->proc.mutex_phy_tx );
+    pthread_cond_destroy( &ru->proc.cond_phy_tx );
+    ru->proc.instance_cnt_rf_tx = 0;
+    pthread_cond_signal(&ru->proc.cond_rf_tx);
+    pthread_join( ru->proc.pthread_rf_tx, (void **)&status );
+    pthread_mutex_destroy( &ru->proc.mutex_rf_tx );
+    pthread_cond_destroy( &ru->proc.cond_rf_tx );
   }
+
 #endif
 }
 
-void stop_RU(int nb_ru)
-{
+void stop_RU(int nb_ru) {
   for (int inst = 0; inst < nb_ru; inst++) {
     LOG_I(PHY, "Stopping RU %d processing threads\n", inst);
     kill_RU_proc(RC.ru[inst]);
@@ -2845,8 +2828,9 @@ void RCconfig_RU(void) {
       if (RC.nb_L1_inst >0)
         RC.ru[j]->num_eNB                           = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
       else
-	RC.ru[j]->num_eNB                           = 0;
-      for (i=0;i<RC.ru[j]->num_eNB;i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];     
+        RC.ru[j]->num_eNB                           = 0;
+
+      for (i=0; i<RC.ru[j]->num_eNB; i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
 
       RC.ru[j]->has_ctrl_prt                        = 1;
 
@@ -2870,98 +2854,97 @@ void RCconfig_RU(void) {
       }
 
       if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
-	if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
-	  RC.ru[j]->if_south                        = LOCAL_RF;
-	  RC.ru[j]->function                        = eNodeB_3GPP;
+        if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
+          RC.ru[j]->if_south                        = LOCAL_RF;
+          RC.ru[j]->function                        = eNodeB_3GPP;
           RC.ru[j]->state                           = RU_RUN;
-	  printf("Setting function for RU %d to eNodeB_3GPP\n",j);
-        }
-        else { 
-          RC.ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));    
-          RC.ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr)); 
+          printf("Setting function for RU %d to eNodeB_3GPP\n",j);
+        } else {
+          RC.ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+          RC.ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
           RC.ru[j]->eth_params.remote_addr              = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
           RC.ru[j]->eth_params.my_portd                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
           RC.ru[j]->eth_params.remote_portd             = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
 
-	  // Check if control port set
-	  if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ){
-	        printf("Removing control port for RU %d\n",j);
+          // Check if control port set
+          if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ) {
+            printf("Removing control port for RU %d\n",j);
+            RC.ru[j]->has_ctrl_prt            = 0;
+          } else {
+            RC.ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+            RC.ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+            printf(" Control port %u \n",RC.ru[j]->eth_params.my_portc);
+          }
 
-		RC.ru[j]->has_ctrl_prt			      = 0;
+          if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
           }
-	  else {
-	    RC.ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-	    RC.ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-	    printf(" Control port %u \n",RC.ru[j]->eth_params.my_portc);
-	  
-	  }
-
-	  if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
-           
-	    printf("Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
-	  
-	    printf("Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
-	 
-	    printf("Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
-	
-	    printf("Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
-	  }
+
           printf("RU %d is_slave=%s\n",j,*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr));
+
           if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
           else RC.ru[j]->is_slave=0;
+
           printf("RU %d ota_sync_enabled=%s\n",j,*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr));
+
           if (strcmp(*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr), "yes") == 0) RC.ru[j]->ota_sync_enable=1;
           else RC.ru[j]->ota_sync_enable=0;
-	}
-	RC.ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
-	RC.ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
-	RC.ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
-	/* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
+        }
+
+        RC.ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
+        RC.ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
+        RC.ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
+        /* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
         RC.ru[j]->sf_extension                      = *(RUParamList.paramarray[j][RU_SF_EXTENSION_IDX].uptr);
-	for (i=0;i<RC.ru[j]->num_bands;i++) RC.ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i]; 
+
+        for (i=0; i<RC.ru[j]->num_bands; i++) RC.ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
       } //strcmp(local_rf, "yes") == 0
       else {
-	printf("RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
-	
-        RC.ru[j]->eth_params.local_if_name	      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));    
-        RC.ru[j]->eth_params.my_addr		      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr)); 
-        RC.ru[j]->eth_params.remote_addr	      = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
-        RC.ru[j]->eth_params.my_portc		      = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portc	      = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.my_portd		      = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portd	      = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
-	if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
-	}
+        printf("RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
+        RC.ru[j]->eth_params.local_if_name        = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+        RC.ru[j]->eth_params.my_addr          = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+        RC.ru[j]->eth_params.remote_addr        = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+        RC.ru[j]->eth_params.my_portc         = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+        RC.ru[j]->eth_params.remote_portc       = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+        RC.ru[j]->eth_params.my_portd         = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+        RC.ru[j]->eth_params.remote_portd       = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+
+        if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF5;
+          RC.ru[j]->function                     = NGFI_RAU_IF5;
+          RC.ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF5;
+          RC.ru[j]->function                     = NGFI_RAU_IF5;
+          RC.ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF4p5;
+          RC.ru[j]->function                     = NGFI_RAU_IF4p5;
+          RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF4p5;
+          RC.ru[j]->function                     = NGFI_RAU_IF4p5;
+          RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+        }
+
         if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
         else RC.ru[j]->is_slave=0;
       }  /* strcmp(local_rf, "yes") != 0 */