diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
index 9bbe0d4f5cfb03d36d26d306756f92cb81aa00d0..bf812c9e61fac9426aca975aeadb4e8d98ac97dc 100644
--- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
+++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
@@ -154,9 +154,9 @@ phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, u8 eNB_id) {
 #endif
 
 #ifdef DEBUG_PHY
-  if ((mac_xface->frame%100==0) || (mac_xface->frame < 10))
-    msg("[PHY][ADJUST_GAIN] frame %d, clear = %d, rx_power = %d, rx_power_fil = %d, rx_power_fil_dB = %d, coef=%d, ncoef=%d, rx_total_gain_dB = %d (%d,%d,%d)\n",
-	mac_xface->frame,clear,rx_power,rx_power_fil,rx_power_fil_dB,coef,ncoef,phy_vars_ue->rx_total_gain_dB,
+  if ((phy_vars_ue->frame%100==0) || (phy_vars_ue->frame < 10))
+    msg("[PHY][ADJUST_GAIN] frame %d,  rx_power = %d, rx_power_fil = %d, rx_power_fil_dB = %d, coef=%d, ncoef=%d, rx_total_gain_dB = %d (%d,%d,%d)\n",
+        phy_vars_ue->frame,rx_power,rx_power_fil,rx_power_fil_dB,coef,ncoef,phy_vars_ue->rx_total_gain_dB,
 	TARGET_RX_POWER,MAX_RF_GAIN,MIN_RF_GAIN);
 #endif //DEBUG_PHY
 	
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 6961b024a24a84c3cedd492383ffdf5f4afbb464..33bc7b94c03ff473a460a967c4b25a174244af16 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -69,11 +69,11 @@
 #define MAX_NUM_CHANNEL_BITS (14*1200*6)  // 14 symbols, 1200 REs, 12 bits/RE
 #define MAX_NUM_RE (14*1200)
 
-#define SI_RNTI 0xffff 
-#define M_RNTI 0xfffd
-#define P_RNTI  0xfffe
-#define CBA_RNTI 0xfff4
-#define C_RNTI  0x1234
+#define SI_RNTI  (rnti_t)0xffff
+#define M_RNTI   (rnti_t)0xfffd
+#define P_RNTI   (rnti_t)0xfffe
+#define CBA_RNTI (rnti_t)0xfff4
+#define C_RNTI   (rnti_t)0x1234
 
 #define PMI_2A_11 0
 #define PMI_2A_1m1 1
@@ -677,9 +677,9 @@ typedef struct {
   /// Position of first CCE of the dci
   unsigned int nCCE;
   /// flag to indicate that this is a RA response
-  uint8_t ra_flag;
+  boolean_t ra_flag;
   /// rnti
-  uint16_t rnti;
+  rnti_t rnti;
   /// Format
   DCI_format_t format;
   /// DCI pdu
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 5924c4a5177953c00e172331cab2ebea5638075c..dd02ea027ef1d02de55b7ad0ae1afd11c9cc4908 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -261,7 +261,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
 int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) {
 
   unsigned int success=0;
-  u8 eNB,UE_id,i,j,number_of_cards=1;
+  u8 eNB,UE_id,i,j,number_of_cards_l=1;
   u32 ulsch_errors=0;
   u32 ulsch_round_attempts[4]={0,0,0,0},ulsch_round_errors[4]={0,0,0,0};
   u32 harq_pid_ul, harq_pid_dl;
@@ -277,9 +277,9 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) {
   phy_vars_eNB->total_system_throughput = 0;//phy_vars_eNB->eNB_UE_stats[UE_id].total_transmitted_bits + phy_vars_eNB->total_system_throughput;
   // }
 
-  for (eNB=0;eNB<number_of_cards;eNB++) {
+  for (eNB=0;eNB<number_of_cards_l;eNB++) {
     len += sprintf(&buffer[len],"[eNB PROC] eNB %d/%d Frame %d: RX Gain %d dB, I0 %d dBm (%d,%d) dB \n",
-		   eNB,number_of_cards,
+		   eNB,number_of_cards_l,
 		   phy_vars_eNB->frame,
 		   phy_vars_eNB->rx_total_gain_eNB_dB,
 		   phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_tot_dBm,
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 87b8813b5e665ef72fe03d65087c5b96c263f939..d0fb239c973b632c383c28e8544b5e8232959890 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -25,7 +25,7 @@
   Forums       : http://forums.eurecom.fsr/openairinterface
   Address      : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
 
-*******************************************************************************/
+ *******************************************************************************/
 
 /*! \file phy_procedures_lte_eNB.c
  * \brief Implementation of eNB procedures from 36.213 LTE specifications
@@ -49,7 +49,7 @@
 #include "SCHED/phy_procedures_emos.h"
 #endif
 
-#define DEBUG_PHY_PROC
+#define DEBUG_PHY_PROC 1
 //#define DEBUG_ULSCH
 
 #include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
@@ -112,35 +112,35 @@ extern int rx_sig_fifo;
 static unsigned char I0_clear = 1;
 
 u8 is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,u8 UE_id,u8 subframe) {
-  
+
   LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking for SR TXOp(sr_ConfigIndex %d)\n",
-    phy_vars_eNB->Mod_id,phy_vars_eNB->ulsch_eNB[UE_id]->rnti,phy_vars_eNB->frame,subframe,
-    phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex);
-  
+      phy_vars_eNB->Mod_id,phy_vars_eNB->ulsch_eNB[UE_id]->rnti,phy_vars_eNB->frame,subframe,
+      phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex);
+
   if (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 4) {        // 5 ms SR period
-    if ((subframe%5) == phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex)
-      return(1);
+      if ((subframe%5) == phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex)
+        return(1);
   }
   else if (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 14) {  // 10 ms SR period
-    if (subframe==(phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-5))
-      return(1);
+      if (subframe==(phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-5))
+        return(1);
   }
   else if (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 34) { // 20 ms SR period
-    if ((10*(phy_vars_eNB->frame&1)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-15))
-      return(1);
+      if ((10*(phy_vars_eNB->frame&1)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-15))
+        return(1);
   }
   else if (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 74) { // 40 ms SR period
-    if ((10*(phy_vars_eNB->frame&3)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-35))
-      return(1);
+      if ((10*(phy_vars_eNB->frame&3)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-35))
+        return(1);
   }
   else if (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 154) { // 80 ms SR period
-    if ((10*(phy_vars_eNB->frame&7)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-75))
-      return(1);
+      if ((10*(phy_vars_eNB->frame&7)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-75))
+        return(1);
   }
 
   return(0);
 }
- 
+
 s32 add_ue(s16 rnti, PHY_VARS_eNB *phy_vars_eNB) {
   u8 i;
 
@@ -148,19 +148,19 @@ s32 add_ue(s16 rnti, PHY_VARS_eNB *phy_vars_eNB) {
   LOG_I(PHY,"[eNB %d] Adding UE with rnti %x\n",phy_vars_eNB->Mod_id,rnti);
   //#endif
   for (i=0;i<NUMBER_OF_UE_MAX;i++) {
-    if ((phy_vars_eNB->dlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) {
-      LOG_E(PHY,"Can't add UE, not enough memory allocated\n");
-      return(-1);
-    }
-    else {
-      if (phy_vars_eNB->eNB_UE_stats[i].crnti==0) {
-	LOG_I(PHY,"UE_id %d associated with rnti %x\n",i, rnti);
-	phy_vars_eNB->dlsch_eNB[i][0]->rnti = rnti;
-	phy_vars_eNB->ulsch_eNB[i]->rnti = rnti;
-	phy_vars_eNB->eNB_UE_stats[i].crnti = rnti;
-	return(i);
+      if ((phy_vars_eNB->dlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) {
+          LOG_E(PHY,"Can't add UE, not enough memory allocated\n");
+          return(-1);
+      }
+      else {
+          if (phy_vars_eNB->eNB_UE_stats[i].crnti==0) {
+              LOG_I(PHY,"UE_id %d associated with rnti %x\n",i, rnti);
+              phy_vars_eNB->dlsch_eNB[i][0]->rnti = rnti;
+              phy_vars_eNB->ulsch_eNB[i]->rnti = rnti;
+              phy_vars_eNB->eNB_UE_stats[i].crnti = rnti;
+              return(i);
+          }
       }
-    }
   }
   return(-1);
 }
@@ -172,20 +172,20 @@ s32 remove_ue(u16 rnti, PHY_VARS_eNB *phy_vars_eNB, u8 abstraction_flag) {
   LOG_I(PHY,"eNB %d removing UE with rnti %x\n",phy_vars_eNB->Mod_id,rnti);
   //#endif
   for (i=0;i<NUMBER_OF_UE_MAX;i++) {
-    if ((phy_vars_eNB->dlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) {
-      LOG_E(PHY,"Can't remove UE, not enough memory allocated\n");
-      return(-1);
-    }
-    else {
-      if (phy_vars_eNB->eNB_UE_stats[i].crnti==rnti) {
-	//msg("[PHY] UE_id %d\n",i);
-	clean_eNb_dlsch(phy_vars_eNB->dlsch_eNB[i][0], abstraction_flag);
-	clean_eNb_ulsch(phy_vars_eNB->ulsch_eNB[i],abstraction_flag);
-	//phy_vars_eNB->eNB_UE_stats[i].crnti = 0;
-	memset(&phy_vars_eNB->eNB_UE_stats[i],0,sizeof(LTE_eNB_UE_stats));
-	return(i);
+      if ((phy_vars_eNB->dlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) {
+          LOG_E(PHY,"Can't remove UE, not enough memory allocated\n");
+          return(-1);
+      }
+      else {
+          if (phy_vars_eNB->eNB_UE_stats[i].crnti==rnti) {
+              //msg("[PHY] UE_id %d\n",i);
+              clean_eNb_dlsch(phy_vars_eNB->dlsch_eNB[i][0], abstraction_flag);
+              clean_eNb_ulsch(phy_vars_eNB->ulsch_eNB[i],abstraction_flag);
+              //phy_vars_eNB->eNB_UE_stats[i].crnti = 0;
+              memset(&phy_vars_eNB->eNB_UE_stats[i],0,sizeof(LTE_eNB_UE_stats));
+              return(i);
+          }
       }
-    }
   }
 
   return(-1);
@@ -195,13 +195,13 @@ s8 find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB) {
   u8 i;
 
   for (i=0;i<NUMBER_OF_UE_MAX;i++) {
-    if (phy_vars_eNB->eNB_UE_stats[i].crnti==0) {
-      /*if ((phy_vars_eNB->dlsch_eNB[i]) && 
+      if (phy_vars_eNB->eNB_UE_stats[i].crnti==0) {
+          /*if ((phy_vars_eNB->dlsch_eNB[i]) &&
 	(phy_vars_eNB->dlsch_eNB[i][0]) && 
 	(phy_vars_eNB->dlsch_eNB[i][0]->rnti==0))*/ 
-      LOG_D(PHY,"Next free UE id is %d\n",i);
-      return(i);
-    }
+          LOG_D(PHY,"Next free UE id is %d\n",i);
+          return(i);
+      }
   }
   return(-1);
 }
@@ -217,67 +217,67 @@ int get_ue_active_harq_pid(u8 Mod_id,u16 rnti,u8 subframe,u8 *harq_pid,u8 *round
   u32 frame = PHY_vars_eNB_g[Mod_id]->frame;
 
   if (UE_id==-1) {
-    LOG_E(PHY,"Cannot find UE with rnti %x\n",rnti);
-    *round=0;
-    return(-1);
+      LOG_E(PHY,"Cannot find UE with rnti %x\n",rnti);
+      *round=0;
+      return(-1);
   }
 
   if (ul_flag == 0)  {// this is a DL request
-    DLSCH_ptr = PHY_vars_eNB_g[Mod_id]->dlsch_eNB[(u32)UE_id][0];
-    /*    
+      DLSCH_ptr = PHY_vars_eNB_g[Mod_id]->dlsch_eNB[(u32)UE_id][0];
+      /*
 	  if (subframe<4)
 	  subframe_m4 = subframe+6;
 	  else
 	  subframe_m4 = subframe-4;
-    */
+       */
 #ifdef DEBUG_PHY_PROC
-    LOG_D(PHY,"[eNB %d] get_ue_active_harq_pid: Frame %d subframe %d, current harq_id %d\n",
-	  Mod_id,frame,subframe,DLSCH_ptr->harq_ids[subframe]);
-#endif
-    // switch on TDD or FDD configuration here later
-    *harq_pid = DLSCH_ptr->harq_ids[subframe];
-    if ((*harq_pid<DLSCH_ptr->Mdlharq) && 
-	((DLSCH_ptr->harq_processes[*harq_pid]->round > 0))) {
-
-      *round = DLSCH_ptr->harq_processes[*harq_pid]->round;
-      LOG_D(PHY,"round %d\n",*round);
-    
-      //    else if ((subframe_m4==5) || (subframe_m4==6)) {
-      //      *harq_pid = 0;//DLSCH_ptr->harq_ids[subframe_m4];//Ankit
-      //     *round    = DLSCH_ptr->harq_processes[*harq_pid]->round;
-      //    }
-    }
-    else {
-      // get first free harq_pid (i.e. round 0)
-      for (i=0;i<DLSCH_ptr->Mdlharq;i++) {
-	if (DLSCH_ptr->harq_processes[i]!=NULL) {
-	  if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) {
-	    *harq_pid = i;//0;//i; //(Ankit)
-	    *round = 0;
-	    return(0);
-	  }
-	  else {
-	    LOG_D(PHY,"process %d is active\n",i);
-	  }
-	}
-	else {
-	  LOG_E(PHY,"[eNB %d] DLSCH process %d for rnti %x (UE_id %d) not allocated\n",Mod_id,i,rnti,UE_id);
-	  return(-1);
-	}
+      LOG_D(PHY,"[eNB %d] get_ue_active_harq_pid: Frame %d subframe %d, current harq_id %d\n",
+          Mod_id,frame,subframe,DLSCH_ptr->harq_ids[subframe]);
+#endif
+      // switch on TDD or FDD configuration here later
+      *harq_pid = DLSCH_ptr->harq_ids[subframe];
+      if ((*harq_pid<DLSCH_ptr->Mdlharq) &&
+          ((DLSCH_ptr->harq_processes[*harq_pid]->round > 0))) {
+
+          *round = DLSCH_ptr->harq_processes[*harq_pid]->round;
+          LOG_D(PHY,"round %d\n",*round);
+
+          //    else if ((subframe_m4==5) || (subframe_m4==6)) {
+          //      *harq_pid = 0;//DLSCH_ptr->harq_ids[subframe_m4];//Ankit
+          //     *round    = DLSCH_ptr->harq_processes[*harq_pid]->round;
+          //    }
+      }
+      else {
+          // get first free harq_pid (i.e. round 0)
+          for (i=0;i<DLSCH_ptr->Mdlharq;i++) {
+              if (DLSCH_ptr->harq_processes[i]!=NULL) {
+                  if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) {
+                      *harq_pid = i;//0;//i; //(Ankit)
+                      *round = 0;
+                      return(0);
+                  }
+                  else {
+                      LOG_D(PHY,"process %d is active\n",i);
+                  }
+              }
+              else {
+                  LOG_E(PHY,"[eNB %d] DLSCH process %d for rnti %x (UE_id %d) not allocated\n",Mod_id,i,rnti,UE_id);
+                  return(-1);
+              }
+          }
       }
-    }
   }
   else {  // This is a UL request
 
-    ULSCH_ptr = PHY_vars_eNB_g[Mod_id]->ulsch_eNB[(u32)UE_id];
-    ulsch_subframe = pdcch_alloc2ul_subframe(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,subframe);
-    ulsch_frame    = pdcch_alloc2ul_frame(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,frame,subframe);
-    // Note this is for TDD configuration 3,4,5 only
-    *harq_pid = subframe2harq_pid(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,
-				  ulsch_frame,
-				  ulsch_subframe);
-    *round    = ULSCH_ptr->harq_processes[*harq_pid]->round;
-    LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Checking HARQ, round %d\n",Mod_id,*harq_pid,frame,subframe,*round);
+      ULSCH_ptr = PHY_vars_eNB_g[Mod_id]->ulsch_eNB[(u32)UE_id];
+      ulsch_subframe = pdcch_alloc2ul_subframe(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,subframe);
+      ulsch_frame    = pdcch_alloc2ul_frame(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,frame,subframe);
+      // Note this is for TDD configuration 3,4,5 only
+      *harq_pid = subframe2harq_pid(&PHY_vars_eNB_g[Mod_id]->lte_frame_parms,
+          ulsch_frame,
+          ulsch_subframe);
+      *round    = ULSCH_ptr->harq_processes[*harq_pid]->round;
+      LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Checking HARQ, round %d\n",Mod_id,*harq_pid,frame,subframe,*round);
   }
   return(0);
 }
@@ -299,69 +299,69 @@ int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rn
     for (i=0;i<nCCE;i++)
     printf("%d.",CCE_table[i]);
     printf("\n");
-  */
+   */
   if (common_dci == 1) {
-    // check CCE(0 ... L-1)
-    nb_candidates = (L==4) ? 4 : 2;
-    for (m = 0 ; m < nb_candidates ; m++) {
-      search_space_free = 1;
-      for (l=0;l<L;l++) {
-	if (CCE_table[(m*L) + l] == 1) {
-	  search_space_free = 0;
-	  break;
-	}
-      }
-      if (search_space_free == 1) {
-	for (l=0;l<L;l++)
-	  CCE_table[(m*L)+l]=1;
-	return(m*L);
+      // check CCE(0 ... L-1)
+      nb_candidates = (L==4) ? 4 : 2;
+      for (m = 0 ; m < nb_candidates ; m++) {
+          search_space_free = 1;
+          for (l=0;l<L;l++) {
+              if (CCE_table[(m*L) + l] == 1) {
+                  search_space_free = 0;
+                  break;
+              }
+          }
+          if (search_space_free == 1) {
+              for (l=0;l<L;l++)
+                CCE_table[(m*L)+l]=1;
+              return(m*L);
+          }
       }
-    }
-    return(-1);
+      return(-1);
 
   }
   else {  // Find first available in ue specific search space
-          // according to procedure in Section 9.1.1 of 36.213 (v. 8.6)
-    // compute Yk
-    Yk = (unsigned int)rnti;
-
-    for (i=0;i<=subframe;i++)
-      Yk = (Yk*39827)%65537;
-
-    Yk = Yk % (nCCE/L);
-
-
-    switch (L) {
-    case 1:
-    case 2:
-      nb_candidates = 6;
-      break;
-    case 4:
-    case 8:
-      nb_candidates = 2;
-      break;
-    default:
-      DevParam(L, nCCE, rnti);
-      break;
-    }
-
-    //        LOG_I(PHY,"rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d\n",rnti,Yk,nCCE,nCCE/L,nb_candidates);
-
-    for (m = 0 ; m < nb_candidates ; m++) {
-      search_space_free = 1;
-      for (l=0;l<L;l++) {
-	if (CCE_table[(((Yk+m)%(nCCE/L))*L) + l] == 1) {
-	  search_space_free = 0;
-	  break;
-	}
-      }
-      if (search_space_free == 1) {
-	for (l=0;l<L;l++)
-	  CCE_table[(((Yk+m)%(nCCE/L))*L)+l]=1;
-	return(((Yk+m)%(nCCE/L))*L);
+      // according to procedure in Section 9.1.1 of 36.213 (v. 8.6)
+      // compute Yk
+      Yk = (unsigned int)rnti;
+
+      for (i=0;i<=subframe;i++)
+        Yk = (Yk*39827)%65537;
+
+      Yk = Yk % (nCCE/L);
+
+
+      switch (L) {
+      case 1:
+      case 2:
+        nb_candidates = 6;
+        break;
+      case 4:
+      case 8:
+        nb_candidates = 2;
+        break;
+      default:
+        DevParam(L, nCCE, rnti);
+        break;
+      }
+
+      //        LOG_I(PHY,"rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d\n",rnti,Yk,nCCE,nCCE/L,nb_candidates);
+
+      for (m = 0 ; m < nb_candidates ; m++) {
+          search_space_free = 1;
+          for (l=0;l<L;l++) {
+              if (CCE_table[(((Yk+m)%(nCCE/L))*L) + l] == 1) {
+                  search_space_free = 0;
+                  break;
+              }
+          }
+          if (search_space_free == 1) {
+              for (l=0;l<L;l++)
+                CCE_table[(((Yk+m)%(nCCE/L))*L)+l]=1;
+              return(((Yk+m)%(nCCE/L))*L);
+          }
       }
-    }
-    return(-1);
+      return(-1);
   }
 }
 
@@ -381,13 +381,13 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
   msg("[PHY][eNB %d] Frame %d, slot %d: Generating pilots for DL-S\n",
   phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot);
   #endif
-    
+
   for (sect_id=0;sect_id<number_of_cards;sect_id++) {
   if (abstraction_flag == 0) {
 
   for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
-	  
-	  
+
+
   #ifdef IFFT_FPGA
   memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id][aa][next_slot*(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)],
   0,(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)*sizeof(mod_sym_t));
@@ -404,13 +404,13 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
 
   msg("[PHY][eNB] Frame %d, subframe %d Generating PSS\n",
   phy_vars_eNB->frame,next_slot>>1);
-	
+
   generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
   4*AMP,
   &phy_vars_eNB->lte_frame_parms,
   2,
   next_slot);
-      
+
   }
   else {
   #ifdef PHY_ABSTRACTION
@@ -420,7 +420,7 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
   }
   }
   }
-*/ 
+ */
 
 void phy_procedures_eNB_S_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_type_t r_type) {
 
@@ -431,30 +431,30 @@ void phy_procedures_eNB_S_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,
 #endif    
 
   if (last_slot%2 == 0) {
-    for (sect_id=0;sect_id<number_of_cards;sect_id++) {
-    
-      if (abstraction_flag == 0) {
-	lte_eNB_I0_measurements(phy_vars_eNB,
-				sect_id,
-				phy_vars_eNB->first_run_I0_measurements);
-      }
+      for (sect_id=0;sect_id<number_of_cards;sect_id++) {
+
+          if (abstraction_flag == 0) {
+              lte_eNB_I0_measurements(phy_vars_eNB,
+                  sect_id,
+                  phy_vars_eNB->first_run_I0_measurements);
+          }
 #ifdef PHY_ABSTRACTION
-      else {
-	lte_eNB_I0_measurements_emul(phy_vars_eNB,
-				     sect_id);
-      }
+          else {
+              lte_eNB_I0_measurements_emul(phy_vars_eNB,
+                  sect_id);
+          }
 #endif
-    }
-    
-    if (I0_clear == 1)
-      I0_clear = 0;
+      }
+
+      if (I0_clear == 1)
+        I0_clear = 0;
   }
-  
+
 }
 
 #ifdef EMOS
 void phy_procedures_emos_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB) {
-  
+
   u8 aa;
   u16 last_subframe_emos;
   u16 pilot_pos1 = 3 - phy_vars_eNB->lte_frame_parms.Ncp, pilot_pos2 = 10 - 2*phy_vars_eNB->lte_frame_parms.Ncp;
@@ -466,44 +466,44 @@ void phy_procedures_emos_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_e
     last_subframe_emos = (last_slot-4)>>1;
   else 
     mac_xface->macphy_exit("should never happen");
-  */
+   */
   last_subframe_emos=0;
 
 #ifdef EMOS_CHANNEL
   //if (last_slot%2==1) // this is for all UL subframes
   if (last_slot==7) 
     for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_rx; aa++) {
-      memcpy(&emos_dump_eNB.channel[aa][last_subframe_emos*2*phy_vars_eNB->lte_frame_parms.N_RB_UL*12],              
-	     &phy_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][aa][phy_vars_eNB->lte_frame_parms.N_RB_UL*12*pilot_pos1],
-	     phy_vars_eNB->lte_frame_parms.N_RB_UL*12*sizeof(int));
-      memcpy(&emos_dump_eNB.channel[aa][(last_subframe_emos*2+1)*phy_vars_eNB->lte_frame_parms.N_RB_UL*12],          
-	     &phy_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][aa][phy_vars_eNB->lte_frame_parms.N_RB_UL*12*pilot_pos2],
-	     phy_vars_eNB->lte_frame_parms.N_RB_UL*12*sizeof(int));
+        memcpy(&emos_dump_eNB.channel[aa][last_subframe_emos*2*phy_vars_eNB->lte_frame_parms.N_RB_UL*12],
+            &phy_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][aa][phy_vars_eNB->lte_frame_parms.N_RB_UL*12*pilot_pos1],
+            phy_vars_eNB->lte_frame_parms.N_RB_UL*12*sizeof(int));
+        memcpy(&emos_dump_eNB.channel[aa][(last_subframe_emos*2+1)*phy_vars_eNB->lte_frame_parms.N_RB_UL*12],
+            &phy_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][aa][phy_vars_eNB->lte_frame_parms.N_RB_UL*12*pilot_pos2],
+            phy_vars_eNB->lte_frame_parms.N_RB_UL*12*sizeof(int));
     }
 #endif
 
   if (last_slot==9) {
-    emos_dump_eNB.timestamp = rt_get_time_ns();
-    emos_dump_eNB.frame_tx = phy_vars_eNB->frame;
-    emos_dump_eNB.rx_total_gain_dB = phy_vars_eNB->rx_total_gain_eNB_dB;
-    emos_dump_eNB.mimo_mode = phy_vars_eNB->transmission_mode[0];
-    memcpy(&emos_dump_eNB.PHY_measurements_eNB,
-           &phy_vars_eNB->PHY_measurements_eNB[0],
-           sizeof(PHY_MEASUREMENTS_eNB));
-    memcpy(&emos_dump_eNB.eNB_UE_stats[0],&phy_vars_eNB->eNB_UE_stats[0],NUMBER_OF_UE_MAX*sizeof(LTE_eNB_UE_stats));
-
-    bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_eNB, sizeof(fifo_dump_emos_eNB));
-    //bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, "test", sizeof("test"));
-    if (bytes!=sizeof(fifo_dump_emos_eNB)) {
-      LOG_W(PHY,"[eNB %d] Frame %d, slot %d, Problem writing EMOS data to FIFO (bytes=%d, size=%d)\n",
-            phy_vars_eNB->Mod_id,phy_vars_eNB->frame, last_slot,bytes,sizeof(fifo_dump_emos_eNB));
-    }
-    else {
-      if (phy_vars_eNB->frame%100==0) {
-        LOG_I(PHY,"[eNB %d] Frame %d (%d), slot %d, Writing %d bytes EMOS data to FIFO\n",
-              phy_vars_eNB->Mod_id,phy_vars_eNB->frame, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, last_slot, bytes);
+      emos_dump_eNB.timestamp = rt_get_time_ns();
+      emos_dump_eNB.frame_tx = phy_vars_eNB->frame;
+      emos_dump_eNB.rx_total_gain_dB = phy_vars_eNB->rx_total_gain_eNB_dB;
+      emos_dump_eNB.mimo_mode = phy_vars_eNB->transmission_mode[0];
+      memcpy(&emos_dump_eNB.PHY_measurements_eNB,
+          &phy_vars_eNB->PHY_measurements_eNB[0],
+          sizeof(PHY_MEASUREMENTS_eNB));
+      memcpy(&emos_dump_eNB.eNB_UE_stats[0],&phy_vars_eNB->eNB_UE_stats[0],NUMBER_OF_UE_MAX*sizeof(LTE_eNB_UE_stats));
+
+      bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_eNB, sizeof(fifo_dump_emos_eNB));
+      //bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, "test", sizeof("test"));
+      if (bytes!=sizeof(fifo_dump_emos_eNB)) {
+          LOG_W(PHY,"[eNB %d] Frame %d, slot %d, Problem writing EMOS data to FIFO (bytes=%d, size=%d)\n",
+              phy_vars_eNB->Mod_id,phy_vars_eNB->frame, last_slot,bytes,sizeof(fifo_dump_emos_eNB));
+      }
+      else {
+          if (phy_vars_eNB->frame%100==0) {
+              LOG_I(PHY,"[eNB %d] Frame %d (%d), slot %d, Writing %d bytes EMOS data to FIFO\n",
+                  phy_vars_eNB->Mod_id,phy_vars_eNB->frame, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, last_slot, bytes);
+          }
       }
-    }
   }
 }
 #endif
@@ -523,30 +523,30 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
     rand = (rand%5)+5;
     else
     rand = (rand%4)+5;
-  */
+   */
 
   DCI_pdu->Num_common_dci = 0;
   DCI_pdu->Num_ue_spec_dci=0;
 
   switch (subframe) {
-      case 5:
-      DCI_pdu->Num_common_dci = 1;
-      DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
-      DCI_pdu->dci_alloc[0].L          = 2;
-      DCI_pdu->dci_alloc[0].rnti       = SI_RNTI;
-      DCI_pdu->dci_alloc[0].format     = format1A;
-      DCI_pdu->dci_alloc[0].ra_flag    = 0;
+  case 5:
+    DCI_pdu->Num_common_dci = 1;
+    DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
+    DCI_pdu->dci_alloc[0].L          = 2;
+    DCI_pdu->dci_alloc[0].rnti       = SI_RNTI;
+    DCI_pdu->dci_alloc[0].format     = format1A;
+    DCI_pdu->dci_alloc[0].ra_flag    = 0;
 
-      BCCH_alloc_pdu.type              = 1;
-      BCCH_alloc_pdu.vrb_type          = 0;
-      BCCH_alloc_pdu.rballoc           = computeRIV(25,10,3);
-      BCCH_alloc_pdu.ndi               = 1;
-      BCCH_alloc_pdu.rv                = 1;
-      BCCH_alloc_pdu.mcs               = 1;
-      BCCH_alloc_pdu.harq_pid          = 0;
-      BCCH_alloc_pdu.TPC               = 1;      // set to 3 PRB
-      memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&BCCH_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
-      break;
+    BCCH_alloc_pdu.type              = 1;
+    BCCH_alloc_pdu.vrb_type          = 0;
+    BCCH_alloc_pdu.rballoc           = computeRIV(25,10,3);
+    BCCH_alloc_pdu.ndi               = 1;
+    BCCH_alloc_pdu.rv                = 1;
+    BCCH_alloc_pdu.mcs               = 1;
+    BCCH_alloc_pdu.harq_pid          = 0;
+    BCCH_alloc_pdu.TPC               = 1;      // set to 3 PRB
+    memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&BCCH_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
+    break;
   case 6:
     /*
       DCI_pdu->Num_ue_spec_dci = 1;
@@ -566,30 +566,30 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
       DLSCH_alloc_pdu1.rv1              = 0;
       DLSCH_alloc_pdu1.tpmi             = 0;
       memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1,sizeof(DCI2_5MHz_2A_M10PRB_TDD_t));
-    */
+     */
     break;
   case 7:
     DCI_pdu->Num_ue_spec_dci = 1;
-    
-    if (transmission_mode<3) {
-      //user 1
-      DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t; 
-      DCI_pdu->dci_alloc[0].L          = 2;
-      DCI_pdu->dci_alloc[0].rnti       = 0x1235;
-      DCI_pdu->dci_alloc[0].format     = format1;
-      DCI_pdu->dci_alloc[0].ra_flag    = 0;
-      
-      DLSCH_alloc_pdu.rballoc          = rballoc;
-      DLSCH_alloc_pdu.TPC              = 0;
-      DLSCH_alloc_pdu.dai              = 0;
-      DLSCH_alloc_pdu.harq_pid         = 0;
-      DLSCH_alloc_pdu.mcs              = openair_daq_vars.target_ue_dl_mcs;
-      //DLSCH_alloc_pdu.mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);      
-      DLSCH_alloc_pdu.ndi              = 1;
-      DLSCH_alloc_pdu.rv               = 0;
-      memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
 
-      /*
+    if (transmission_mode<3) {
+        //user 1
+        DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
+        DCI_pdu->dci_alloc[0].L          = 2;
+        DCI_pdu->dci_alloc[0].rnti       = 0x1235;
+        DCI_pdu->dci_alloc[0].format     = format1;
+        DCI_pdu->dci_alloc[0].ra_flag    = 0;
+
+        DLSCH_alloc_pdu.rballoc          = rballoc;
+        DLSCH_alloc_pdu.TPC              = 0;
+        DLSCH_alloc_pdu.dai              = 0;
+        DLSCH_alloc_pdu.harq_pid         = 0;
+        DLSCH_alloc_pdu.mcs              = openair_daq_vars.target_ue_dl_mcs;
+        //DLSCH_alloc_pdu.mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+        DLSCH_alloc_pdu.ndi              = 1;
+        DLSCH_alloc_pdu.rv               = 0;
+        memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+        /*
       //user2
       DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t; 
       DCI_pdu->dci_alloc[1].L          = 2;
@@ -606,50 +606,50 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
       DLSCH_alloc_pdu.ndi              = 1;
       DLSCH_alloc_pdu.rv               = 0;
       memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
-      */
+         */
     }
     else if (transmission_mode==5) {
-      DCI_pdu->Num_ue_spec_dci = 2;
-      // user 1
-      DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t; 
-      DCI_pdu->dci_alloc[0].L          = 3;
-      DCI_pdu->dci_alloc[0].rnti       = 0x1235;
-      DCI_pdu->dci_alloc[0].format     = format1E_2A_M10PRB;
-      DCI_pdu->dci_alloc[0].ra_flag    = 0;
-      
-      DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
-      DLSCH_alloc_pdu1E.rv               = 0;
-      DLSCH_alloc_pdu1E.ndi              = 1;
-      //DLSCH_alloc_pdu1E.mcs            = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
-      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
-      DLSCH_alloc_pdu1E.mcs              = openair_daq_vars.target_ue_dl_mcs;
-      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((phy_vars_eNB->frame%1024)%28);      
-      phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
-      DLSCH_alloc_pdu1E.harq_pid         = 0;
-      DLSCH_alloc_pdu1E.dai              = 0;
-      DLSCH_alloc_pdu1E.TPC              = 0;
-      DLSCH_alloc_pdu1E.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
-      DLSCH_alloc_pdu1E.rah              = 0;
-      DLSCH_alloc_pdu1E.dl_power_off     = 0; //0=second user present
-      memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-      
-      //user 2
-      DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t; 
-      DCI_pdu->dci_alloc[1].L          = 0;
-      DCI_pdu->dci_alloc[1].rnti       = 0x1236;
-      DCI_pdu->dci_alloc[1].format     = format1E_2A_M10PRB;
-      DCI_pdu->dci_alloc[1].ra_flag    = 0;
-      //DLSCH_alloc_pdu1E.mcs            = openair_daq_vars.target_ue_dl_mcs; 
-      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
-      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-      DLSCH_alloc_pdu1E.mcs            = (unsigned char) (((phy_vars_eNB->frame%1024)/3)%28);
-      phy_vars_eNB->eNB_UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
-      
-      memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
-      // set the precoder of the second UE orthogonal to the first
-      phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555); 
-      }
+        DCI_pdu->Num_ue_spec_dci = 2;
+        // user 1
+        DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+        DCI_pdu->dci_alloc[0].L          = 3;
+        DCI_pdu->dci_alloc[0].rnti       = 0x1235;
+        DCI_pdu->dci_alloc[0].format     = format1E_2A_M10PRB;
+        DCI_pdu->dci_alloc[0].ra_flag    = 0;
+
+        DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
+        DLSCH_alloc_pdu1E.rv               = 0;
+        DLSCH_alloc_pdu1E.ndi              = 1;
+        //DLSCH_alloc_pdu1E.mcs            = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
+        //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
+        DLSCH_alloc_pdu1E.mcs              = openair_daq_vars.target_ue_dl_mcs;
+        //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+        phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+        DLSCH_alloc_pdu1E.harq_pid         = 0;
+        DLSCH_alloc_pdu1E.dai              = 0;
+        DLSCH_alloc_pdu1E.TPC              = 0;
+        DLSCH_alloc_pdu1E.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
+        DLSCH_alloc_pdu1E.rah              = 0;
+        DLSCH_alloc_pdu1E.dl_power_off     = 0; //0=second user present
+        memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+        //user 2
+        DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+        DCI_pdu->dci_alloc[1].L          = 0;
+        DCI_pdu->dci_alloc[1].rnti       = 0x1236;
+        DCI_pdu->dci_alloc[1].format     = format1E_2A_M10PRB;
+        DCI_pdu->dci_alloc[1].ra_flag    = 0;
+        //DLSCH_alloc_pdu1E.mcs            = openair_daq_vars.target_ue_dl_mcs;
+        //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
+        //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+        DLSCH_alloc_pdu1E.mcs            = (unsigned char) (((phy_vars_eNB->frame%1024)/3)%28);
+        phy_vars_eNB->eNB_UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+
+        memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+        // set the precoder of the second UE orthogonal to the first
+        phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
+    }
     break;
     /*
   case 8:
@@ -671,7 +671,7 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
 
     memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&RA_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
     break;
-    */
+     */
   case 9:
     DCI_pdu->Num_ue_spec_dci = 2;
 
@@ -692,7 +692,7 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
     UL_alloc_pdu.dai     = 0;
     UL_alloc_pdu.cqi_req = 1;
     memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
-       
+
     DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ; 
     DCI_pdu->dci_alloc[1].L          = 2;
     DCI_pdu->dci_alloc[1].rnti       = 0x1236;
@@ -724,7 +724,7 @@ void fill_dci(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
 
   DCI_pdu->nCCE = 0;
   for (i=0;i<DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci;i++) {
-    DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
+      DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
   }
 
 }
@@ -744,40 +744,40 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
     rand = (rand%5)+5;
   else
     rand = (rand%4)+5;
-  */
+   */
 
   DCI_pdu->Num_common_dci = 0;
   DCI_pdu->Num_ue_spec_dci=0;
 
   switch (subframe) {
-   case 5:
+  case 5:
     DCI_pdu->Num_ue_spec_dci = 1;
-    
-    if (transmission_mode<3) {
-      //user 1
-      DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t; 
-      DCI_pdu->dci_alloc[0].L          = 2;
-      DCI_pdu->dci_alloc[0].rnti       = 0x1235;
-      DCI_pdu->dci_alloc[0].format     = format1;
-      DCI_pdu->dci_alloc[0].ra_flag    = 0;
-      
-      DLSCH_alloc_pdu.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
-      DLSCH_alloc_pdu.TPC              = 0;
-      DLSCH_alloc_pdu.dai              = 0;
-      DLSCH_alloc_pdu.harq_pid         = 1;
-      DLSCH_alloc_pdu.mcs              = openair_daq_vars.target_ue_dl_mcs;
-      DLSCH_alloc_pdu.ndi              = 1;
-      DLSCH_alloc_pdu.rv               = 0;
-      memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
 
-      /*
+    if (transmission_mode<3) {
+        //user 1
+        DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
+        DCI_pdu->dci_alloc[0].L          = 2;
+        DCI_pdu->dci_alloc[0].rnti       = 0x1235;
+        DCI_pdu->dci_alloc[0].format     = format1;
+        DCI_pdu->dci_alloc[0].ra_flag    = 0;
+
+        DLSCH_alloc_pdu.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
+        DLSCH_alloc_pdu.TPC              = 0;
+        DLSCH_alloc_pdu.dai              = 0;
+        DLSCH_alloc_pdu.harq_pid         = 1;
+        DLSCH_alloc_pdu.mcs              = openair_daq_vars.target_ue_dl_mcs;
+        DLSCH_alloc_pdu.ndi              = 1;
+        DLSCH_alloc_pdu.rv               = 0;
+        memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+        /*
       //user2
       DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t; 
       DCI_pdu->dci_alloc[1].L          = 2;
       DCI_pdu->dci_alloc[1].rnti       = 0x1236;
       DCI_pdu->dci_alloc[1].format     = format1;
       DCI_pdu->dci_alloc[1].ra_flag    = 0;
-      
+
       DLSCH_alloc_pdu.rballoc          = rballoc2;
       DLSCH_alloc_pdu.TPC              = 0;
       DLSCH_alloc_pdu.dai              = 0;
@@ -786,40 +786,40 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
       DLSCH_alloc_pdu.ndi              = 1;
       DLSCH_alloc_pdu.rv               = 0;
       memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
-      */
+         */
     }
     else if (transmission_mode==5) {
-      DCI_pdu->Num_ue_spec_dci = 2;
-      // user 1
-      DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t; 
-      DCI_pdu->dci_alloc[0].L          = 2;
-      DCI_pdu->dci_alloc[0].rnti       = 0x1235;
-      DCI_pdu->dci_alloc[0].format     = format1E_2A_M10PRB;
-      DCI_pdu->dci_alloc[0].ra_flag    = 0;
-      
-      DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
-      DLSCH_alloc_pdu1E.rv               = 0;
-      DLSCH_alloc_pdu1E.ndi              = 1;
-      DLSCH_alloc_pdu1E.mcs              = openair_daq_vars.target_ue_dl_mcs;
-      DLSCH_alloc_pdu1E.harq_pid         = 1;
-      DLSCH_alloc_pdu1E.dai              = 0;
-      DLSCH_alloc_pdu1E.TPC              = 0;
-      DLSCH_alloc_pdu1E.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
-      DLSCH_alloc_pdu1E.rah              = 0;
-      DLSCH_alloc_pdu1E.dl_power_off     = 0; //0=second user present
-      memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-      
-      //user 2
-      DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t; 
-      DCI_pdu->dci_alloc[1].L          = 2;
-      DCI_pdu->dci_alloc[1].rnti       = 0x1236;
-      DCI_pdu->dci_alloc[1].format     = format1E_2A_M10PRB;
-      DCI_pdu->dci_alloc[1].ra_flag    = 0;
-      
-      memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
-      // set the precoder of the second UE orthogonal to the first
-      phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555); 
+        DCI_pdu->Num_ue_spec_dci = 2;
+        // user 1
+        DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+        DCI_pdu->dci_alloc[0].L          = 2;
+        DCI_pdu->dci_alloc[0].rnti       = 0x1235;
+        DCI_pdu->dci_alloc[0].format     = format1E_2A_M10PRB;
+        DCI_pdu->dci_alloc[0].ra_flag    = 0;
+
+        DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
+        DLSCH_alloc_pdu1E.rv               = 0;
+        DLSCH_alloc_pdu1E.ndi              = 1;
+        DLSCH_alloc_pdu1E.mcs              = openair_daq_vars.target_ue_dl_mcs;
+        DLSCH_alloc_pdu1E.harq_pid         = 1;
+        DLSCH_alloc_pdu1E.dai              = 0;
+        DLSCH_alloc_pdu1E.TPC              = 0;
+        DLSCH_alloc_pdu1E.rballoc          = openair_daq_vars.ue_dl_rb_alloc;
+        DLSCH_alloc_pdu1E.rah              = 0;
+        DLSCH_alloc_pdu1E.dl_power_off     = 0; //0=second user present
+        memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+        //user 2
+        DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+        DCI_pdu->dci_alloc[1].L          = 2;
+        DCI_pdu->dci_alloc[1].rnti       = 0x1236;
+        DCI_pdu->dci_alloc[1].format     = format1E_2A_M10PRB;
+        DCI_pdu->dci_alloc[1].ra_flag    = 0;
+
+        memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+        // set the precoder of the second UE orthogonal to the first
+        phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
     }
     break;
 
@@ -888,16 +888,16 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
     UL_alloc_pdu.dai     = 0;
     UL_alloc_pdu.cqi_req = 1;
     memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
-    */
+     */
     break;
-    
+
   default:
     break;
   }
 
   DCI_pdu->nCCE = 0;
   for (i=0;i<DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci;i++) {
-    DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
+      DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
   }
 
 }
@@ -915,102 +915,102 @@ int QPSK2[4]={AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),((
 extern PHY_MEASUREMENTS PHY_measurements;
 
 void phy_eNB_lte_measurement_thresholds_test_and_report(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP, uint16_t valP) {
-    MessageDef *message_p = NULL;
-    if (
-           (
-               ((threshold_phy_pP->threshold.threshold_val <  valP) && (threshold_phy_pP->threshold.threshold_xdir == RAL_ABOVE_THRESHOLD)) ||
-               ((threshold_phy_pP->threshold.threshold_val >  valP) && (threshold_phy_pP->threshold.threshold_xdir == RAL_BELOW_THRESHOLD))
-           )  ||
-           (threshold_phy_pP->threshold.threshold_xdir == RAL_NO_THRESHOLD)
-       ){
-        message_p = itti_alloc_new_message(TASK_PHY_ENB , PHY_MEAS_REPORT_IND);
-        memset(&PHY_MEAS_REPORT_IND(message_p), 0, sizeof(PHY_MEAS_REPORT_IND(message_p)));
-
-        memcpy(&PHY_MEAS_REPORT_IND (message_p).threshold,
-                &threshold_phy_pP->threshold,
-                sizeof(PHY_MEAS_REPORT_IND (message_p).threshold));
-
-        memcpy(&PHY_MEAS_REPORT_IND (message_p).link_param,
-                &threshold_phy_pP->link_param,
-                sizeof(PHY_MEAS_REPORT_IND (message_p).link_param));\
-
-        switch (threshold_phy_pP->link_param.choice) {
-            case RAL_LINK_PARAM_CHOICE_LINK_PARAM_VAL:
-                PHY_MEAS_REPORT_IND (message_p).link_param._union.link_param_val = valP;
-                break;
-            case RAL_LINK_PARAM_CHOICE_QOS_PARAM_VAL:
-                //PHY_MEAS_REPORT_IND (message_p).link_param._union.qos_param_val.
-                AssertFatal (1 == 0, "TO DO RAL_LINK_PARAM_CHOICE_QOS_PARAM_VAL\n");
-                break;
-        }
-        itti_send_msg_to_task(TASK_RRC_ENB, instanceP, message_p);
-    }
+  MessageDef *message_p = NULL;
+  if (
+      (
+          ((threshold_phy_pP->threshold.threshold_val <  valP) && (threshold_phy_pP->threshold.threshold_xdir == RAL_ABOVE_THRESHOLD)) ||
+          ((threshold_phy_pP->threshold.threshold_val >  valP) && (threshold_phy_pP->threshold.threshold_xdir == RAL_BELOW_THRESHOLD))
+      )  ||
+      (threshold_phy_pP->threshold.threshold_xdir == RAL_NO_THRESHOLD)
+  ){
+      message_p = itti_alloc_new_message(TASK_PHY_ENB , PHY_MEAS_REPORT_IND);
+      memset(&PHY_MEAS_REPORT_IND(message_p), 0, sizeof(PHY_MEAS_REPORT_IND(message_p)));
+
+      memcpy(&PHY_MEAS_REPORT_IND (message_p).threshold,
+          &threshold_phy_pP->threshold,
+          sizeof(PHY_MEAS_REPORT_IND (message_p).threshold));
+
+      memcpy(&PHY_MEAS_REPORT_IND (message_p).link_param,
+          &threshold_phy_pP->link_param,
+          sizeof(PHY_MEAS_REPORT_IND (message_p).link_param));\
+
+          switch (threshold_phy_pP->link_param.choice) {
+          case RAL_LINK_PARAM_CHOICE_LINK_PARAM_VAL:
+            PHY_MEAS_REPORT_IND (message_p).link_param._union.link_param_val = valP;
+            break;
+          case RAL_LINK_PARAM_CHOICE_QOS_PARAM_VAL:
+            //PHY_MEAS_REPORT_IND (message_p).link_param._union.qos_param_val.
+            AssertFatal (1 == 0, "TO DO RAL_LINK_PARAM_CHOICE_QOS_PARAM_VAL\n");
+            break;
+          }
+          itti_send_msg_to_task(TASK_RRC_ENB, instanceP, message_p);
+  }
 }
 
 void phy_eNB_lte_check_measurement_thresholds(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP) {
-    unsigned int  mod_id;
-
-    mod_id = instanceP;
-
-    switch (threshold_phy_pP->link_param.link_param_type.choice) {
-
-        case RAL_LINK_PARAM_TYPE_CHOICE_GEN:
-            switch (threshold_phy_pP->link_param.link_param_type._union.link_param_gen) {
-                case RAL_LINK_PARAM_GEN_DATA_RATE:
-                    phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-                    break;
-                case RAL_LINK_PARAM_GEN_SIGNAL_STRENGTH:
-                    phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-                    break;
-                case RAL_LINK_PARAM_GEN_SINR:
-                    phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-                    break;
-                case RAL_LINK_PARAM_GEN_THROUGHPUT:
-                    break;
-                case RAL_LINK_PARAM_GEN_PACKET_ERROR_RATE:
-                    break;
-                default:;
-            }
-            break;
+  unsigned int  mod_id;
 
-        case RAL_LINK_PARAM_TYPE_CHOICE_LTE:
-            switch (threshold_phy_pP->link_param.link_param_type._union.link_param_gen) {
-                case RAL_LINK_PARAM_LTE_UE_RSRP:
-                    break;
-                case RAL_LINK_PARAM_LTE_UE_RSRQ:
-                    break;
-                case RAL_LINK_PARAM_LTE_UE_CQI:
-                    break;
-                case RAL_LINK_PARAM_LTE_AVAILABLE_BW:
-                    break;
-                case RAL_LINK_PARAM_LTE_PACKET_DELAY:
-                    break;
-                case RAL_LINK_PARAM_LTE_PACKET_LOSS_RATE:
-                    break;
-                case RAL_LINK_PARAM_LTE_L2_BUFFER_STATUS:
-                    break;
-                case RAL_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES:
-                    break;
-                case RAL_LINK_PARAM_LTE_EMBMS_CAPABILITY:
-                    break;
-                case RAL_LINK_PARAM_LTE_JUMBO_FEASIBILITY:
-                    break;
-                case RAL_LINK_PARAM_LTE_JUMBO_SETUP_STATUS:
-                    break;
-                case RAL_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW:
-                    break;
-                default:;
-            }
-            break;
+  mod_id = instanceP;
 
-        default:;
+  switch (threshold_phy_pP->link_param.link_param_type.choice) {
+
+  case RAL_LINK_PARAM_TYPE_CHOICE_GEN:
+    switch (threshold_phy_pP->link_param.link_param_type._union.link_param_gen) {
+    case RAL_LINK_PARAM_GEN_DATA_RATE:
+      phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
+      break;
+    case RAL_LINK_PARAM_GEN_SIGNAL_STRENGTH:
+      phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
+      break;
+    case RAL_LINK_PARAM_GEN_SINR:
+      phy_eNB_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
+      break;
+    case RAL_LINK_PARAM_GEN_THROUGHPUT:
+      break;
+    case RAL_LINK_PARAM_GEN_PACKET_ERROR_RATE:
+      break;
+    default:;
     }
+    break;
+
+    case RAL_LINK_PARAM_TYPE_CHOICE_LTE:
+      switch (threshold_phy_pP->link_param.link_param_type._union.link_param_gen) {
+      case RAL_LINK_PARAM_LTE_UE_RSRP:
+        break;
+      case RAL_LINK_PARAM_LTE_UE_RSRQ:
+        break;
+      case RAL_LINK_PARAM_LTE_UE_CQI:
+        break;
+      case RAL_LINK_PARAM_LTE_AVAILABLE_BW:
+        break;
+      case RAL_LINK_PARAM_LTE_PACKET_DELAY:
+        break;
+      case RAL_LINK_PARAM_LTE_PACKET_LOSS_RATE:
+        break;
+      case RAL_LINK_PARAM_LTE_L2_BUFFER_STATUS:
+        break;
+      case RAL_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES:
+        break;
+      case RAL_LINK_PARAM_LTE_EMBMS_CAPABILITY:
+        break;
+      case RAL_LINK_PARAM_LTE_JUMBO_FEASIBILITY:
+        break;
+      case RAL_LINK_PARAM_LTE_JUMBO_SETUP_STATUS:
+        break;
+      case RAL_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW:
+        break;
+      default:;
+      }
+      break;
+
+      default:;
+  }
 }
 #   endif
 #endif
 
 void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,
-			   relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
+    relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
   u8 *pbch_pdu=&phy_vars_eNB->pbch_pdu[0];
   //  unsigned int nb_dci_ue_spec = 0, nb_dci_common = 0;
   u16 input_buffer_length, re_allocated=0;
@@ -1040,1079 +1040,1080 @@ void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8
   // there is at least one allocation for PDCCH
   u8 smbv_alloc_cnt = 1;
 #endif
-
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,1);
 
 #ifdef DEBUG_PHY_PROC
   LOG_D(PHY,"[%s %d] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n", 
-	(r_type == multicast_relay) ? "RN/eNB" : "eNB",
-	phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1, next_slot);
+      (r_type == multicast_relay) ? "RN/eNB" : "eNB",
+          phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1, next_slot);
 #endif
 #ifdef OPENAIR2
   // Get scheduling info for next subframe during odd slot of previous subframe (next_slot is even)
   if (next_slot%2 == 0) 
     mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,0,phy_vars_eNB->frame,next_slot>>1);//,1);
 #endif
-
   for (sect_id = 0 ; sect_id < number_of_cards; sect_id++) {
 
-    if (abstraction_flag==0) {
-      if (next_slot%2 == 0) {
-	for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB;aa++) {
-	 
+      if (abstraction_flag==0) {
+          if (next_slot%2 == 0) {
+              for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB;aa++) {
 #ifdef IFFT_FPGA
-	  memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id][aa][next_slot*(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)],
-		 0,(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)*sizeof(mod_sym_t));
+                  memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id][aa][next_slot*(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)],
+                      0,(phy_vars_eNB->lte_frame_parms.N_RB_DL*12)*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)*sizeof(mod_sym_t));
 #else
-	  memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id][aa][next_slot*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)],
-		 0,phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)*sizeof(mod_sym_t));
-
+                  memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id][aa][next_slot*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti>>1)],
+                      0,phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)*sizeof(mod_sym_t));
 #endif
-	}
-      }
-    }
-    if (is_pmch_subframe(phy_vars_eNB->frame,next_slot>>1,&phy_vars_eNB->lte_frame_parms)) {
-      
-      if (abstraction_flag==0){
-	if ((next_slot%2) == 0) {
-	  // This is DL-Cell spec pilots in Control region
-	  generate_pilots_slot(phy_vars_eNB,
-			       phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			       AMP,
-			       next_slot,1);
-	}
+              }
+          }
       }
+      if (is_pmch_subframe(phy_vars_eNB->frame,next_slot>>1,&phy_vars_eNB->lte_frame_parms)) {
+
+          if (abstraction_flag==0){
+              if ((next_slot%2) == 0) {
+                  // This is DL-Cell spec pilots in Control region
+                  generate_pilots_slot(phy_vars_eNB,
+                      phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      next_slot,1);
+              }
+          }
 #ifdef Rel10
-      // if mcch is active, send regardless of the node type: eNB or RN
-      // when mcch is active, MAC sched does not allow MCCH and MTCH multiplexing 
-	  mch_pduP = mac_xface->get_mch_sdu(phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
-	  switch (r_type){
-	  case no_relay:
-	    if ((mch_pduP->Pdu_size > 0) && (mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0 
-	      //if ((mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0 
-	      LOG_I(PHY,"[eNB%d] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %d, TBS %d) \n",
-		    phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,mch_pduP->mcs,
-		    phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
-	    else {
-	      LOG_D(PHY,"[DeNB %d] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %d (%s)\n",
-		    phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,mch_pduP->sync_area,
-		    (mch_pduP->Pdu_size == 0)? "Empty MCH PDU":"Let RN transmit for the moment");
-	      mch_pduP = NULL;
-	    }
-	    break;
-	  case multicast_relay:
-	    if ((mch_pduP->Pdu_size > 0) && ((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
-	      //if (((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
-	      LOG_I(PHY,"[RN %d] Frame %d subframe %d: Got the MCH PDU for MBSFN  sync area %d (MCS %d, TBS %d)\n",
-		    phy_vars_rn->Mod_id,phy_vars_rn->frame, next_slot>>1,
-		    mch_pduP->sync_area,mch_pduP->mcs,mch_pduP->Pdu_size);
-	    } else if (phy_vars_rn->mch_avtive[(next_slot>>1)%5] == 1){ // SF2 -> SF7, SF3 -> SF8
-	      mch_pduP= &mch_pdu;
-	      memcpy(&mch_pduP->payload, // could be a simple copy
-		     phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->b,
-		     phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->TBS>>3);
-	      mch_pduP->Pdu_size = (uint16_t) (phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->TBS>>3);
-	      mch_pduP->mcs = phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->mcs;
-	      LOG_I(PHY,"[RN %d] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %d (MCS %d, TBS %d)\n",
-		    phy_vars_rn->Mod_id,phy_vars_rn->frame, next_slot>>1,(next_slot>>1)%5,
-		    phy_vars_rn->sync_area[(next_slot>>1)%5],mch_pduP->mcs,mch_pduP->Pdu_size);
-	    } else {
-	      /* LOG_I(PHY,"[RN %d] Frame %d subframe %d: do not forward MCH pdu for MBSFN  sync area %d (MCS %d, TBS %d)\n",
+          // if mcch is active, send regardless of the node type: eNB or RN
+          // when mcch is active, MAC sched does not allow MCCH and MTCH multiplexing
+          mch_pduP = mac_xface->get_mch_sdu(phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
+          switch (r_type){
+          case no_relay:
+            if ((mch_pduP->Pdu_size > 0) && (mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0
+              //if ((mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0
+              LOG_I(PHY,"[eNB%d] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %d, TBS %d) \n",
+                  phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,mch_pduP->mcs,
+                  phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
+            else {
+                LOG_D(PHY,"[DeNB %d] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %d (%s)\n",
+                    phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,mch_pduP->sync_area,
+                    (mch_pduP->Pdu_size == 0)? "Empty MCH PDU":"Let RN transmit for the moment");
+                mch_pduP = NULL;
+            }
+            break;
+          case multicast_relay:
+            if ((mch_pduP->Pdu_size > 0) && ((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
+                //if (((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
+                LOG_I(PHY,"[RN %d] Frame %d subframe %d: Got the MCH PDU for MBSFN  sync area %d (MCS %d, TBS %d)\n",
+                    phy_vars_rn->Mod_id,phy_vars_rn->frame, next_slot>>1,
+                    mch_pduP->sync_area,mch_pduP->mcs,mch_pduP->Pdu_size);
+            } else if (phy_vars_rn->mch_avtive[(next_slot>>1)%5] == 1){ // SF2 -> SF7, SF3 -> SF8
+                mch_pduP= &mch_pdu;
+                memcpy(&mch_pduP->payload, // could be a simple copy
+                    phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->b,
+                    phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->TBS>>3);
+                mch_pduP->Pdu_size = (uint16_t) (phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->TBS>>3);
+                mch_pduP->mcs = phy_vars_rn->dlsch_rn_MCH[(next_slot>>1)%5]->harq_processes[0]->mcs;
+                LOG_I(PHY,"[RN %d] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %d (MCS %d, TBS %d)\n",
+                    phy_vars_rn->Mod_id,phy_vars_rn->frame, next_slot>>1,(next_slot>>1)%5,
+                    phy_vars_rn->sync_area[(next_slot>>1)%5],mch_pduP->mcs,mch_pduP->Pdu_size);
+            } else {
+                /* LOG_I(PHY,"[RN %d] Frame %d subframe %d: do not forward MCH pdu for MBSFN  sync area %d (MCS %d, TBS %d)\n",
 		    phy_vars_rn->Mod_id,phy_vars_rn->frame, next_slot>>1,
 		    mch_pduP->sync_area,mch_pduP->mcs,mch_pduP->Pdu_size);*/
-	      mch_pduP=NULL;
-	    }
-	    phy_vars_rn->mch_avtive[next_slot>>1]=0;
-	    break;
-	  default:
-	    LOG_W(PHY,"[eNB %d] Frame %d subframe %d: unknown relaying type %d \n",
-		  phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,r_type);
-	    mch_pduP=NULL;
-	    break;
-	    }// switch 
-	
-	  if (mch_pduP){
-	    fill_eNB_dlsch_MCH(phy_vars_eNB,mch_pduP->mcs,1,0, abstraction_flag);
-	    // Generate PMCH
-	    generate_mch(phy_vars_eNB,next_slot>>1,(uint8_t*)mch_pduP->payload,abstraction_flag);
+                mch_pduP=NULL;
+            }
+            phy_vars_rn->mch_avtive[next_slot>>1]=0;
+            break;
+          default:
+            LOG_W(PHY,"[eNB %d] Frame %d subframe %d: unknown relaying type %d \n",
+                phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,r_type);
+            mch_pduP=NULL;
+            break;
+          }// switch
+
+          if (mch_pduP){
+              fill_eNB_dlsch_MCH(phy_vars_eNB,mch_pduP->mcs,1,0, abstraction_flag);
+              // Generate PMCH
+              generate_mch(phy_vars_eNB,next_slot>>1,(uint8_t*)mch_pduP->payload,abstraction_flag);
 #ifdef DEBUG_PHY
-	    for (i=0;i<mch_pduP->Pdu_size;i++)
-	      msg("%2x.",(uint8_t)mch_pduP->payload[i]);
-	    msg("\n");
+              for (i=0;i<mch_pduP->Pdu_size;i++)
+                msg("%2x.",(uint8_t)mch_pduP->payload[i]);
+              msg("\n");
 #endif 
-	  } else {
-	    LOG_D(PHY,"[eNB/RN] Frame %d subframe %d: MCH not generated \n",phy_vars_eNB->frame,next_slot>>1);
-	  }
+          } else {
+              LOG_D(PHY,"[eNB/RN] Frame %d subframe %d: MCH not generated \n",phy_vars_eNB->frame,next_slot>>1);
+          }
 #endif
-    }
-    
-    else {
-	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1);
-	
-	if (abstraction_flag==0){
-	  generate_pilots_slot(phy_vars_eNB,
-			       phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			       AMP,
-			       next_slot,0);
-	  generate_pilots_slot(phy_vars_eNB,
-			       phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			       AMP,
-			       next_slot+1,0);
-	  
-	  vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,0);
-	
-	  if (next_slot == 0) {
-	  
-	    // First half of PSS/SSS (FDD)
-	    if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
-	      generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			   AMP,
-			   &phy_vars_eNB->lte_frame_parms,
-			   (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
-			   0);
-	      generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			   AMP,
-			   &phy_vars_eNB->lte_frame_parms,
-			   (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
-			   0);
-	    }
-	  }
-	}    
+      }
+
+      else {
+          vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1);
+
+          if (abstraction_flag==0){
+              generate_pilots_slot(phy_vars_eNB,
+                  phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                  AMP,
+                  next_slot,0);
+              generate_pilots_slot(phy_vars_eNB,
+                  phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                  AMP,
+                  next_slot+1,0);
+
+              vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,0);
+
+              if (next_slot == 0) {
+
+                  // First half of PSS/SSS (FDD)
+                  if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+                      generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                          AMP,
+                          &phy_vars_eNB->lte_frame_parms,
+                          (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                              0);
+                      generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                          AMP,
+                          &phy_vars_eNB->lte_frame_parms,
+                          (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
+                              0);
+                  }
+              }
+          }
       }
       if (next_slot == 0) {
-	
-	if ((phy_vars_eNB->frame&3) == 0) {
-	  ((u8*) pbch_pdu)[2] = 0;
-	  switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
-	  case 6:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (0<<5);
-	    break;
-	  case 15:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (1<<5);
-	    break;
-	  case 25:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (2<<5);
-	    break;
-	  case 50:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (3<<5);
-	    break;
-	  case 75:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (4<<5);
-	    break;
-          case 100:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (5<<5);
-	    break;
-	  default:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (2<<5);
-	    break;
-	  }
-	  ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xef) | 
-	    ((phy_vars_eNB->lte_frame_parms.phich_config_common.phich_duration << 4)&0x10);
-	  
-	  switch (phy_vars_eNB->lte_frame_parms.phich_config_common.phich_resource) {
-	  case oneSixth:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (0<<2);
-	    break;
-	  case half:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (1<<2);
-	    break;
-	  case one:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (2<<2);
-	    break;
-	  case two:
-	    ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (3<<2);
-	    break;
-	  default:
-	    break;
-	  }
-	  
-	  ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xfc) | ((phy_vars_eNB->frame>>8)&0x3);
-	  ((u8*) pbch_pdu)[1] = phy_vars_eNB->frame&0xfc;
-	  ((u8*) pbch_pdu)[0] = 0;
-	}
-	/// First half of SSS (TDD)
-	if (abstraction_flag==0) {
-	  
-	  if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
-	    generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
-			 1);
-	  }
-	}
-	
-	
-	
-	frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->frame%4;
-	
+
+          if ((phy_vars_eNB->frame&3) == 0) {
+              ((u8*) pbch_pdu)[2] = 0;
+              switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+              case 6:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (0<<5);
+                break;
+              case 15:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (1<<5);
+                break;
+              case 25:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (2<<5);
+                break;
+              case 50:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (3<<5);
+                break;
+              case 75:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (4<<5);
+                break;
+              case 100:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (5<<5);
+                break;
+              default:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0x1f) | (2<<5);
+                break;
+              }
+              ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xef) |
+                  ((phy_vars_eNB->lte_frame_parms.phich_config_common.phich_duration << 4)&0x10);
+
+              switch (phy_vars_eNB->lte_frame_parms.phich_config_common.phich_resource) {
+              case oneSixth:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (0<<2);
+                break;
+              case half:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (1<<2);
+                break;
+              case one:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (2<<2);
+                break;
+              case two:
+                ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xf3) | (3<<2);
+                break;
+              default:
+                break;
+              }
+
+              ((u8*) pbch_pdu)[2] = (((u8*) pbch_pdu)[2]&0xfc) | ((phy_vars_eNB->frame>>8)&0x3);
+              ((u8*) pbch_pdu)[1] = phy_vars_eNB->frame&0xfc;
+              ((u8*) pbch_pdu)[0] = 0;
+          }
+          /// First half of SSS (TDD)
+          if (abstraction_flag==0) {
+
+              if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
+                  generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                          1);
+              }
+          }
+
+
+
+          frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->frame%4;
+
 #ifdef DEBUG_PHY_PROC
-	LOG_D(PHY,"[eNB %d] Frame %d, slot %d: Calling generate_pbch, mode1_flag=%d, frame_tx=%d, pdu=%02x%02x%02x\n",
-	      phy_vars_eNB->Mod_id,
-	      phy_vars_eNB->frame, 
-	      next_slot,
-	      phy_vars_eNB->lte_frame_parms.mode1_flag,
-	      frame_tx,
-	      ((u8*) pbch_pdu)[2],
-	      ((u8*) pbch_pdu)[1],
-	      ((u8*) pbch_pdu)[0]);
-#endif
-	
-	if (abstraction_flag==0) {
-	  
-	  generate_pbch(&phy_vars_eNB->lte_eNB_pbch,
-			phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			AMP,
-			&phy_vars_eNB->lte_frame_parms,
-			pbch_pdu,
-			phy_vars_eNB->frame&3);
-	  
-	}
+          LOG_D(PHY,"[eNB %d] Frame %d, slot %d: Calling generate_pbch, mode1_flag=%d, frame_tx=%d, pdu=%02x%02x%02x\n",
+              phy_vars_eNB->Mod_id,
+              phy_vars_eNB->frame,
+              next_slot,
+              phy_vars_eNB->lte_frame_parms.mode1_flag,
+              frame_tx,
+              ((u8*) pbch_pdu)[2],
+              ((u8*) pbch_pdu)[1],
+              ((u8*) pbch_pdu)[0]);
+#endif
+
+          if (abstraction_flag==0) {
+
+              generate_pbch(&phy_vars_eNB->lte_eNB_pbch,
+                  phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                  AMP,
+                  &phy_vars_eNB->lte_frame_parms,
+                  pbch_pdu,
+                  phy_vars_eNB->frame&3);
+
+          }
 #ifdef PHY_ABSTRACTION
-	else {
-	  generate_pbch_emul(phy_vars_eNB,pbch_pdu); 
-	}
+          else {
+              generate_pbch_emul(phy_vars_eNB,pbch_pdu);
+          }
 #endif
       }
-      
-      
+
+
       if (next_slot == 2) {
-	
-	if (abstraction_flag==0) {
-	  
-          if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
-	    //	  printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->frame,next_slot>>1);
-	    generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 2,
-			 2);
+
+          if (abstraction_flag==0) {
+
+              if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
+                  //	  printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->frame,next_slot>>1);
+                  generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      2,
+                      2);
+              }
           }
-	}
       } 
-      
+
       // Second half of PSS/SSS (FDD)
       if (next_slot == 10) {
-	
-	if (abstraction_flag==0) {
-	  
-	  if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
-	    generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
-			 10);
-	    generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
-			 10);
-	    
-	  }
-	}
+
+          if (abstraction_flag==0) {
+
+              if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+                  generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                          10);
+                  generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
+                          10);
+
+              }
+          }
       }
       //  Second-half of SSS (TDD)
       if (next_slot == 10) {
-	if (abstraction_flag==0) {
-	  
-	  if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
-	    generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
-			 11);
-	  }
-	}
+          if (abstraction_flag==0) {
+
+              if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
+                  generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                          11);
+              }
+          }
       }
       // Second half of PSS (TDD)
       if (next_slot == 12) {
-	
-	if (abstraction_flag==0) {
-	  
-	  if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
-	    //	    printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->frame,next_slot>>1);
-	    generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-			 AMP,
-			 &phy_vars_eNB->lte_frame_parms,
-			 2,
-			 12);
-	  }
-	}
+
+          if (abstraction_flag==0) {
+
+              if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
+                  //	    printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->frame,next_slot>>1);
+                  generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                      AMP,
+                      &phy_vars_eNB->lte_frame_parms,
+                      2,
+                      12);
+              }
+          }
       }
-    
-      
-    
-    //return;
-    
-    
-    sect_id=0;
-    
-    if ((next_slot % 2)==0) {
-      //#ifdef DEBUG_PHY_PROC
-      //    msg("[PHY][eNB %d] UE %d: Mode %s\n",phy_vars_eNB->Mod_id,0,mode_string[phy_vars_eNB->eNB_UE_stats[0].mode]);
-      //#endif
+
+
+
+      //return;
+
+
+      sect_id=0;
+
+      if ((next_slot % 2)==0) {
+          //#ifdef DEBUG_PHY_PROC
+          //    msg("[PHY][eNB %d] UE %d: Mode %s\n",phy_vars_eNB->Mod_id,0,mode_string[phy_vars_eNB->eNB_UE_stats[0].mode]);
+          //#endif
 
 #if defined(SMBV) && !defined(EXMIMO)
-        // PBCH takes one allocation
-        if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-            if (next_slot==0) 
+          // PBCH takes one allocation
+          if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+              if (next_slot==0)
                 smbv_alloc_cnt++;
-        }
+          }
 #endif
-      
+
 #ifdef OPENAIR2
-      // if there are two users and we want to do cooperation
-      //    if ((phy_vars_eNB->eNB_UE_stats[0].mode == PUSCH) && (phy_vars_eNB->eNB_UE_stats[1].mode == PUSCH))
-      //      mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,phy_vars_eNB->cooperation_flag,phy_vars_eNB->frame,next_slot>>1);//,1);
-      //    else
-
-      
-      // Parse DCI received from MAC
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
-      DCI_pdu = mac_xface->get_dci_sdu(phy_vars_eNB->Mod_id,
-				       phy_vars_eNB->frame,
-				       next_slot>>1);
+          // if there are two users and we want to do cooperation
+          //    if ((phy_vars_eNB->eNB_UE_stats[0].mode == PUSCH) && (phy_vars_eNB->eNB_UE_stats[1].mode == PUSCH))
+          //      mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,phy_vars_eNB->cooperation_flag,phy_vars_eNB->frame,next_slot>>1);//,1);
+          //    else
+
+
+          // Parse DCI received from MAC
+          vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
+          DCI_pdu = mac_xface->get_dci_sdu(phy_vars_eNB->Mod_id,
+              phy_vars_eNB->frame,
+              next_slot>>1);
 #else
-    DCI_pdu = &DCI_pdu_tmp;
+          DCI_pdu = &DCI_pdu_tmp;
 #ifdef EMOS
-    if (((phy_vars_eNB->frame%1024)%3 == 0) && (next_slot == 0)) {
-      //openair_daq_vars.target_ue_dl_mcs = (openair_daq_vars.target_ue_dl_mcs+1)%28;
-      openair_daq_vars.target_ue_dl_mcs = taus()%28;
-      LOG_D(PHY,"[MYEMOS] frame %d, increasing MCS to %d\n",phy_vars_eNB->frame,openair_daq_vars.target_ue_dl_mcs);
-    }
-    /*
+          if (((phy_vars_eNB->frame%1024)%3 == 0) && (next_slot == 0)) {
+              //openair_daq_vars.target_ue_dl_mcs = (openair_daq_vars.target_ue_dl_mcs+1)%28;
+              openair_daq_vars.target_ue_dl_mcs = taus()%28;
+              LOG_D(PHY,"[MYEMOS] frame %d, increasing MCS to %d\n",phy_vars_eNB->frame,openair_daq_vars.target_ue_dl_mcs);
+          }
+          /*
     if (phy_vars_eNB->frame > 28000) {
       LOG_E(PHY,"More that 28000 frames reached! Exiting!\n");
       mac_xface->macphy_exit("");
     } 
-    */     
+           */
 #endif
 #ifdef EMOS_CHANNEL
-    fill_dci_emos(DCI_pdu,next_slot>>1,phy_vars_eNB);
+          fill_dci_emos(DCI_pdu,next_slot>>1,phy_vars_eNB);
 #else
-    fill_dci(DCI_pdu,next_slot>>1,phy_vars_eNB);
+          fill_dci(DCI_pdu,next_slot>>1,phy_vars_eNB);
 #endif
 #endif
 
-    // clear existing ulsch dci allocations before applying info from MAC  (this is table
-    ul_subframe = pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1);
-    ul_frame = pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->frame,next_slot>>1);
+          // clear existing ulsch dci allocations before applying info from MAC  (this is table
+          ul_subframe = pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1);
+          ul_frame = pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->frame,next_slot>>1);
+
+          if ((subframe_select(&phy_vars_eNB->lte_frame_parms,ul_subframe)==SF_UL) ||
+              (phy_vars_eNB->lte_frame_parms.frame_type == 0)) {
+              harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,ul_frame,ul_subframe);
+              for (i=0;i<NUMBER_OF_UE_MAX;i++)
+                if (phy_vars_eNB->ulsch_eNB[i]) {
+                    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc=0;
+                    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc=0;
+                }
+          }
 
-    if ((subframe_select(&phy_vars_eNB->lte_frame_parms,ul_subframe)==SF_UL) ||
-	(phy_vars_eNB->lte_frame_parms.frame_type == 0)) {
-      harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,ul_frame,ul_subframe);
-      for (i=0;i<NUMBER_OF_UE_MAX;i++)
-	if (phy_vars_eNB->ulsch_eNB[i]) {
-	  phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc=0;
-	  phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc=0;
-	}
-    }
-  
 #ifdef EMOS
-      //emos_dump_eNB.dci_cnt[next_slot>>1] = DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci; //nb_dci_common+nb_dci_ue_spec;
+          //emos_dump_eNB.dci_cnt[next_slot>>1] = DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci; //nb_dci_common+nb_dci_ue_spec;
 #endif
-      // clear previous allocation information for all UEs
-      for (i=0;i<NUMBER_OF_UE_MAX;i++) {
-	phy_vars_eNB->dlsch_eNB[i][0]->subframe_tx[next_slot>>1] = 0;
-      }
-      
-      init_nCCE_table();
-      
-      num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
-						DCI_pdu->dci_alloc,
-						&phy_vars_eNB->lte_frame_parms,
-						next_slot>>1);
-      DCI_pdu->nCCE = get_nCCE(num_pdcch_symbols,
-			       &phy_vars_eNB->lte_frame_parms,
-			       get_mi(&phy_vars_eNB->lte_frame_parms,next_slot>>1));
-      LOG_D(PHY,"num_pdcch_symbols %d, nCCE %d\n",num_pdcch_symbols,DCI_pdu->nCCE);
-      
+          // clear previous allocation information for all UEs
+          for (i=0;i<NUMBER_OF_UE_MAX;i++) {
+              phy_vars_eNB->dlsch_eNB[i][0]->subframe_tx[next_slot>>1] = 0;
+          }
+
+          init_nCCE_table();
+
+          num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
+              DCI_pdu->dci_alloc,
+              &phy_vars_eNB->lte_frame_parms,
+              next_slot>>1);
+          DCI_pdu->nCCE = get_nCCE(num_pdcch_symbols,
+              &phy_vars_eNB->lte_frame_parms,
+              get_mi(&phy_vars_eNB->lte_frame_parms,next_slot>>1));
+          LOG_D(PHY,"num_pdcch_symbols %d, nCCE %d\n",num_pdcch_symbols,DCI_pdu->nCCE);
+
 #if defined(SMBV) && !defined(EXMIMO)
-      // Sets up PDCCH and DCI table
-      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4) && ((DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci)>0)) {
-          msg("[SMBV] Frame %3d, SF %d PDCCH, number of DCIs %d\n",phy_vars_eNB->frame,next_slot>>1,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
-          dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[0]);
-          smbv_configure_pdcch(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1),num_pdcch_symbols,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
-      }
+          // Sets up PDCCH and DCI table
+          if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4) && ((DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci)>0)) {
+              msg("[SMBV] Frame %3d, SF %d PDCCH, number of DCIs %d\n",phy_vars_eNB->frame,next_slot>>1,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
+              dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[0]);
+              smbv_configure_pdcch(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1),num_pdcch_symbols,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
+          }
 #endif      
-      
-      for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
+
+          printf("PHY @0\n");
+          for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
 #ifdef DEBUG_PHY_PROC
-	if (DCI_pdu->dci_alloc[i].rnti != SI_RNTI) {
-	  LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %d/%d\n",next_slot>>1,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
-	  dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
-	}
+              if (DCI_pdu->dci_alloc[i].rnti != SI_RNTI) {
+                  LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %d/%d\n",next_slot>>1,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
+                  dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
+              }
 #endif
-	
-	if (DCI_pdu->dci_alloc[i].rnti == SI_RNTI) {
+              printf("PHY @1 %d\n",i);
+
+              if (DCI_pdu->dci_alloc[i].rnti == SI_RNTI) {
 #ifdef DEBUG_PHY_PROC
-	  LOG_D(PHY,"[eNB %d] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
-#endif
-	  generate_eNB_dlsch_params_from_dci(next_slot>>1,
-					     &DCI_pdu->dci_alloc[i].dci_pdu[0],
-					     DCI_pdu->dci_alloc[i].rnti,
-					     DCI_pdu->dci_alloc[i].format,
-					     &phy_vars_eNB->dlsch_eNB_SI,
-					     &phy_vars_eNB->lte_frame_parms,
-					     phy_vars_eNB->pdsch_config_dedicated,
-					     SI_RNTI,
-					     0,
-					     P_RNTI,
-					     phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
-	  
-	  if ((phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-										DCI_pdu->nCCE,
-										1,
-										SI_RNTI,
-										next_slot>>1)) == -1) {
-	    LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
-	  } 
-	  else {
-	    LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (SI)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
-		  phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1],DCI_pdu->nCCE);
+                  LOG_D(PHY,"[eNB %d] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
+#endif
+                  generate_eNB_dlsch_params_from_dci(next_slot>>1,
+                      &DCI_pdu->dci_alloc[i].dci_pdu[0],
+                      DCI_pdu->dci_alloc[i].rnti,
+                      DCI_pdu->dci_alloc[i].format,
+                      &phy_vars_eNB->dlsch_eNB_SI,
+                      &phy_vars_eNB->lte_frame_parms,
+                      phy_vars_eNB->pdsch_config_dedicated,
+                      SI_RNTI,
+                      0,
+                      P_RNTI,
+                      phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
+
+                  if ((phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
+                      DCI_pdu->nCCE,
+                      1,
+                      SI_RNTI,
+                      next_slot>>1)) == -1) {
+                      LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
+                  }
+                  else {
+                      LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (SI)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
+                          phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1],DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
-        // configure SI DCI
-        if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-            msg("[SMBV] Frame %3d, SI in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
-            smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), "SI", &DCI_pdu->dci_alloc[i], i);
-        }
+                      // configure SI DCI
+                      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                          msg("[SMBV] Frame %3d, SI in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
+                          smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), "SI", &DCI_pdu->dci_alloc[i], i);
+                      }
 #endif
-	  }
-	  DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1];
-	  
-	}
-	else if (DCI_pdu->dci_alloc[i].ra_flag == 1) {
+                  }
+                  DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_SI->nCCE[next_slot>>1];
+
+              }
+              else if (DCI_pdu->dci_alloc[i].ra_flag == 1) {
 #ifdef DEBUG_PHY_PROC
-	  LOG_D(PHY,"[eNB %d] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
-#endif
-	  generate_eNB_dlsch_params_from_dci(next_slot>>1,
-					     &DCI_pdu->dci_alloc[i].dci_pdu[0],
-					     DCI_pdu->dci_alloc[i].rnti,
-					     DCI_pdu->dci_alloc[i].format,
-					     &phy_vars_eNB->dlsch_eNB_ra,
-					     &phy_vars_eNB->lte_frame_parms,
-					     phy_vars_eNB->pdsch_config_dedicated,
-					     SI_RNTI,
-					     DCI_pdu->dci_alloc[i].rnti,
-					     P_RNTI,
-					     phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
-	  
-	  //	  mac_xface->macphy_exit("Transmitted RAR, exiting\n");
-
-	  if ((phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-										DCI_pdu->nCCE,
-										1,
-										DCI_pdu->dci_alloc[i].rnti,
-										next_slot>>1)) == -1) {
-	    LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
-	  }
-	  else {
-	    LOG_I(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (RA)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
-		  phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1],DCI_pdu->nCCE);
+                  LOG_D(PHY,"[eNB %d] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
+#endif
+                  generate_eNB_dlsch_params_from_dci(next_slot>>1,
+                      &DCI_pdu->dci_alloc[i].dci_pdu[0],
+                      DCI_pdu->dci_alloc[i].rnti,
+                      DCI_pdu->dci_alloc[i].format,
+                      &phy_vars_eNB->dlsch_eNB_ra,
+                      &phy_vars_eNB->lte_frame_parms,
+                      phy_vars_eNB->pdsch_config_dedicated,
+                      SI_RNTI,
+                      DCI_pdu->dci_alloc[i].rnti,
+                      P_RNTI,
+                      phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
+
+                  //	  mac_xface->macphy_exit("Transmitted RAR, exiting\n");
+
+                  if ((phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
+                      DCI_pdu->nCCE,
+                      1,
+                      DCI_pdu->dci_alloc[i].rnti,
+                      next_slot>>1)) == -1) {
+                      LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1);
+                  }
+                  else {
+                      LOG_I(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (RA)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
+                          phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1],DCI_pdu->nCCE);
 #if defined(SMBV) && !defined(EXMIMO)
-        // configure RA DCI
-        if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-            msg("[SMBV] Frame %3d, RA in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
-            smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), "RA", &DCI_pdu->dci_alloc[i], i);
-        }
+                      // configure RA DCI
+                      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                          msg("[SMBV] Frame %3d, RA in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
+                          smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), "RA", &DCI_pdu->dci_alloc[i], i);
+                      }
 #endif
 
-	  }
-	  DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1];
+                  }
+                  DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB_ra->nCCE[next_slot>>1];
 
-	}
-
-	else if (DCI_pdu->dci_alloc[i].format != format0){ // this is a normal DLSCH allocation
+              }
+              else if (DCI_pdu->dci_alloc[i].format != format0){ // this is a normal DLSCH allocation
 
 #ifdef OPENAIR2
 #ifdef DEBUG_PHY_PROC
-	  LOG_D(PHY,"[eNB] Searching for RNTI %x\n",DCI_pdu->dci_alloc[i].rnti);
+                  LOG_D(PHY,"[eNB] Searching for RNTI %x\n",DCI_pdu->dci_alloc[i].rnti);
 #endif
-	  UE_id = find_ue((s16)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
+                  UE_id = find_ue((s16)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
 #else
-	  UE_id = i;
+                  UE_id = i;
 #endif
-	  if (UE_id>=0) {
-	    //	  dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
+                  if (UE_id>=0) {
+                      //	  dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
 #if defined(SMBV) && !defined(EXMIMO)
-          // Configure this user
-          if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-              msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %d in TM%d\n",phy_vars_eNB->frame,next_slot>>1,(smbv_frame_cnt*10) + (next_slot>>1),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(u8)UE_id]);
-              smbv_configure_user(smbv_fname,UE_id+1,phy_vars_eNB->transmission_mode[(u8)UE_id],DCI_pdu->dci_alloc[i].rnti);
-          }
+                      // Configure this user
+                      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                          msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %d in TM%d\n",phy_vars_eNB->frame,next_slot>>1,(smbv_frame_cnt*10) + (next_slot>>1),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(u8)UE_id]);
+                          smbv_configure_user(smbv_fname,UE_id+1,phy_vars_eNB->transmission_mode[(u8)UE_id],DCI_pdu->dci_alloc[i].rnti);
+                      }
 #endif
-	    generate_eNB_dlsch_params_from_dci(next_slot>>1,
-					       &DCI_pdu->dci_alloc[i].dci_pdu[0],
-					       DCI_pdu->dci_alloc[i].rnti,
-					       DCI_pdu->dci_alloc[i].format,
-					       phy_vars_eNB->dlsch_eNB[(u8)UE_id],
-					       &phy_vars_eNB->lte_frame_parms,
-					       phy_vars_eNB->pdsch_config_dedicated,
-					       SI_RNTI,
-					       0,
-					       P_RNTI,
-					       phy_vars_eNB->eNB_UE_stats[(u8)UE_id].DL_pmi_single);
-	    LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d subframe %d: Generated dlsch params\n",
-		  phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->current_harq_pid,phy_vars_eNB->frame,next_slot>>1);
-	    if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-											     DCI_pdu->nCCE,
-											     0,
-											     DCI_pdu->dci_alloc[i].rnti,
-											     next_slot>>1)) == -1) {
-	      LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %x) !!!\n",
-		    phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->dci_alloc[i].rnti);
-	    }
-	    else {
-	      LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %x)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
-		    DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1],DCI_pdu->nCCE);
+                      generate_eNB_dlsch_params_from_dci(next_slot>>1,
+                          &DCI_pdu->dci_alloc[i].dci_pdu[0],
+                          DCI_pdu->dci_alloc[i].rnti,
+                          DCI_pdu->dci_alloc[i].format,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id],
+                          &phy_vars_eNB->lte_frame_parms,
+                          phy_vars_eNB->pdsch_config_dedicated,
+                          SI_RNTI,
+                          0,
+                          P_RNTI,
+                          phy_vars_eNB->eNB_UE_stats[(u8)UE_id].DL_pmi_single);
+                      LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d subframe %d: Generated dlsch params\n",
+                          phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->current_harq_pid,phy_vars_eNB->frame,next_slot>>1);
+                      if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
+                          DCI_pdu->nCCE,
+                          0,
+                          DCI_pdu->dci_alloc[i].rnti,
+                          next_slot>>1)) == -1) {
+                          LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %x) !!!\n",
+                              phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->dci_alloc[i].rnti);
+                      }
+                      else {
+                          LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %x)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,
+                              DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1],DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
-          DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1];
-          // configure UE-spec DCI
-          if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-              msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
-              smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), UE_id+1, &DCI_pdu->dci_alloc[i], i);
-          }
+                          DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1];
+                          // configure UE-spec DCI
+                          if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                              msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
+                              smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), UE_id+1, &DCI_pdu->dci_alloc[i], i);
+                          }
 #endif
-	    }
-	    DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1];
+                      }
+                      DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nCCE[next_slot>>1];
 #ifdef DEBUG_PHY_PROC      
-	    //if (phy_vars_eNB->frame%100 == 0)
-	    LOG_I(PHY,"[eNB %d][DCI][PDSCH %x] Frame %d subframe %d UE_id %d Generated DCI format %d, aggregation %d\n",
-		  phy_vars_eNB->Mod_id, DCI_pdu->dci_alloc[i].rnti,
-		  phy_vars_eNB->frame, next_slot>>1,UE_id,
-		  DCI_pdu->dci_alloc[i].format,
-		  1<<DCI_pdu->dci_alloc[i].L);
-#endif
-	  }
-	  else {
-	    LOG_D(PHY,"[eNB %d][PDSCH] Frame %d : No UE_id with corresponding rnti %x, dropping DLSCH\n",
-		  phy_vars_eNB->Mod_id,phy_vars_eNB->frame,(s16)DCI_pdu->dci_alloc[i].rnti);
-	  }
-	}
+                      //if (phy_vars_eNB->frame%100 == 0)
+                      LOG_I(PHY,"[eNB %d][DCI][PDSCH %x] Frame %d subframe %d UE_id %d Generated DCI format %d, aggregation %d\n",
+                          phy_vars_eNB->Mod_id, DCI_pdu->dci_alloc[i].rnti,
+                          phy_vars_eNB->frame, next_slot>>1,UE_id,
+                          DCI_pdu->dci_alloc[i].format,
+                          1<<DCI_pdu->dci_alloc[i].L);
+#endif
+                  }
+                  else {
+                      LOG_D(PHY,"[eNB %d][PDSCH] Frame %d : No UE_id with corresponding rnti %x, dropping DLSCH\n",
+                          phy_vars_eNB->Mod_id,phy_vars_eNB->frame,(s16)DCI_pdu->dci_alloc[i].rnti);
+                  }
+              } else {
+                  LOG_W(PHY,"[eNB %d] Frame %d : DCI not recognised, No UE_id with corresponding rnti %x, dropping DLSCH\n",
+                      phy_vars_eNB->Mod_id,phy_vars_eNB->frame,DCI_pdu->dci_alloc[i].rnti);
+              }
 
-      }
 
-      // Apply physicalConfigDedicated if needed
-      phy_config_dedicated_eNB_step2(phy_vars_eNB);
+          }
+
+          // Apply physicalConfigDedicated if needed
+          phy_config_dedicated_eNB_step2(phy_vars_eNB);
 
-      for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {    
-	if (DCI_pdu->dci_alloc[i].format == format0) {  // this is a ULSCH allocation
+          for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
+              if (DCI_pdu->dci_alloc[i].format == format0) {  // this is a ULSCH allocation
 
-	  harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
-				       pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->frame,next_slot>>1),
-				       pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1));
-	  if (harq_pid==255) {
-	    LOG_E(PHY,"[eNB %d] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame);
-	    mac_exit_wrapper("Invalid harq_pid (255) detected");
-	  }
+                  harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
+                      pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->frame,next_slot>>1),
+                      pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1));
+                  if (harq_pid==255) {
+                      LOG_E(PHY,"[eNB %d] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame);
+                      mac_exit_wrapper("Invalid harq_pid (255) detected");
+                  }
 #ifdef OPENAIR2
-	  UE_id = find_ue((s16)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
+                  UE_id = find_ue((s16)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
 #else
-	  UE_id = i;
+                  UE_id = i;
 #endif
-	  if (UE_id<0) {
-	    LOG_E(PHY,"[eNB %d] Frame %d: Unknown UE_id for rnti %x\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,(s16)DCI_pdu->dci_alloc[i].rnti);
-	    mac_exit_wrapper("Invalid UE id (< 0) detected");
-	  }
+                  if (UE_id<0) {
+                      LOG_E(PHY,"[eNB %d] Frame %d: Unknown UE_id for rnti %x\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame,(s16)DCI_pdu->dci_alloc[i].rnti);
+                      mac_exit_wrapper("Invalid UE id (< 0) detected");
+                  }
 #ifdef DEBUG_PHY_PROC
-      if (phy_vars_eNB->frame%100 == 0)
-	    LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generated format0 DCI (rnti %x, dci %x) (DCI pos %d/%d), aggregation %d\n",
-		  phy_vars_eNB->Mod_id, 
-		  subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
-				    pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,(((next_slot>>1)==0)?1:0)+phy_vars_eNB->frame,next_slot>>1),
-				    pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1)),
-		  pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,(((next_slot>>1)==0)?1:0)+phy_vars_eNB->frame,next_slot>>1),
-		  next_slot>>1,DCI_pdu->dci_alloc[i].rnti,
-		  *(unsigned int *)&DCI_pdu->dci_alloc[i].dci_pdu[0],
-		  i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
-		  1<<DCI_pdu->dci_alloc[i].L);
-#endif
-
-	  //dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
-      //LOG_D(PHY,"[eNB] cba generate_eNB_ulsch_params_from_dci for ue %d for dci rnti %x\n", UE_id, DCI_pdu->dci_alloc[i].rnti);
-	  generate_eNB_ulsch_params_from_dci(&DCI_pdu->dci_alloc[i].dci_pdu[0],
-					     DCI_pdu->dci_alloc[i].rnti,
-					     (next_slot>>1),
-					     format0,
-					     UE_id,
-					     phy_vars_eNB,
-					     SI_RNTI,
-					     0,
-					     P_RNTI,
-					     CBA_RNTI,
-					     0);  // do_srs
-
-	  if ((DCI_pdu->dci_alloc[i].nCCE=get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-							  DCI_pdu->nCCE,
-							  0,
-							  DCI_pdu->dci_alloc[i].rnti,
-							  next_slot>>1)) == -1) {
-	    LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources (%d) for UE spec DCI (PUSCH %x) !!!\n",
-		  phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->nCCE,DCI_pdu->dci_alloc[i].rnti);
-	  }
-	  else {
-	    LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %x) => %d/%d\n",
-		  phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->dci_alloc[i].rnti,
-		  DCI_pdu->dci_alloc[i].nCCE,DCI_pdu->nCCE);
+                  if (phy_vars_eNB->frame%100 == 0)
+                    LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generated format0 DCI (rnti %x, dci %x) (DCI pos %d/%d), aggregation %d\n",
+                        phy_vars_eNB->Mod_id,
+                        subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
+                            pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,(((next_slot>>1)==0)?1:0)+phy_vars_eNB->frame,next_slot>>1),
+                            pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1)),
+                            pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,(((next_slot>>1)==0)?1:0)+phy_vars_eNB->frame,next_slot>>1),
+                            next_slot>>1,DCI_pdu->dci_alloc[i].rnti,
+                            *(unsigned int *)&DCI_pdu->dci_alloc[i].dci_pdu[0],
+                            i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
+                            1<<DCI_pdu->dci_alloc[i].L);
+#endif
+
+                  //dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
+                  //LOG_D(PHY,"[eNB] cba generate_eNB_ulsch_params_from_dci for ue %d for dci rnti %x\n", UE_id, DCI_pdu->dci_alloc[i].rnti);
+                  generate_eNB_ulsch_params_from_dci(&DCI_pdu->dci_alloc[i].dci_pdu[0],
+                      DCI_pdu->dci_alloc[i].rnti,
+                      (next_slot>>1),
+                      format0,
+                      UE_id,
+                      phy_vars_eNB,
+                      SI_RNTI,
+                      0,
+                      P_RNTI,
+                      CBA_RNTI,
+                      0);  // do_srs
+
+                  if ((DCI_pdu->dci_alloc[i].nCCE=get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
+                      DCI_pdu->nCCE,
+                      0,
+                      DCI_pdu->dci_alloc[i].rnti,
+                      next_slot>>1)) == -1) {
+                      LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources (%d) for UE spec DCI (PUSCH %x) !!!\n",
+                          phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->nCCE,DCI_pdu->dci_alloc[i].rnti);
+                  }
+                  else {
+                      LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %x) => %d/%d\n",
+                          phy_vars_eNB->Mod_id,phy_vars_eNB->frame,next_slot>>1,DCI_pdu->dci_alloc[i].rnti,
+                          DCI_pdu->dci_alloc[i].nCCE,DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
-        // configure UE-spec DCI for UL Grant
-        if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-            msg("[SMBV] Frame %3d, SF %d UL DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
-            smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), UE_id+1, &DCI_pdu->dci_alloc[i], i);
-        }
+                      // configure UE-spec DCI for UL Grant
+                      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                          msg("[SMBV] Frame %3d, SF %d UL DCI %d\n",phy_vars_eNB->frame,next_slot>>1,i);
+                          smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (next_slot>>1), UE_id+1, &DCI_pdu->dci_alloc[i], i);
+                      }
 #endif
 
-	  }
-	  /*
+                  }
+                  /*
 	    #ifdef DEBUG_PHY_PROC
 	    LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Setting subframe_scheduling_flag for UE %d harq_pid %d (ul subframe %d)\n",
 	    phy_vars_eNB->Mod_id,harq_pid,
 	    phy_vars_eNB->frame,next_slot>>1,i,harq_pid,
 	    pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1));
 	    #endif
-	  */
-	  if ((DCI_pdu->dci_alloc[i].rnti  >= CBA_RNTI) && (DCI_pdu->dci_alloc[i].rnti < P_RNTI))
-	    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag = 1;
-	  else 
-	    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
-	
-	}
-      }
+                   */
+                  if ((DCI_pdu->dci_alloc[i].rnti  >= CBA_RNTI) && (DCI_pdu->dci_alloc[i].rnti < P_RNTI))
+                    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag = 1;
+                  else
+                    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
+
+              }
+          }
 
-    
 
 
 
 
-      // if we have DCI to generate do it now
-      if ((DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci)>0) {
 
- 
-      }
-      else {  // for emulation!!
-	phy_vars_eNB->num_ue_spec_dci[(next_slot>>1)&1]=0;
-	phy_vars_eNB->num_common_dci[(next_slot>>1)&1]=0;
-      }
- 
-      if (abstraction_flag == 0) {
+          // if we have DCI to generate do it now
+          if ((DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci)>0) {
+
+
+          }
+          else {  // for emulation!!
+              phy_vars_eNB->num_ue_spec_dci[(next_slot>>1)&1]=0;
+              phy_vars_eNB->num_common_dci[(next_slot>>1)&1]=0;
+          }
+
+          if (abstraction_flag == 0) {
 #ifdef DEBUG_PHY_PROC
-	if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
-	  LOG_I(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %d,ue_spec %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
+              if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
+                LOG_I(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %d,ue_spec %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
 #endif
 
-	for (sect_id=0;sect_id<number_of_cards;sect_id++) 
-	  num_pdcch_symbols = generate_dci_top(DCI_pdu->Num_ue_spec_dci,
-					       DCI_pdu->Num_common_dci,
-					       DCI_pdu->dci_alloc,
-					       0,
-					       AMP,
-					       &phy_vars_eNB->lte_frame_parms,
-					       phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-					       next_slot>>1);
+              for (sect_id=0;sect_id<number_of_cards;sect_id++)
+                num_pdcch_symbols = generate_dci_top(DCI_pdu->Num_ue_spec_dci,
+                    DCI_pdu->Num_common_dci,
+                    DCI_pdu->dci_alloc,
+                    0,
+                    AMP,
+                    &phy_vars_eNB->lte_frame_parms,
+                    phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                    next_slot>>1);
 
 #ifdef DEBUG_PHY_PROC
-//	LOG_I(PHY,"[eNB %d] Frame %d, subframe %d: num_pdcch_symbols %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1,num_pdcch_symbols);
+              //	LOG_I(PHY,"[eNB %d] Frame %d, subframe %d: num_pdcch_symbols %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1,num_pdcch_symbols);
 
 #endif
-      }
+          }
 
 #ifdef PHY_ABSTRACTION
-      else {
-	LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1);
-	num_pdcch_symbols = generate_dci_top_emul(phy_vars_eNB,DCI_pdu->Num_ue_spec_dci,DCI_pdu->Num_common_dci,DCI_pdu->dci_alloc,next_slot>>1);
-      }
+          else {
+              LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1);
+              num_pdcch_symbols = generate_dci_top_emul(phy_vars_eNB,DCI_pdu->Num_ue_spec_dci,DCI_pdu->Num_common_dci,DCI_pdu->dci_alloc,next_slot>>1);
+          }
 #endif
 
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,0);
+          vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,0);
 
 #ifdef DEBUG_PHY_PROC
-      //LOG_D(PHY,"[eNB %d] Frame %d, slot %d: num_pdcch_symbols=%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot,num_pdcch_symbols);
+          //LOG_D(PHY,"[eNB %d] Frame %d, slot %d: num_pdcch_symbols=%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot,num_pdcch_symbols);
 #endif
 
-      // Check for SI activity
+          // Check for SI activity
 
-      if (phy_vars_eNB->dlsch_eNB_SI->active == 1) {
-	input_buffer_length = phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->TBS/8;
+          if (phy_vars_eNB->dlsch_eNB_SI->active == 1) {
+              input_buffer_length = phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->TBS/8;
 
 
 #ifdef OPENAIR2
-	DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
-					     phy_vars_eNB->frame,
-					     SI_RNTI,
-					     0);
+              DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
+                  phy_vars_eNB->frame,
+                  SI_RNTI,
+                  0);
 #else
-	DLSCH_pdu = DLSCH_pdu_tmp;
-	for (i=0;i<input_buffer_length;i++)
-	  DLSCH_pdu[i] = (unsigned char)(taus()&0xff);
+              DLSCH_pdu = DLSCH_pdu_tmp;
+              for (i=0;i<input_buffer_length;i++)
+                DLSCH_pdu[i] = (unsigned char)(taus()&0xff);
 #endif      
-    
+
 #if defined(SMBV) && !defined(EXMIMO)
-    // Configures the data source of allocation (allocation is configured by DCI)
-    if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-        msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
-        smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (next_slot>>1), DLSCH_pdu, input_buffer_length);
-    }
+              // Configures the data source of allocation (allocation is configured by DCI)
+              if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                  msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
+                  smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (next_slot>>1), DLSCH_pdu, input_buffer_length);
+              }
 #endif      
 
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_DLSCH
-	LOG_D(PHY,"[eNB %d][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %d, num_pdcch_symbols %d\n",
-	      phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot, input_buffer_length,num_pdcch_symbols);
-	for (i=0;i<input_buffer_length;i++)
-	  LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);
-	LOG_T(PHY,"\n");
-#endif
-#endif
-
-	if (abstraction_flag == 0) {
-
-	  dlsch_encoding(DLSCH_pdu,
-			 &phy_vars_eNB->lte_frame_parms,
-			 num_pdcch_symbols,
-			 phy_vars_eNB->dlsch_eNB_SI,
-			 phy_vars_eNB->frame,next_slot>>1,
-			 &phy_vars_eNB->dlsch_rate_matching_stats,
-			 &phy_vars_eNB->dlsch_turbo_encoding_stats,
-			 &phy_vars_eNB->dlsch_interleaving_stats);
-	
-	  dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
-			   0,
-			   phy_vars_eNB->dlsch_eNB_SI,
-			   get_G(&phy_vars_eNB->lte_frame_parms,
-				 phy_vars_eNB->dlsch_eNB_SI->nb_rb,
-				 phy_vars_eNB->dlsch_eNB_SI->rb_alloc,
-				 get_Qm(phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->mcs),
-				 num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
-			   0,
-			   next_slot);      
-	
-	  for (sect_id=0;sect_id<number_of_cards;sect_id++) 
-	    re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-					    AMP,
-					    next_slot/2,
-					    &phy_vars_eNB->lte_frame_parms,
-					    num_pdcch_symbols,
-					    phy_vars_eNB->dlsch_eNB_SI);
-	} 
+              LOG_D(PHY,"[eNB %d][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %d, num_pdcch_symbols %d\n",
+                  phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot, input_buffer_length,num_pdcch_symbols);
+              for (i=0;i<input_buffer_length;i++)
+                LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);
+              LOG_T(PHY,"\n");
+#endif
+#endif
+
+              if (abstraction_flag == 0) {
+
+                  dlsch_encoding(DLSCH_pdu,
+                      &phy_vars_eNB->lte_frame_parms,
+                      num_pdcch_symbols,
+                      phy_vars_eNB->dlsch_eNB_SI,
+                      phy_vars_eNB->frame,next_slot>>1,
+                      &phy_vars_eNB->dlsch_rate_matching_stats,
+                      &phy_vars_eNB->dlsch_turbo_encoding_stats,
+                      &phy_vars_eNB->dlsch_interleaving_stats);
+
+                  dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
+                      0,
+                      phy_vars_eNB->dlsch_eNB_SI,
+                      get_G(&phy_vars_eNB->lte_frame_parms,
+                          phy_vars_eNB->dlsch_eNB_SI->nb_rb,
+                          phy_vars_eNB->dlsch_eNB_SI->rb_alloc,
+                          get_Qm(phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->mcs),
+                          num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
+                          0,
+                          next_slot);
+
+                  for (sect_id=0;sect_id<number_of_cards;sect_id++)
+                    re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                        AMP,
+                        next_slot/2,
+                        &phy_vars_eNB->lte_frame_parms,
+                        num_pdcch_symbols,
+                        phy_vars_eNB->dlsch_eNB_SI);
+              }
 #ifdef PHY_ABSTRACTION
-	else {
-	  dlsch_encoding_emul(phy_vars_eNB,
-			      DLSCH_pdu,
-			      phy_vars_eNB->dlsch_eNB_SI);
-	}
+              else {
+                  dlsch_encoding_emul(phy_vars_eNB,
+                      DLSCH_pdu,
+                      phy_vars_eNB->dlsch_eNB_SI);
+              }
 #endif
-	phy_vars_eNB->dlsch_eNB_SI->active = 0;
-      
-      }
+              phy_vars_eNB->dlsch_eNB_SI->active = 0;
 
-      // Check for RA activity
-      if (phy_vars_eNB->dlsch_eNB_ra->active == 1) {
+          }
+
+          // Check for RA activity
+          if (phy_vars_eNB->dlsch_eNB_ra->active == 1) {
 #ifdef DEBUG_PHY_PROC
-	LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, slot %d, RA active, filling RAR:\n",
-	      phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot);
+              LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, slot %d, RA active, filling RAR:\n",
+                  phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot);
 #endif
 
-	input_buffer_length = phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->TBS/8;
+              input_buffer_length = phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->TBS/8;
 
 #ifdef OPENAIR2
-	crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
-				    phy_vars_eNB->frame,
-				    dlsch_input_buffer,
-				    phy_vars_eNB->lte_frame_parms.N_RB_UL,
-				    input_buffer_length);
-	/*
+              crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
+                  phy_vars_eNB->frame,
+                  dlsch_input_buffer,
+                  phy_vars_eNB->lte_frame_parms.N_RB_UL,
+                  input_buffer_length);
+              /*
 	  for (i=0;i<input_buffer_length;i++)
 	  LOG_T(PHY,"%x.",dlsch_input_buffer[i]);
 	  LOG_T(PHY,"\n");
-	*/
-	UE_id = add_ue(crnti,phy_vars_eNB);
-	if (UE_id==-1) {
-	  LOG_W(PHY,"[eNB] Max user count reached.\n");
-	  //mac_xface->macphy_exit("[PHY][eNB] Max user count reached.\n");
-	  mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
-				    phy_vars_eNB->frame,
-				    crnti);
-	}
-	else {
-	  phy_vars_eNB->eNB_UE_stats[(u32)UE_id].mode = RA_RESPONSE;
-	  // Initialize indicator for first SR (to be cleared after ConnectionSetup is acknowledged)
-	  phy_vars_eNB->first_sr[(u32)UE_id] = 1;
-
-	  generate_eNB_ulsch_params_from_rar(dlsch_input_buffer,
-					     phy_vars_eNB->frame,
-					     (next_slot>>1),
-					     phy_vars_eNB->ulsch_eNB[(u32)UE_id],
-					     &phy_vars_eNB->lte_frame_parms);
-
-	  phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active = 1;
-
-	  get_Msg3_alloc(&phy_vars_eNB->lte_frame_parms,
-			 next_slot>>1,
-			 phy_vars_eNB->frame,
-			 &phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame,
-			 &phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe);
+               */
+              UE_id = add_ue(crnti,phy_vars_eNB);
+              if (UE_id==-1) {
+                  LOG_W(PHY,"[eNB] Max user count reached.\n");
+                  //mac_xface->macphy_exit("[PHY][eNB] Max user count reached.\n");
+                  mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->frame,
+                      crnti);
+              }
+              else {
+                  phy_vars_eNB->eNB_UE_stats[(u32)UE_id].mode = RA_RESPONSE;
+                  // Initialize indicator for first SR (to be cleared after ConnectionSetup is acknowledged)
+                  phy_vars_eNB->first_sr[(u32)UE_id] = 1;
+
+                  generate_eNB_ulsch_params_from_rar(dlsch_input_buffer,
+                      phy_vars_eNB->frame,
+                      (next_slot>>1),
+                      phy_vars_eNB->ulsch_eNB[(u32)UE_id],
+                      &phy_vars_eNB->lte_frame_parms);
+
+                  phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active = 1;
+
+                  get_Msg3_alloc(&phy_vars_eNB->lte_frame_parms,
+                      next_slot>>1,
+                      phy_vars_eNB->frame,
+                      &phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame,
+                      &phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe);
 #else
-	  for (i=0;i<input_buffer_length;i++)
-	    dlsch_input_buffer[i]= (unsigned char) i; //(taus()&0xff);
+                  for (i=0;i<input_buffer_length;i++)
+                    dlsch_input_buffer[i]= (unsigned char) i; //(taus()&0xff);
 
-	  dlsch_input_buffer[1] = (phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)>>(2+4); // 7 MSBs of timing advance + divide by 4
-	  dlsch_input_buffer[2] = ((phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)<<(4-2))&0xf0;  // 4 LSBs of timing advance + divide by 4
-	  //LOG_I(PHY,"UE %d: timing_offset = %d\n",UE_id,phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset); 
+                  dlsch_input_buffer[1] = (phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)>>(2+4); // 7 MSBs of timing advance + divide by 4
+                  dlsch_input_buffer[2] = ((phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)<<(4-2))&0xf0;  // 4 LSBs of timing advance + divide by 4
+                  //LOG_I(PHY,"UE %d: timing_offset = %d\n",UE_id,phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset);
 #endif
 
 #if defined(SMBV) && !defined(EXMIMO)
-      // Configures the data source of allocation (allocation is configured by DCI)
-      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-          msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
-          smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (next_slot>>1), dlsch_input_buffer, input_buffer_length);
-      }
+                  // Configures the data source of allocation (allocation is configured by DCI)
+                  if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                      msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
+                      smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (next_slot>>1), dlsch_input_buffer, input_buffer_length);
+                  }
 #endif      
 
 #ifdef DEBUG_PHY_PROC
-	  LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, next slot %d: Calling generate_dlsch (RA) with input size = %d,Msg3 frame %d, Msg3 subframe %d\n",
-		phy_vars_eNB->Mod_id,
-		phy_vars_eNB->frame, next_slot,input_buffer_length, 
-		phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame,
-		phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe);
-#endif
-
-	  if (abstraction_flag == 0) {
-
-	    dlsch_encoding(dlsch_input_buffer,
-			   &phy_vars_eNB->lte_frame_parms,
-			   num_pdcch_symbols,
-			   phy_vars_eNB->dlsch_eNB_ra,
-			   phy_vars_eNB->frame,next_slot>>1,
-			   &phy_vars_eNB->dlsch_rate_matching_stats,
-			   &phy_vars_eNB->dlsch_turbo_encoding_stats,
-			   &phy_vars_eNB->dlsch_interleaving_stats);
-
-	    //	phy_vars_eNB->dlsch_eNB_ra->rnti = RA_RNTI;
-	    dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
-			     0,
-			     phy_vars_eNB->dlsch_eNB_ra,
-			     get_G(&phy_vars_eNB->lte_frame_parms,
-				   phy_vars_eNB->dlsch_eNB_ra->nb_rb,
-				   phy_vars_eNB->dlsch_eNB_ra->rb_alloc,
-				   get_Qm(phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->mcs),
-				   num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
-			     0,
-			     next_slot);
-	    for (sect_id=0;sect_id<number_of_cards;sect_id++) 
-	      re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-					      AMP,
-					      next_slot/2,
-					      &phy_vars_eNB->lte_frame_parms,
-					      num_pdcch_symbols,
-					      phy_vars_eNB->dlsch_eNB_ra);
-	  }
+                  LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, next slot %d: Calling generate_dlsch (RA) with input size = %d,Msg3 frame %d, Msg3 subframe %d\n",
+                      phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->frame, next_slot,input_buffer_length,
+                      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame,
+                      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe);
+#endif
+
+                  if (abstraction_flag == 0) {
+
+                      dlsch_encoding(dlsch_input_buffer,
+                          &phy_vars_eNB->lte_frame_parms,
+                          num_pdcch_symbols,
+                          phy_vars_eNB->dlsch_eNB_ra,
+                          phy_vars_eNB->frame,next_slot>>1,
+                          &phy_vars_eNB->dlsch_rate_matching_stats,
+                          &phy_vars_eNB->dlsch_turbo_encoding_stats,
+                          &phy_vars_eNB->dlsch_interleaving_stats);
+
+                      //	phy_vars_eNB->dlsch_eNB_ra->rnti = RA_RNTI;
+                      dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
+                          0,
+                          phy_vars_eNB->dlsch_eNB_ra,
+                          get_G(&phy_vars_eNB->lte_frame_parms,
+                              phy_vars_eNB->dlsch_eNB_ra->nb_rb,
+                              phy_vars_eNB->dlsch_eNB_ra->rb_alloc,
+                              get_Qm(phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->mcs),
+                              num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
+                              0,
+                              next_slot);
+                      for (sect_id=0;sect_id<number_of_cards;sect_id++)
+                        re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                            AMP,
+                            next_slot/2,
+                            &phy_vars_eNB->lte_frame_parms,
+                            num_pdcch_symbols,
+                            phy_vars_eNB->dlsch_eNB_ra);
+                  }
 #ifdef PHY_ABSTRACTION
-	  else {
-	    dlsch_encoding_emul(phy_vars_eNB,
-				dlsch_input_buffer,
-				phy_vars_eNB->dlsch_eNB_ra);
-	  }
-#endif
-	  LOG_D(PHY,"[eNB %d][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
-		phy_vars_eNB->frame,next_slot>>1);
-	
+                  else {
+                      dlsch_encoding_emul(phy_vars_eNB,
+                          dlsch_input_buffer,
+                          phy_vars_eNB->dlsch_eNB_ra);
+                  }
+#endif
+                  LOG_D(PHY,"[eNB %d][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->frame,next_slot>>1);
+
 #ifdef DEBUG_PHY_PROC    
-	  LOG_D(PHY,"[eNB %d] Frame %d, slot %d, DLSCH (RA) re_allocated = %d\n",phy_vars_eNB->Mod_id,
-		phy_vars_eNB->frame, next_slot, re_allocated);
+                  LOG_D(PHY,"[eNB %d] Frame %d, slot %d, DLSCH (RA) re_allocated = %d\n",phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->frame, next_slot, re_allocated);
 #endif
 
 #ifdef OPENAIR2
-	} //max user count
+              } //max user count
 #endif
-	phy_vars_eNB->dlsch_eNB_ra->active = 0;
-      }
+              phy_vars_eNB->dlsch_eNB_ra->active = 0;
+          }
+
+          // Now scan UE specific DLSCH
+          for (UE_id=0;UE_id<NUMBER_OF_UE_MAX;UE_id++) {
+              if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0])&&
+                  (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti>0)&&
+                  (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active == 1)) {
+                  harq_pid = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->current_harq_pid;
+                  input_buffer_length = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS/8;
 
-      // Now scan UE specific DLSCH
-      for (UE_id=0;UE_id<NUMBER_OF_UE_MAX;UE_id++) {
-	if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0])&&
-	    (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti>0)&&
-	    (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active == 1)) {
-	  harq_pid = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->current_harq_pid;
-	  input_buffer_length = phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS/8;
-      
 
 #ifdef DEBUG_PHY_PROC
-	LOG_I(PHY,"[eNB %d][PDSCH %x/%d] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %d, G %d, nb_rb %d, mcs %d, pmi_alloc %x, rv %d (round %d)\n",
-	      phy_vars_eNB->Mod_id, phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti,harq_pid,
-	      phy_vars_eNB->frame, next_slot>>1, input_buffer_length,
-	      get_G(&phy_vars_eNB->lte_frame_parms,
-		    phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
-		    phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rb_alloc,
-		    get_Qm(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs),
-		    num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
-	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
-	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs,
-	      pmi2hex_2Ar1(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->pmi_alloc),
-	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->rvidx,
-	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->round);
-#endif
-
-	  phy_vars_eNB->eNB_UE_stats[(u8)UE_id].dlsch_sliding_cnt++;
-	  if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->harq_processes[harq_pid]->round == 0) {
-
-	    phy_vars_eNB->eNB_UE_stats[(u32)UE_id].dlsch_trials[0]++;
-	  
+                  LOG_I(PHY,"[eNB %d][PDSCH %x/%d] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %d, G %d, nb_rb %d, mcs %d, pmi_alloc %x, rv %d (round %d)\n",
+                      phy_vars_eNB->Mod_id, phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti,harq_pid,
+                      phy_vars_eNB->frame, next_slot>>1, input_buffer_length,
+                      get_G(&phy_vars_eNB->lte_frame_parms,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rb_alloc,
+                          get_Qm(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs),
+                          num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs,
+                          pmi2hex_2Ar1(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->pmi_alloc),
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->rvidx,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->round);
+#endif
+
+                  phy_vars_eNB->eNB_UE_stats[(u8)UE_id].dlsch_sliding_cnt++;
+                  if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->harq_processes[harq_pid]->round == 0) {
+
+                      phy_vars_eNB->eNB_UE_stats[(u32)UE_id].dlsch_trials[0]++;
+
 #ifdef OPENAIR2
-	    DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
-						 phy_vars_eNB->frame,
-						 phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti,
-						 0);
-	    phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS_MAC += phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS;
+                      DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
+                          phy_vars_eNB->frame,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti,
+                          0);
+                      phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS_MAC += phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS;
 #else
-	    DLSCH_pdu = DLSCH_pdu_tmp;
-	    for (i=0;i<input_buffer_length;i++)
-	      DLSCH_pdu[i] = (unsigned char)(taus()&0xff);
+                      DLSCH_pdu = DLSCH_pdu_tmp;
+                      for (i=0;i<input_buffer_length;i++)
+                        DLSCH_pdu[i] = (unsigned char)(taus()&0xff);
 #endif      
 
 #if defined(SMBV) && !defined(EXMIMO)
-        // Configures the data source of allocation (allocation is configured by DCI)
-        if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
-            msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
-            smbv_configure_datalist_for_user(smbv_fname, UE_id+1, DLSCH_pdu, input_buffer_length);
-        }
+                      // Configures the data source of allocation (allocation is configured by DCI)
+                      if (smbv_is_config_frame(phy_vars_eNB->frame) && (smbv_frame_cnt < 4)) {
+                          msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %d\n",phy_vars_eNB->frame,(smbv_frame_cnt*10) + (next_slot>>1),smbv_alloc_cnt);
+                          smbv_configure_datalist_for_user(smbv_fname, UE_id+1, DLSCH_pdu, input_buffer_length);
+                      }
 #endif      
 
 
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_DLSCH
-	    LOG_T(PHY,"eNB DLSCH SDU: \n");
-	    for (i=0;i<phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS>>3;i++)
-	      LOG_T(PHY,"%x.",(u8)DLSCH_pdu[i]);
-	    LOG_T(PHY,"\n");
+                      LOG_T(PHY,"eNB DLSCH SDU: \n");
+                      for (i=0;i<phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->TBS>>3;i++)
+                        LOG_T(PHY,"%x.",(u8)DLSCH_pdu[i]);
+                      LOG_T(PHY,"\n");
 #endif
 #endif
-	  }
-	  else {
-	    phy_vars_eNB->eNB_UE_stats[(u32)UE_id].dlsch_trials[phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->round]++;	
+                  }
+                  else {
+                      phy_vars_eNB->eNB_UE_stats[(u32)UE_id].dlsch_trials[phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->round]++;
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_DLSCH  
-	    LOG_D(PHY,"[eNB] This DLSCH is a retransmission\n");
-#endif
-#endif
-	  }
-	  if (abstraction_flag==0) {
-
-	    // 36-212
-	    dlsch_encoding(DLSCH_pdu,
-			   &phy_vars_eNB->lte_frame_parms,
-			   num_pdcch_symbols,
-			   phy_vars_eNB->dlsch_eNB[(u8)UE_id][0],
-			   phy_vars_eNB->frame,next_slot>>1,
-			   &phy_vars_eNB->dlsch_rate_matching_stats,
-			   &phy_vars_eNB->dlsch_turbo_encoding_stats,
-			   &phy_vars_eNB->dlsch_interleaving_stats);
-	    // 36-211
-	    dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
-			     0,
-			     phy_vars_eNB->dlsch_eNB[(u8)UE_id][0],
-			     get_G(&phy_vars_eNB->lte_frame_parms,
-				   phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
-				   phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rb_alloc,
-				   get_Qm(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs),
-				   num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
-			     0,
-			     next_slot);      
-	    for (sect_id=0;sect_id<number_of_cards;sect_id++) {
-	    
-	      /*          if ((phy_vars_eNB->transmission_mode[(u8)UE_id] == 5) &&
+                      LOG_D(PHY,"[eNB] This DLSCH is a retransmission\n");
+#endif
+#endif
+                  }
+                  if (abstraction_flag==0) {
+
+                      // 36-212
+                      dlsch_encoding(DLSCH_pdu,
+                          &phy_vars_eNB->lte_frame_parms,
+                          num_pdcch_symbols,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0],
+                          phy_vars_eNB->frame,next_slot>>1,
+                          &phy_vars_eNB->dlsch_rate_matching_stats,
+                          &phy_vars_eNB->dlsch_turbo_encoding_stats,
+                          &phy_vars_eNB->dlsch_interleaving_stats);
+                      // 36-211
+                      dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,
+                          0,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0],
+                          get_G(&phy_vars_eNB->lte_frame_parms,
+                              phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->nb_rb,
+                              phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rb_alloc,
+                              get_Qm(phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs),
+                              num_pdcch_symbols,phy_vars_eNB->frame,next_slot>>1),
+                              0,
+                              next_slot);
+                      for (sect_id=0;sect_id<number_of_cards;sect_id++) {
+
+                          /*          if ((phy_vars_eNB->transmission_mode[(u8)UE_id] == 5) &&
 			  (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->dl_power_off == 0)) 
 			  amp = (s16)(((s32)AMP*(s32)ONE_OVER_SQRT2_Q15)>>15);
 			  else*/
-	      //              amp = AMP;
-	    //	    if (UE_id == 1)
-	    //	    LOG_I(PHY,"[MYEMOS] MCS_i %d\n", phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs);
-
-	      re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
-					      AMP,
-					      next_slot/2,
-					      &phy_vars_eNB->lte_frame_parms,
-					      num_pdcch_symbols,
-					      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]);
-	    }
-	  }
+                          //              amp = AMP;
+                          //	    if (UE_id == 1)
+                          //	    LOG_I(PHY,"[MYEMOS] MCS_i %d\n", phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[harq_pid]->mcs);
+
+                          re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id],
+                              AMP,
+                              next_slot/2,
+                              &phy_vars_eNB->lte_frame_parms,
+                              num_pdcch_symbols,
+                              phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]);
+                      }
+                  }
 #ifdef PHY_ABSTRACTION
-	  else {
-	    dlsch_encoding_emul(phy_vars_eNB,
-				DLSCH_pdu,
-				phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]);
-	  }
-#endif
-	  phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active = 0;
-	
-	  //mac_xface->macphy_exit("first dlsch transmitted\n");
-	}
+                  else {
+                      dlsch_encoding_emul(phy_vars_eNB,
+                          DLSCH_pdu,
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]);
+                  }
+#endif
+                  phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active = 0;
 
-	else if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0])&&
-		 (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti>0)&&
-		 (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active == 0)) {
-      
-	  // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
-	  phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->subframe_tx[next_slot>>1]=0;
+                  //mac_xface->macphy_exit("first dlsch transmitted\n");
+              }
+
+              else if ((phy_vars_eNB->dlsch_eNB[(u8)UE_id][0])&&
+                  (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->rnti>0)&&
+                  (phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->active == 0)) {
+
+                  // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
+                  phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->subframe_tx[next_slot>>1]=0;
 #ifdef DEBUG_PHY_PROC
-	  //LOG_D(PHY,"[eNB %d] DCI: Clearing subframe_tx for subframe %d, UE %d\n",phy_vars_eNB->Mod_id,next_slot>>1,UE_id);
+                  //LOG_D(PHY,"[eNB %d] DCI: Clearing subframe_tx for subframe %d, UE %d\n",phy_vars_eNB->Mod_id,next_slot>>1,UE_id);
 #endif
-	}
-      } 
-  
+              }
+          }
+
 
 
-      // if we have PHICH to generate
-      //    printf("[PHY][eNB] Frame %d subframe %d Checking for phich\n",phy_vars_eNB->frame,next_slot>>1); 
-      if (is_phich_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1)) {
+          // if we have PHICH to generate
+          //    printf("[PHY][eNB] Frame %d subframe %d Checking for phich\n",phy_vars_eNB->frame,next_slot>>1);
+          if (is_phich_subframe(&phy_vars_eNB->lte_frame_parms,next_slot>>1)) {
 #ifdef DEBUG_PHY_PROC
-	//      LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_phich_top\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1);
-#endif
-	for (sect_id=0;sect_id<number_of_cards;sect_id++) {
-	  generate_phich_top(phy_vars_eNB,
-			     next_slot>>1,
-			     AMP,
-			     sect_id,
-			     abstraction_flag);
-	}
+              //      LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_phich_top\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot>>1);
+#endif
+              for (sect_id=0;sect_id<number_of_cards;sect_id++) {
+                  generate_phich_top(phy_vars_eNB,
+                      next_slot>>1,
+                      AMP,
+                      sect_id,
+                      abstraction_flag);
+              }
+          }
       }
-    }
-   
+
 #ifdef EMOS
-    phy_procedures_emos_eNB_TX(next_slot, phy_vars_eNB);
+      phy_procedures_emos_eNB_TX(next_slot, phy_vars_eNB);
 #endif
   }
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,0);
 }
 
 void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,u8 last_slot,u8 UE_id, u8 harq_pid) {
-    // this prepares the demodulation of the first PUSCH of a new user, containing Msg3
+  // this prepares the demodulation of the first PUSCH of a new user, containing Msg3
 
   int frame = ((last_slot>>1)>=8 ? -1 : 0) + phy_vars_eNB->frame;
 
   LOG_D(PHY,"[eNB %d][RAPROC] frame %d : subframe %d (last_slot %d): process_Msg3 UE_id %d (active %d, subframe %d, frame %d)\n",
-	phy_vars_eNB->Mod_id,
-	frame,last_slot>>1,last_slot,
-	UE_id,phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active,
-	phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe,
-	phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame);
+      phy_vars_eNB->Mod_id,
+      frame,last_slot>>1,last_slot,
+      UE_id,phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active,
+      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe,
+      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame);
   phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_flag = 0;
-  
+
   if ((phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active == 1) && 
       ((last_slot%2)==1) && 
       (phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_subframe == (last_slot>>1)) &&
       (phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_frame == frame))   {
-    
-    //    harq_pid = 0;
-    
-    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active = 0;
-    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_flag = 1;
-    phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag=1;
-    LOG_D(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d: Setting subframe_scheduling_flag (Msg3) for UE %d\n",
-	  phy_vars_eNB->Mod_id,
-	  frame,last_slot,last_slot>>1,UE_id);
+
+      //    harq_pid = 0;
+
+      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_active = 0;
+      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->Msg3_flag = 1;
+      phy_vars_eNB->ulsch_eNB[(u32)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag=1;
+      LOG_D(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d: Setting subframe_scheduling_flag (Msg3) for UE %d\n",
+          phy_vars_eNB->Mod_id,
+          frame,last_slot,last_slot>>1,UE_id);
   }
 }
 
@@ -2123,12 +2124,12 @@ void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,u8 last_slot,u8 UE_id, u8 harq_pid)
 // rate-adaptation based on the error statistics derived from the ACK/NAK process
 
 void process_HARQ_feedback(u8 UE_id, 
-			   u8 subframe, 
-			   PHY_VARS_eNB *phy_vars_eNB,
-			   u8 pusch_flag, 
-			   u8 *pucch_payload, 
-			   u8 pucch_sel,
-			   u8 SR_payload) {
+    u8 subframe,
+    PHY_VARS_eNB *phy_vars_eNB,
+    u8 pusch_flag,
+    u8 *pucch_payload,
+    u8 pucch_sel,
+    u8 SR_payload) {
 
   u8 dl_harq_pid[8],dlsch_ACK[8],j,dl_subframe;
   LTE_eNB_DLSCH_t *dlsch             =  phy_vars_eNB->dlsch_eNB[(u32)UE_id][0];
@@ -2140,222 +2141,222 @@ void process_HARQ_feedback(u8 UE_id,
   int frame = ((subframe>=8) ? -1 : 0) + phy_vars_eNB->frame;
 
   if (phy_vars_eNB->lte_frame_parms.frame_type == 0){ //FDD
-    subframe_m4 = (subframe<4) ? subframe+6 : subframe-4;
+      subframe_m4 = (subframe<4) ? subframe+6 : subframe-4;
 
-    dl_harq_pid[0] = dlsch->harq_ids[subframe_m4];
-    M=1;
-    if (pusch_flag == 1)
-      dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[0];
-    else
-      dlsch_ACK[0] = pucch_payload[0];
-    LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d for subframe %d\n",phy_vars_eNB->Mod_id,
-	  frame,dlsch_ACK[0],subframe_m4);
+      dl_harq_pid[0] = dlsch->harq_ids[subframe_m4];
+      M=1;
+      if (pusch_flag == 1)
+        dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[0];
+      else
+        dlsch_ACK[0] = pucch_payload[0];
+      LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d for subframe %d\n",phy_vars_eNB->Mod_id,
+          frame,dlsch_ACK[0],subframe_m4);
   }
   else {  // TDD Handle M=1,2 cases only
-    
-    M=ul_ACK_subframe2_M(&phy_vars_eNB->lte_frame_parms,
-			 subframe);
-    // Now derive ACK information for TDD
-    if (pusch_flag == 1) { // Do PUSCH ACK/NAK first
-      // detect missing DAI
-      //FK: this code is just a guess
-      //RK: not exactly, yes if scheduled from PHICH (i.e. no DCI format 0)
-      //    otherwise, it depends on how many of the PDSCH in the set are scheduled, we can leave it like this,
-      //    but we have to adapt the code below.  For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used
-
-      dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[0];
-      dlsch_ACK[1] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[1];
-      //      printf("UE %d: ACK %d,%d\n",UE_id,dlsch_ACK[0],dlsch_ACK[1]);
-    }
-
-    else {  // PUCCH ACK/NAK
-      if ((SR_payload == 1)&&(pucch_sel!=2)) {  // decode Table 7.3 if multiplexing and SR=1 
-	nb_ACK = 0;
-	if (M == 2) {
-	  if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1)) // b[0],b[1]
-	    nb_ACK = 1;
-	  else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0))
-	    nb_ACK = 2;
-	}
-	else if (M == 3) {
-	  if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1)) 
-	    nb_ACK = 1;
-	  else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0))
-	    nb_ACK = 2;
-	  else if ((pucch_payload[0] == 0) && (pucch_payload[1] == 1))
-	    nb_ACK = 3;
-	}
-      }
-      else if (pucch_sel == 2) {  // bundling or M=1
-	//	printf("*** (%d,%d)\n",pucch_payload[0],pucch_payload[1]);
-	dlsch_ACK[0] = pucch_payload[0];
-	dlsch_ACK[1] = pucch_payload[0];
-      }
-      else {  // multiplexing with no SR, this is table 10.1
-	if (M==1) 
-	  dlsch_ACK[0] = pucch_payload[0];
-	else if (M==2) {
-	  if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) ||
-	      ((pucch_sel == 0) && (pucch_payload[0] == 0) && (pucch_payload[1] == 1)))
-	    dlsch_ACK[0] = 1;
-	  else
-	    dlsch_ACK[0] = 0;
 
-	  if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) ||
-	      ((pucch_sel == 1) && (pucch_payload[0] == 0) && (pucch_payload[1] == 0)))
-	    dlsch_ACK[1] = 1;
-	  else
-	    dlsch_ACK[1] = 0;
-	}
+      M=ul_ACK_subframe2_M(&phy_vars_eNB->lte_frame_parms,
+          subframe);
+      // Now derive ACK information for TDD
+      if (pusch_flag == 1) { // Do PUSCH ACK/NAK first
+          // detect missing DAI
+          //FK: this code is just a guess
+          //RK: not exactly, yes if scheduled from PHICH (i.e. no DCI format 0)
+          //    otherwise, it depends on how many of the PDSCH in the set are scheduled, we can leave it like this,
+          //    but we have to adapt the code below.  For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used
+
+          dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[0];
+          dlsch_ACK[1] = phy_vars_eNB->ulsch_eNB[(u8)UE_id]->o_ACK[1];
+          //      printf("UE %d: ACK %d,%d\n",UE_id,dlsch_ACK[0],dlsch_ACK[1]);
+      }
+
+      else {  // PUCCH ACK/NAK
+          if ((SR_payload == 1)&&(pucch_sel!=2)) {  // decode Table 7.3 if multiplexing and SR=1
+              nb_ACK = 0;
+              if (M == 2) {
+                  if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1)) // b[0],b[1]
+                    nb_ACK = 1;
+                  else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0))
+                    nb_ACK = 2;
+              }
+              else if (M == 3) {
+                  if ((pucch_payload[0] == 1) && (pucch_payload[1] == 1))
+                    nb_ACK = 1;
+                  else if ((pucch_payload[0] == 1) && (pucch_payload[1] == 0))
+                    nb_ACK = 2;
+                  else if ((pucch_payload[0] == 0) && (pucch_payload[1] == 1))
+                    nb_ACK = 3;
+              }
+          }
+          else if (pucch_sel == 2) {  // bundling or M=1
+              //	printf("*** (%d,%d)\n",pucch_payload[0],pucch_payload[1]);
+              dlsch_ACK[0] = pucch_payload[0];
+              dlsch_ACK[1] = pucch_payload[0];
+          }
+          else {  // multiplexing with no SR, this is table 10.1
+              if (M==1)
+                dlsch_ACK[0] = pucch_payload[0];
+              else if (M==2) {
+                  if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) ||
+                      ((pucch_sel == 0) && (pucch_payload[0] == 0) && (pucch_payload[1] == 1)))
+                    dlsch_ACK[0] = 1;
+                  else
+                    dlsch_ACK[0] = 0;
+
+                  if (((pucch_sel == 1) && (pucch_payload[0] == 1) && (pucch_payload[1] == 1)) ||
+                      ((pucch_sel == 1) && (pucch_payload[0] == 0) && (pucch_payload[1] == 0)))
+                    dlsch_ACK[1] = 1;
+                  else
+                    dlsch_ACK[1] = 0;
+              }
+          }
       }
-    }
   }
 
   // handle case where positive SR was transmitted with multiplexing
   if ((SR_payload == 1)&&(pucch_sel!=2)&&(pusch_flag == 0)) {
-    nb_alloc = 0;
-    for (m=0;m<M;m++) {
-      dl_subframe = ul_ACK_subframe2_dl_subframe(&phy_vars_eNB->lte_frame_parms,
-						 subframe,
-						 m);
-      
-      if (dlsch->subframe_tx[dl_subframe]==1) 
-	nb_alloc++;
-    }
-    if (nb_alloc == nb_ACK)
-      all_ACKed = 1;
-    else 
-      all_ACKed = 0;
+      nb_alloc = 0;
+      for (m=0;m<M;m++) {
+          dl_subframe = ul_ACK_subframe2_dl_subframe(&phy_vars_eNB->lte_frame_parms,
+              subframe,
+              m);
+
+          if (dlsch->subframe_tx[dl_subframe]==1)
+            nb_alloc++;
+      }
+      if (nb_alloc == nb_ACK)
+        all_ACKed = 1;
+      else
+        all_ACKed = 0;
 
-    //    printf("nb_alloc %d, all_ACKed %d\n",nb_alloc,all_ACKed);
+      //    printf("nb_alloc %d, all_ACKed %d\n",nb_alloc,all_ACKed);
   }
 
 
   for (m=0,mp=-1;m<M;m++) {
 
-    dl_subframe = ul_ACK_subframe2_dl_subframe(&phy_vars_eNB->lte_frame_parms,
-					       subframe,
-					       m);
+      dl_subframe = ul_ACK_subframe2_dl_subframe(&phy_vars_eNB->lte_frame_parms,
+          subframe,
+          m);
+
+      if (dlsch->subframe_tx[dl_subframe]==1) {
+          if (pusch_flag == 1)
+            mp++;
+          else
+            mp = m;
+
+          dl_harq_pid[m]     = dlsch->harq_ids[dl_subframe];
+
+          if ((pucch_sel != 2)&&(pusch_flag == 0)) { // multiplexing
+              if ((SR_payload == 1)&&(all_ACKed == 1))
+                dlsch_ACK[m] = 1;
+              else
+                dlsch_ACK[m] = 0;
+          }
+          if (dl_harq_pid[m]<dlsch->Mdlharq) {
+              dlsch_harq_proc = dlsch->harq_processes[dl_harq_pid[m]];
+#ifdef DEBUG_PHY_PROC	
+              LOG_I(PHY,"[eNB %d][PDSCH %x/%d] subframe %d, status %d, round %d (mcs %d, rv %d, TBS %d)\n",phy_vars_eNB->Mod_id,
+                  dlsch->rnti,dl_harq_pid[m],dl_subframe,
+                  dlsch_harq_proc->status,dlsch_harq_proc->round,
+                  dlsch->harq_processes[dl_harq_pid[m]]->mcs,
+                  dlsch->harq_processes[dl_harq_pid[m]]->rvidx,
+                  dlsch->harq_processes[dl_harq_pid[m]]->TBS);
+              if (dlsch_harq_proc->status==DISABLED)
+                LOG_E(PHY,"dlsch_harq_proc is disabled? \n");
+#endif
+              if ((dl_harq_pid[m]<dlsch->Mdlharq) &&
+                  (dlsch_harq_proc->status == ACTIVE)) {
+                  // dl_harq_pid of DLSCH is still active
+
+                  //	  msg("[PHY] eNB %d Process %d is active (%d)\n",phy_vars_eNB->Mod_id,dl_harq_pid[m],dlsch_ACK[m]);
+                  if ( dlsch_ACK[mp]==0) {
+                      // Received NAK
+#ifdef DEBUG_PHY_PROC	
+                      LOG_I(PHY,"[eNB %d][PDSCH %x/%d] NAK Received in round %d, requesting retransmission\n",phy_vars_eNB->Mod_id,
+                          dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round);
+#endif
 
-    if (dlsch->subframe_tx[dl_subframe]==1) {
-      if (pusch_flag == 1)
-	mp++;
-      else
-	mp = m;
+                      //	    if (dlsch_harq_proc->round == 0)
+                      ue_stats->dlsch_NAK[dlsch_harq_proc->round]++;
 
-      dl_harq_pid[m]     = dlsch->harq_ids[dl_subframe];
+                      // then Increment DLSCH round index
+                      dlsch_harq_proc->round++;
 
-      if ((pucch_sel != 2)&&(pusch_flag == 0)) { // multiplexing
-	if ((SR_payload == 1)&&(all_ACKed == 1))
-	  dlsch_ACK[m] = 1;
-	else	
-	  dlsch_ACK[m] = 0;
-      }
-      if (dl_harq_pid[m]<dlsch->Mdlharq) {
-	dlsch_harq_proc = dlsch->harq_processes[dl_harq_pid[m]];
-#ifdef DEBUG_PHY_PROC	
-	LOG_I(PHY,"[eNB %d][PDSCH %x/%d] subframe %d, status %d, round %d (mcs %d, rv %d, TBS %d)\n",phy_vars_eNB->Mod_id,
-	      dlsch->rnti,dl_harq_pid[m],dl_subframe,
-	      dlsch_harq_proc->status,dlsch_harq_proc->round,
-	      dlsch->harq_processes[dl_harq_pid[m]]->mcs,
-	      dlsch->harq_processes[dl_harq_pid[m]]->rvidx,
-	      dlsch->harq_processes[dl_harq_pid[m]]->TBS);
-	if (dlsch_harq_proc->status==DISABLED)
-	  LOG_E(PHY,"dlsch_harq_proc is disabled? \n");
-#endif
-	if ((dl_harq_pid[m]<dlsch->Mdlharq) &&
-	    (dlsch_harq_proc->status == ACTIVE)) {
-	  // dl_harq_pid of DLSCH is still active
-	  
-	  //	  msg("[PHY] eNB %d Process %d is active (%d)\n",phy_vars_eNB->Mod_id,dl_harq_pid[m],dlsch_ACK[m]);
-	  if ( dlsch_ACK[mp]==0) {
-	    // Received NAK 
+                      if (dlsch_harq_proc->round == dlsch->Mdlharq) {
+                          // This was the last round for DLSCH so reset round and increment l2_error counter
 #ifdef DEBUG_PHY_PROC	
-	    LOG_I(PHY,"[eNB %d][PDSCH %x/%d] NAK Received in round %d, requesting retransmission\n",phy_vars_eNB->Mod_id,
-		  dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round);
-#endif
-	    
-	    //	    if (dlsch_harq_proc->round == 0)
-	    ue_stats->dlsch_NAK[dlsch_harq_proc->round]++;
-	    
-	    // then Increment DLSCH round index 
-	    dlsch_harq_proc->round++;
-	    
-	    if (dlsch_harq_proc->round == dlsch->Mdlharq) {
-	      // This was the last round for DLSCH so reset round and increment l2_error counter
-#ifdef DEBUG_PHY_PROC	
-	      LOG_W(PHY,"[eNB %d][PDSCH %x/%d] DLSCH retransmissions exhausted, dropping packet\n",phy_vars_eNB->Mod_id,
-		    dlsch->rnti,dl_harq_pid[m]);
+                          LOG_W(PHY,"[eNB %d][PDSCH %x/%d] DLSCH retransmissions exhausted, dropping packet\n",phy_vars_eNB->Mod_id,
+                              dlsch->rnti,dl_harq_pid[m]);
 #endif
-	      dlsch_harq_proc->round = 0;
-	      ue_stats->dlsch_l2_errors++;
-	      dlsch_harq_proc->status = SCH_IDLE;
-	      dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
-	    }
-	  }
-	  else {
+                          dlsch_harq_proc->round = 0;
+                          ue_stats->dlsch_l2_errors++;
+                          dlsch_harq_proc->status = SCH_IDLE;
+                          dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
+                      }
+                  }
+                  else {
 #ifdef DEBUG_PHY_PROC	
-	    LOG_I(PHY,"[eNB %d][PDSCH %x/%d] ACK Received in round %d, resetting process\n",phy_vars_eNB->Mod_id,
-		  dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round);
+                      LOG_I(PHY,"[eNB %d][PDSCH %x/%d] ACK Received in round %d, resetting process\n",phy_vars_eNB->Mod_id,
+                          dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round);
 #endif
-	    ue_stats->dlsch_ACK[dlsch_harq_proc->round]++;
+                      ue_stats->dlsch_ACK[dlsch_harq_proc->round]++;
 
-	    // Received ACK so set round to 0 and set dlsch_harq_pid IDLE
-	    dlsch_harq_proc->round  = 0;
-	    dlsch_harq_proc->status = SCH_IDLE; 
-	    dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
+                      // Received ACK so set round to 0 and set dlsch_harq_pid IDLE
+                      dlsch_harq_proc->round  = 0;
+                      dlsch_harq_proc->status = SCH_IDLE;
+                      dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
 
-	    ue_stats->total_TBS = ue_stats->total_TBS + 
-	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
-	    /*
+                      ue_stats->total_TBS = ue_stats->total_TBS +
+                          phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
+                      /*
 	    ue_stats->total_transmitted_bits = ue_stats->total_transmitted_bits +
 	      phy_vars_eNB->dlsch_eNB[(u8)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
-	    */
-	  }
-	  
-	  // Do fine-grain rate-adaptation for DLSCH 
-	  if (ue_stats->dlsch_NAK[0] > dlsch->error_threshold) {
-	    if (ue_stats->dlsch_mcs_offset == 1)
-	      ue_stats->dlsch_mcs_offset=0;
-	    else
-	      ue_stats->dlsch_mcs_offset=-1;
-	  }
+                       */
+                  }
+
+                  // Do fine-grain rate-adaptation for DLSCH
+                  if (ue_stats->dlsch_NAK[0] > dlsch->error_threshold) {
+                      if (ue_stats->dlsch_mcs_offset == 1)
+                        ue_stats->dlsch_mcs_offset=0;
+                      else
+                        ue_stats->dlsch_mcs_offset=-1;
+                  }
 #ifdef DEBUG_PHY_PROC	  
-	  LOG_D(PHY,"[process_HARQ_feedback] Frame %d Setting round to %d for pid %d (subframe %d)\n",frame,
-		dlsch_harq_proc->round,dl_harq_pid[m],subframe);
-#endif
-	  
-	  // Clear NAK stats and adjust mcs offset
-	  // after measurement window timer expires
-	  if ((ue_stats->dlsch_sliding_cnt == dlsch->ra_window_size) ) {
-	    if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK[0] < 2))
-	      ue_stats->dlsch_mcs_offset = 1;
-	    if ((ue_stats->dlsch_mcs_offset == 1) && (ue_stats->dlsch_NAK[0] > 2))
-	      ue_stats->dlsch_mcs_offset = 0;
-	    if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK[0] > 2))
-	      ue_stats->dlsch_mcs_offset = -1;
-	    if ((ue_stats->dlsch_mcs_offset == -1) && (ue_stats->dlsch_NAK[0] < 2))
-	      ue_stats->dlsch_mcs_offset = 0;
-	    
-	    for (j=0;j<phy_vars_eNB->dlsch_eNB[j][0]->Mdlharq;j++)
-	      ue_stats->dlsch_NAK[j] = 0;
-	    ue_stats->dlsch_sliding_cnt = 0;
-	  }
-	  
-	  
-	}
+                  LOG_D(PHY,"[process_HARQ_feedback] Frame %d Setting round to %d for pid %d (subframe %d)\n",frame,
+                      dlsch_harq_proc->round,dl_harq_pid[m],subframe);
+#endif
+
+                  // Clear NAK stats and adjust mcs offset
+                  // after measurement window timer expires
+                  if ((ue_stats->dlsch_sliding_cnt == dlsch->ra_window_size) ) {
+                      if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK[0] < 2))
+                        ue_stats->dlsch_mcs_offset = 1;
+                      if ((ue_stats->dlsch_mcs_offset == 1) && (ue_stats->dlsch_NAK[0] > 2))
+                        ue_stats->dlsch_mcs_offset = 0;
+                      if ((ue_stats->dlsch_mcs_offset == 0) && (ue_stats->dlsch_NAK[0] > 2))
+                        ue_stats->dlsch_mcs_offset = -1;
+                      if ((ue_stats->dlsch_mcs_offset == -1) && (ue_stats->dlsch_NAK[0] < 2))
+                        ue_stats->dlsch_mcs_offset = 0;
+
+                      for (j=0;j<phy_vars_eNB->dlsch_eNB[j][0]->Mdlharq;j++)
+                        ue_stats->dlsch_NAK[j] = 0;
+                      ue_stats->dlsch_sliding_cnt = 0;
+                  }
+
+
+              }
+          }
       }
-    }
   }
 }
 
 void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
-		      u8 UE_id,
-		      u8 subframe,
-		      s16 *n1_pucch0,
-		      s16 *n1_pucch1,
-		      s16 *n1_pucch2,
-		      s16 *n1_pucch3) {
+    u8 UE_id,
+    u8 subframe,
+    s16 *n1_pucch0,
+    s16 *n1_pucch1,
+    s16 *n1_pucch2,
+    s16 *n1_pucch3) {
 
   LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms;
   u8 nCCE0,nCCE1;
@@ -2363,143 +2364,143 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB,
   int frame = ((subframe>=8) ? -1 : 0) + phy_vars_eNB->frame;
 
   if (frame_parms->frame_type == FDD ) {
-    sf = (subframe<4) ? (subframe+6) : (subframe-4); 
-    //    printf("n1_pucch_eNB: subframe %d, nCCE %d\n",sf,phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf]);
+      sf = (subframe<4) ? (subframe+6) : (subframe-4);
+      //    printf("n1_pucch_eNB: subframe %d, nCCE %d\n",sf,phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf]);
 
-    if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[sf]>0) {
-      *n1_pucch0 = frame_parms->pucch_config_common.n1PUCCH_AN + phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf];
-      *n1_pucch1 = -1;
-    }
-    else {
-      *n1_pucch0 = -1;
-      *n1_pucch1 = -1;
-    }
+      if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[sf]>0) {
+          *n1_pucch0 = frame_parms->pucch_config_common.n1PUCCH_AN + phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[sf];
+          *n1_pucch1 = -1;
+      }
+      else {
+          *n1_pucch0 = -1;
+          *n1_pucch1 = -1;
+      }
   }
   else {
 
-    switch (frame_parms->tdd_config) {
-    case 1:  // DL:S:UL:UL:DL:DL:S:UL:UL:DL
-      if (subframe == 2) {  // ACK subframes 5 and 6
-	/*	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[6]>0) {
+      switch (frame_parms->tdd_config) {
+      case 1:  // DL:S:UL:UL:DL:DL:S:UL:UL:DL
+        if (subframe == 2) {  // ACK subframes 5 and 6
+            /*	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[6]>0) {
 		nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[6];
-		*n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN; 
+             *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
 		}
 		else
-		*n1_pucch1 = -1;*/
+             *n1_pucch1 = -1;*/
 
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[5]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[5];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[5]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[5];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
 
-	*n1_pucch1 = -1;	
-      }
-      else if (subframe == 3) {   // ACK subframe 9
-	
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[9]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[9];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
+            *n1_pucch1 = -1;
+        }
+        else if (subframe == 3) {   // ACK subframe 9
 
-	*n1_pucch1 = -1;
-	
-      }
-      else if (subframe == 7) {  // ACK subframes 0 and 1
-	//harq_ack[0].nCCE;  
-	//harq_ack[1].nCCE;
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[0]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[0];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 + frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[9]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[9];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
 
-	*n1_pucch1 = -1;
-      }
-      else if (subframe == 8) {   // ACK subframes 4
-	//harq_ack[4].nCCE;
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[4]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[4];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 + frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
+            *n1_pucch1 = -1;
 
-	*n1_pucch1 = -1;
-      }
-      else {
-	LOG_D(PHY,"[eNB %d] frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
-	      phy_vars_eNB->Mod_id,
-	      frame,
-	      subframe,frame_parms->tdd_config);
-	return;
-      }
-      break;
-    case 3:  // DL:S:UL:UL:UL:DL:DL:DL:DL:DL
-      if (subframe == 2) {  // ACK subframes 5,6 and 1 (S in frame-2), forget about n-11 for the moment (S-subframe)
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[6]>0) {
-	  nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[6];
-	  *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch1 = -1;
+        }
+        else if (subframe == 7) {  // ACK subframes 0 and 1
+            //harq_ack[0].nCCE;
+            //harq_ack[1].nCCE;
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[0]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[0];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 + frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
 
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[5]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[5];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
-      }
-      else if (subframe == 3) {   // ACK subframes 7 and 8
-	LOG_D(PHY,"get_n1_pucch_eNB : subframe 3, subframe_tx[7] %d, subframe_tx[8] %d\n",
-	      phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[7],phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[8]);
-
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[8]>0) {
-	  nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[8];
-	  *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
-	  LOG_D(PHY,"nCCE1 %d, n1_pucch1 %d\n",nCCE1,*n1_pucch1);
-	}
-	else
-	  *n1_pucch1 = -1;
+            *n1_pucch1 = -1;
+        }
+        else if (subframe == 8) {   // ACK subframes 4
+            //harq_ack[4].nCCE;
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[4]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[4];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 + frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
 
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[7]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[7];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN; 
-	  LOG_D(PHY,"nCCE0 %d, n1_pucch0 %d\n",nCCE0,*n1_pucch0);
-	}
-	else
-	  *n1_pucch0 = -1;
-      }
-      else if (subframe == 4) {  // ACK subframes 9 and 0
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[0]>0) {
-	  nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[0];
-	  *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch1 = -1;
+            *n1_pucch1 = -1;
+        }
+        else {
+            LOG_D(PHY,"[eNB %d] frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
+                phy_vars_eNB->Mod_id,
+                frame,
+                subframe,frame_parms->tdd_config);
+            return;
+        }
+        break;
+      case 3:  // DL:S:UL:UL:UL:DL:DL:DL:DL:DL
+        if (subframe == 2) {  // ACK subframes 5,6 and 1 (S in frame-2), forget about n-11 for the moment (S-subframe)
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[6]>0) {
+                nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[6];
+                *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch1 = -1;
 
-	if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[9]>0) {
-	  nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[9];
-	  *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN; 
-	}
-	else
-	  *n1_pucch0 = -1;
-      }
-      else {
-	LOG_D(PHY,"[eNB %d] Frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
-	      phy_vars_eNB->Mod_id,frame,subframe,frame_parms->tdd_config);
-	return;
-      }
-      break;
-    }  // switch tdd_config     
-    // Don't handle the case M>2
-    *n1_pucch2 = -1;
-    *n1_pucch3 = -1;
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[5]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[5];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
+        }
+        else if (subframe == 3) {   // ACK subframes 7 and 8
+            LOG_D(PHY,"get_n1_pucch_eNB : subframe 3, subframe_tx[7] %d, subframe_tx[8] %d\n",
+                phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[7],phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[8]);
+
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[8]>0) {
+                nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[8];
+                *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
+                LOG_D(PHY,"nCCE1 %d, n1_pucch1 %d\n",nCCE1,*n1_pucch1);
+            }
+            else
+              *n1_pucch1 = -1;
+
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[7]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[7];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN;
+                LOG_D(PHY,"nCCE0 %d, n1_pucch0 %d\n",nCCE0,*n1_pucch0);
+            }
+            else
+              *n1_pucch0 = -1;
+        }
+        else if (subframe == 4) {  // ACK subframes 9 and 0
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[0]>0) {
+                nCCE1 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[0];
+                *n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch1 = -1;
+
+            if (phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->subframe_tx[9]>0) {
+                nCCE0 = phy_vars_eNB->dlsch_eNB[(u32)UE_id][0]->nCCE[9];
+                *n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0 +frame_parms->pucch_config_common.n1PUCCH_AN;
+            }
+            else
+              *n1_pucch0 = -1;
+        }
+        else {
+            LOG_D(PHY,"[eNB %d] Frame %d: phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
+                phy_vars_eNB->Mod_id,frame,subframe,frame_parms->tdd_config);
+            return;
+        }
+        break;
+      }  // switch tdd_config
+      // Don't handle the case M>2
+      *n1_pucch2 = -1;
+      *n1_pucch3 = -1;
   }
 }
 
@@ -2515,44 +2516,44 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
   memset(&preamble_energy_list[0],0,64*sizeof(u16));
   memset(&preamble_delay_list[0],0,64*sizeof(u16));
   if (abstraction_flag == 0) {
-    //    LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",phy_vars_eNB->Mod_id,
-    //          frame,subframe,dB_fixed(signal_energy(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],512)) - phy_vars_eNB->rx_total_gain_eNB_dB);        
+      //    LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",phy_vars_eNB->Mod_id,
+      //          frame,subframe,dB_fixed(signal_energy(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],512)) - phy_vars_eNB->rx_total_gain_eNB_dB);
 
-    //    LOG_I(PHY,"[eNB %d][RAPROC] PRACH: rootSequenceIndex %d, prach_ConfigIndex %d, zeroCorrelationZoneConfig %d, highSpeedFlag %d, prach_FreqOffset %d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex, phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset);
+      //    LOG_I(PHY,"[eNB %d][RAPROC] PRACH: rootSequenceIndex %d, prach_ConfigIndex %d, zeroCorrelationZoneConfig %d, highSpeedFlag %d, prach_FreqOffset %d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex, phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset);
 
-    rx_prach(phy_vars_eNB,
-	     subframe,
-	     preamble_energy_list,
-	     preamble_delay_list,
-	     frame,
-	     0);
+      rx_prach(phy_vars_eNB,
+          subframe,
+          preamble_energy_list,
+          preamble_delay_list,
+          frame,
+          0);
   }
   else {
-    for (UE_id=0;UE_id<NB_UE_INST;UE_id++) {
-      
-      LOG_D(PHY,"[RAPROC] UE_id %d (%p), generate_prach %d, UE RSI %d, eNB RSI %d preamble index %d\n",
-	    UE_id,PHY_vars_UE_g[UE_id],PHY_vars_UE_g[UE_id]->generate_prach,
-	    PHY_vars_UE_g[UE_id]->lte_frame_parms.prach_config_common.rootSequenceIndex,
-	    phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,
-	    PHY_vars_UE_g[UE_id]->prach_PreambleIndex);
-      
-      if ((PHY_vars_UE_g[UE_id]->generate_prach==1) &&
-	  (PHY_vars_UE_g[UE_id]->lte_frame_parms.prach_config_common.rootSequenceIndex ==
-	   phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex) ) {
-	preamble_energy_list[PHY_vars_UE_g[UE_id]->prach_PreambleIndex] = 80;
-	preamble_delay_list[PHY_vars_UE_g[UE_id]->prach_PreambleIndex] = 5;
-	
+      for (UE_id=0;UE_id<NB_UE_INST;UE_id++) {
+
+          LOG_D(PHY,"[RAPROC] UE_id %d (%p), generate_prach %d, UE RSI %d, eNB RSI %d preamble index %d\n",
+              UE_id,PHY_vars_UE_g[UE_id],PHY_vars_UE_g[UE_id]->generate_prach,
+              PHY_vars_UE_g[UE_id]->lte_frame_parms.prach_config_common.rootSequenceIndex,
+              phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,
+              PHY_vars_UE_g[UE_id]->prach_PreambleIndex);
+
+          if ((PHY_vars_UE_g[UE_id]->generate_prach==1) &&
+              (PHY_vars_UE_g[UE_id]->lte_frame_parms.prach_config_common.rootSequenceIndex ==
+                  phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex) ) {
+              preamble_energy_list[PHY_vars_UE_g[UE_id]->prach_PreambleIndex] = 80;
+              preamble_delay_list[PHY_vars_UE_g[UE_id]->prach_PreambleIndex] = 5;
+
+          }
       }
-    }
   }
   preamble_energy_max = preamble_energy_list[0];
   preamble_max = 0;
 
   for (i=1;i<64;i++) {
-    if (preamble_energy_max < preamble_energy_list[i]) {
-      preamble_energy_max = preamble_energy_list[i];
-      preamble_max = i;
-    }
+      if (preamble_energy_max < preamble_energy_list[i]) {
+          preamble_energy_max = preamble_energy_list[i];
+          preamble_max = i;
+      }
   }
 
 #ifdef DEBUG_PHY_PROC
@@ -2563,28 +2564,28 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u8 abstraction_flag
 #endif
 
   if (preamble_energy_list[preamble_max] > 60) {
-    UE_id = find_next_ue_index(phy_vars_eNB);
-    if (UE_id>=0) {
-      phy_vars_eNB->eNB_UE_stats[(u32)UE_id].UE_timing_offset = preamble_delay_list[preamble_max]&0x1FFF; //limit to 13 (=11+2) bits
-      //phy_vars_eNb->eNB_UE_stats[(u32)UE_id].mode = PRACH;
-      phy_vars_eNB->eNB_UE_stats[(u32)UE_id].sector = 0;
-      LOG_I(PHY,"[eNB %d][RAPROC] Initiating RA procedure with preamble %d, energy %d, delay %d\n",
-	    phy_vars_eNB->Mod_id,
-	    preamble_max,
-	    preamble_energy_max,
-	    preamble_delay_list[preamble_max]);
+      UE_id = find_next_ue_index(phy_vars_eNB);
+      if (UE_id>=0) {
+          phy_vars_eNB->eNB_UE_stats[(u32)UE_id].UE_timing_offset = preamble_delay_list[preamble_max]&0x1FFF; //limit to 13 (=11+2) bits
+          //phy_vars_eNb->eNB_UE_stats[(u32)UE_id].mode = PRACH;
+          phy_vars_eNB->eNB_UE_stats[(u32)UE_id].sector = 0;
+          LOG_I(PHY,"[eNB %d][RAPROC] Initiating RA procedure with preamble %d, energy %d, delay %d\n",
+              phy_vars_eNB->Mod_id,
+              preamble_max,
+              preamble_energy_max,
+              preamble_delay_list[preamble_max]);
 #ifdef OPENAIR2	  
-      mac_xface->initiate_ra_proc(phy_vars_eNB->Mod_id,
-				  frame,
-				  preamble_max,
-				  preamble_delay_list[preamble_max],
-				  0,subframe,0);
+          mac_xface->initiate_ra_proc(phy_vars_eNB->Mod_id,
+              frame,
+              preamble_max,
+              preamble_delay_list[preamble_max],
+              0,subframe,0);
 #endif
-    }
-    else {
-      LOG_D(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Unable to add user, max user count reached\n", 
-	    phy_vars_eNB->Mod_id,frame, subframe);
-    }
+      }
+      else {
+          LOG_D(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Unable to add user, max user count reached\n",
+              phy_vars_eNB->Mod_id,frame, subframe);
+      }
   }
 }
 
@@ -2622,56 +2623,56 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
 #endif
 
   if (abstraction_flag == 0) {
-    remove_7_5_kHz(phy_vars_eNB,last_slot-1);
-    remove_7_5_kHz(phy_vars_eNB,last_slot);
+      remove_7_5_kHz(phy_vars_eNB,last_slot-1);
+      remove_7_5_kHz(phy_vars_eNB,last_slot);
   }
   //#ifdef OPENAIR2
   // check if we have to detect PRACH first
   if ((last_slot&1)==1){
-    //    printf("Checking PRACH for eNB %d, subframe %d\n",phy_vars_eNB->Mod_id,last_slot>>1);
-    if (is_prach_subframe(&phy_vars_eNB->lte_frame_parms,frame,last_slot>>1)>0) {
-      //     printf("Running prach procedures\n");
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,1);
-      prach_procedures(phy_vars_eNB,last_slot>>1,abstraction_flag);
-      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
-    }
+      //    printf("Checking PRACH for eNB %d, subframe %d\n",phy_vars_eNB->Mod_id,last_slot>>1);
+      if (is_prach_subframe(&phy_vars_eNB->lte_frame_parms,frame,last_slot>>1)>0) {
+          //     printf("Running prach procedures\n");
+          vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,1);
+          prach_procedures(phy_vars_eNB,last_slot>>1,abstraction_flag);
+          vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
+      }
   }
   //#endif
   if (abstraction_flag == 0) {
-    for (l=0;l<phy_vars_eNB->lte_frame_parms.symbols_per_tti/2;l++) {
-      
-      for (sect_id=0;sect_id<number_of_cards;sect_id++) {
-	slot_fep_ul(&phy_vars_eNB->lte_frame_parms,
-		    &phy_vars_eNB->lte_eNB_common_vars,
-		    l,
-		    last_slot,
-		    sect_id,
+      for (l=0;l<phy_vars_eNB->lte_frame_parms.symbols_per_tti/2;l++) {
+
+          for (sect_id=0;sect_id<number_of_cards;sect_id++) {
+              slot_fep_ul(&phy_vars_eNB->lte_frame_parms,
+                  &phy_vars_eNB->lte_eNB_common_vars,
+                  l,
+                  last_slot,
+                  sect_id,
 #ifdef HW_PREFIX_REMOVAL
-		    1
+                  1
 #else
-		    0
-#endif
-		    );
-        slot_fep_ul(&phy_vars_eNB->lte_frame_parms,
-                    &phy_vars_eNB->lte_eNB_common_vars,
-                    l,
-                    last_slot-1,
-                    sect_id,
+                  0
+#endif
+              );
+              slot_fep_ul(&phy_vars_eNB->lte_frame_parms,
+                  &phy_vars_eNB->lte_eNB_common_vars,
+                  l,
+                  last_slot-1,
+                  sect_id,
 #ifdef HW_PREFIX_REMOVAL
-                    1
+                  1
 #else
-                    0
+                  0
 #endif
-                    );
+              );
 
+          }
       }
-    }
   }
   sect_id = 0;
 
   /*
     for (UE_id=0;UE_id<NUMBER_OF_UE_MAX;UE_id++) {
-    
+
     if ((phy_vars_eNB->eNB_UE_stats[(u32)UE_id].mode>PRACH) && (last_slot%2==1)) {
     #ifdef DEBUG_PHY_PROC	
     LOG_D(PHY,"[eNB %d] frame %d, slot %d: Doing SRS estimation and measurements for UE_id %d (UE_mode %d)\n",
@@ -2680,7 +2681,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
     UE_id,phy_vars_eNB->eNB_UE_stats[(u32)UE_id].mode);
     #endif
     for (sect_id=0;sect_id<number_of_cards;sect_id++) {
-	
+
     lte_srs_channel_estimation(&phy_vars_eNB->lte_frame_parms,
     &phy_vars_eNB->lte_eNB_common_vars,
     &phy_vars_eNB->lte_eNB_srs_vars[(u32)UE_id],
@@ -2699,13 +2700,13 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
     phy_vars_eNB->PHY_measurements_eNB[sect_id].rx_rssi_dBm[(u32)UE_id]);
     #endif
     }
-      
+
     sect_id=0;
     #ifdef USER_MODE
     //write_output("srs_est0.m","srsest0",phy_vars_eNB->lte_eNB_common_vars.srs_ch_estimates[0][0],512,1,1);
     //write_output("srs_est1.m","srsest1",phy_vars_eNB->lte_eNB_common_vars.srs_ch_estimates[0][1],512,1,1);
     #endif
-      
+
     //msg("timing advance in\n");
     sync_pos = lte_est_timing_advance(&phy_vars_eNB->lte_frame_parms,
     &phy_vars_eNB->lte_eNB_srs_vars[(u32)UE_id],
@@ -2713,191 +2714,191 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
     phy_vars_eNB->first_run_timing_advance[(u32)UE_id],
     number_of_cards,
     24576);
-      
+
     //msg("timing advance out\n");
-      
+
     //phy_vars_eNB->eNB_UE_stats[(u32)UE_id].UE_timing_offset = sync_pos - phy_vars_eNB->lte_frame_parms.nb_prefix_samples/8;
     phy_vars_eNB->eNB_UE_stats[(u32)UE_id].UE_timing_offset = 0;
     phy_vars_eNB->eNB_UE_stats[(u32)UE_id].sector = sect_id;
-    #ifdef DEBUG_PHY_PROC	
+    #ifdef DEBUG_PHY_PROC
     LOG_D(PHY,"[eNB %d] frame %d, slot %d: user %d in sector %d: timing_advance = %d\n",
     phy_vars_eNB->Mod_id,
-    phy_vars_eNB->frame, last_slot, 
+    phy_vars_eNB->frame, last_slot,
     UE_id, sect_id,
     phy_vars_eNB->eNB_UE_stats[(u32)UE_id].UE_timing_offset);
     #endif
     }
     }
     else {
-    
+
     }
-  */
+   */
   // Check for active processes in current subframe
   harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
-			       frame,last_slot>>1);
+      frame,last_slot>>1);
   //  printf("[eNB][PUSCH] subframe %d => harq_pid %d\n",last_slot>>1,harq_pid);
 
   /*
     #ifdef OPENAIR2
-    if ((phy_vars_eNB->eNB_UE_stats[0].mode == PUSCH) && 
+    if ((phy_vars_eNB->eNB_UE_stats[0].mode == PUSCH) &&
     (phy_vars_eNB->eNB_UE_stats[1].mode == PUSCH))
     two_ues_connected = 1;
     #else
     two_ues_connected = 1;
     #endif
-  */
+   */
 
   pusch_active = 0;
-  // reset the cba flag used for collision detection 
+  // reset the cba flag used for collision detection
   for (i=0; i < NUM_MAX_CBA_GROUP; i++){
-    phy_vars_eNB->cba_last_reception[i]=0;
+      phy_vars_eNB->cba_last_reception[i]=0;
   }
   //  LOG_I(PHY,"subframe %d: nPRS %d\n",last_slot>>1,phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[last_slot-1]);
- 
-  for (i=0;i<NUMBER_OF_UE_MAX;i++) { 
-  
-    /*
+
+  for (i=0;i<NUMBER_OF_UE_MAX;i++) {
+
+      /*
       if ((i == 1) && (phy_vars_eNB->cooperation_flag > 0) && (two_ues_connected == 1))
       break;
-    */
+       */
 #ifdef OPENAIR2
-    if (phy_vars_eNB->eNB_UE_stats[i].mode == RA_RESPONSE)
-      process_Msg3(phy_vars_eNB,last_slot,i,harq_pid);
+      if (phy_vars_eNB->eNB_UE_stats[i].mode == RA_RESPONSE)
+        process_Msg3(phy_vars_eNB,last_slot,i,harq_pid);
 #endif
 
-    /*  
+      /*
 #ifdef DEBUG_PHY_PROC
     if (phy_vars_eNB->ulsch_eNB[i]) {
-      
+
       LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d, subframe %d rnti %x, alloc %d\n",phy_vars_eNB->Mod_id,
 	     harq_pid,frame,last_slot>>1,
 	     (phy_vars_eNB->ulsch_eNB[i]->rnti),
-	     (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag) 
+	     (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag)
 	     );
     }
 #endif
-    */
-    if ((phy_vars_eNB->ulsch_eNB[i]) &&
-	(phy_vars_eNB->ulsch_eNB[i]->rnti>0) &&
-	(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag==1) && 
-	((last_slot%2)==1)) {
- 
-      pusch_active = 1;
-      round = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round;
+       */
+      if ((phy_vars_eNB->ulsch_eNB[i]) &&
+          (phy_vars_eNB->ulsch_eNB[i]->rnti>0) &&
+          (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag==1) &&
+          ((last_slot%2)==1)) {
+
+          pusch_active = 1;
+          round = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round;
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x\n",
-	    phy_vars_eNB->Mod_id,harq_pid,
-	    frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->rnti);
+          LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x\n",
+              phy_vars_eNB->Mod_id,harq_pid,
+              frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->rnti);
 #endif
-  
+
 #ifdef DEBUG_PHY_PROC
-      if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1){
-	LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for Msg3 in Sector %d\n",
-	      phy_vars_eNB->Mod_id,
-	      frame,
-	      last_slot,last_slot>>1,
-	      phy_vars_eNB->eNB_UE_stats[i].sector);
-      } else {
-	LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for UE %d Mode %s sect_id %d\n",
-	      phy_vars_eNB->Mod_id,
-	      frame,
-	      last_slot,last_slot>>1,
-	      i,
-	      mode_string[phy_vars_eNB->eNB_UE_stats[i].mode],
-	      phy_vars_eNB->eNB_UE_stats[i].sector);
-      }
+          if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1){
+              LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for Msg3 in Sector %d\n",
+                  phy_vars_eNB->Mod_id,
+                  frame,
+                  last_slot,last_slot>>1,
+                  phy_vars_eNB->eNB_UE_stats[i].sector);
+          } else {
+              LOG_D(PHY,"[eNB %d] frame %d, slot %d, subframe %d: Scheduling ULSCH Reception for UE %d Mode %s sect_id %d\n",
+                  phy_vars_eNB->Mod_id,
+                  frame,
+                  last_slot,last_slot>>1,
+                  i,
+                  mode_string[phy_vars_eNB->eNB_UE_stats[i].mode],
+                  phy_vars_eNB->eNB_UE_stats[i].sector);
+          }
 #endif
 
-      nPRS = phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[last_slot-1];
+          nPRS = phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[last_slot-1];
 
-      phy_vars_eNB->ulsch_eNB[i]->cyclicShift = (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2 + phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + nPRS)%12;
+          phy_vars_eNB->ulsch_eNB[i]->cyclicShift = (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2 + phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + nPRS)%12;
 
-    if (frame_parms->frame_type == FDD ) {
-      int subframe = last_slot >> 1;
-      int sf = (subframe<4) ? (subframe+6) : (subframe-4); 
+          if (frame_parms->frame_type == FDD ) {
+              int subframe = last_slot >> 1;
+              int sf = (subframe<4) ? (subframe+6) : (subframe-4);
 
-      if (phy_vars_eNB->dlsch_eNB[i][0]->subframe_tx[sf]>0) { // we have downlink transmission
-        phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 1;
-      }
-      else {
-        phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 0;
-      }
-    }
+              if (phy_vars_eNB->dlsch_eNB[i][0]->subframe_tx[sf]>0) { // we have downlink transmission
+                  phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 1;
+              }
+              else {
+                  phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 0;
+              }
+          }
 
 #ifdef DEBUG_PHY_PROC
-      LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, mcs %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d \n",
-	    phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->first_rb,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->mcs,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rvidx,
-	    phy_vars_eNB->ulsch_eNB[i]->cyclicShift,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2,
-	    phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
-	    nPRS,
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK);
-#endif
-      if (abstraction_flag==0) {
-	rx_ulsch(phy_vars_eNB,
-		 last_slot>>1,
-		 phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
-		 i,
-		 phy_vars_eNB->ulsch_eNB,
-		 0);
-      }
+          LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, mcs %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d \n",
+              phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->first_rb,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->mcs,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rvidx,
+              phy_vars_eNB->ulsch_eNB[i]->cyclicShift,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2,
+              phy_vars_eNB->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
+              nPRS,
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK);
+#endif
+          if (abstraction_flag==0) {
+              rx_ulsch(phy_vars_eNB,
+                  last_slot>>1,
+                  phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                  i,
+                  phy_vars_eNB->ulsch_eNB,
+                  0);
+          }
 #ifdef PHY_ABSTRACTION
-      else {
-	rx_ulsch_emul(phy_vars_eNB,
-		      last_slot>>1,
-		      phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
-		      i);
-      }
+          else {
+              rx_ulsch_emul(phy_vars_eNB,
+                  last_slot>>1,
+                  phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                  i);
+          }
 #endif
 
-      for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
-	phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]) - phy_vars_eNB->rx_total_gain_eNB_dB;
+          for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
+            phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]) - phy_vars_eNB->rx_total_gain_eNB_dB;
 
-      if (abstraction_flag == 0) {
-	ret = ulsch_decoding(phy_vars_eNB,
-			     i,
-			     last_slot>>1,
-			     0, // control_only_flag
-			     0, //Nbundled, to be updated!!!!
-			     0);  
-      }
+          if (abstraction_flag == 0) {
+              ret = ulsch_decoding(phy_vars_eNB,
+                  i,
+                  last_slot>>1,
+                  0, // control_only_flag
+                  0, //Nbundled, to be updated!!!!
+                  0);
+          }
 #ifdef PHY_ABSTRACTION
-      else {
-	ret = ulsch_decoding_emul(phy_vars_eNB,
-				  last_slot>>1,
-				  i,
-				  &rnti);
-      }
+          else {
+              ret = ulsch_decoding_emul(phy_vars_eNB,
+                  last_slot>>1,
+                  i,
+                  &rnti);
+          }
 #endif
 
 #ifdef DEBUG_PHY_PROC
-      LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
-	  phy_vars_eNB->Mod_id,harq_pid,
-	  frame,last_slot>>1,
-      phy_vars_eNB->ulsch_eNB[i]->rnti,
-	  dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
-	  dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
-	  phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[0],
-	  phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[1],
-	  phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
-	  phy_vars_eNB->ulsch_eNB[i]->o_ACK[1],
-	  ret);
+          LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
+              phy_vars_eNB->Mod_id,harq_pid,
+              frame,last_slot>>1,
+              phy_vars_eNB->ulsch_eNB[i]->rnti,
+              dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
+              dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
+              phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[0],
+              phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[1],
+              phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
+              phy_vars_eNB->ulsch_eNB[i]->o_ACK[1],
+              ret);
 #endif //DEBUG_PHY_PROC
-      /*
+          /*
 	if ((two_ues_connected==1) && (phy_vars_eNB->cooperation_flag==2)) {
 	for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++) {
-	phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power_0[j]) 
+	phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power_0[j])
 	- phy_vars_eNB->rx_total_gain_eNB_dB;
-	phy_vars_eNB->eNB_UE_stats[i+1].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power_1[j]) 
+	phy_vars_eNB->eNB_UE_stats[i+1].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power_1[j])
 	- phy_vars_eNB->rx_total_gain_eNB_dB;
 	}
 	#ifdef DEBUG_PHY_PROC
@@ -2910,684 +2911,684 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
 	#endif
 	}
 	else {
-      */
-      for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
-	phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]) 
-	  - phy_vars_eNB->rx_total_gain_eNB_dB;
+           */
+          for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
+            phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j])
+            - phy_vars_eNB->rx_total_gain_eNB_dB;
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d] Frame %d subframe %d: ULSCH %d RX power (%d,%d) dB\n",
-	    phy_vars_eNB->Mod_id,frame,last_slot>>1,i,
-	    dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
-	    dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]));
+          LOG_D(PHY,"[eNB %d] Frame %d subframe %d: ULSCH %d RX power (%d,%d) dB\n",
+              phy_vars_eNB->Mod_id,frame,last_slot>>1,i,
+              dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
+              dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]));
 #endif
 
-      //      }
-      
-    
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
+          //      }
+
+
+          phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d Clearing subframe_scheduling_flag\n",
-	    phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid);
+          LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d Clearing subframe_scheduling_flag\n",
+              phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid);
 #endif
-      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
+          phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
 
-      if (phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status == 1) {
+          if (phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status == 1) {
 #ifdef DEBUG_PHY_PROC
-	//if (((phy_vars_eNB->frame%10) == 0) || (phy_vars_eNB->frame < 50)) 
-	print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0);
+              //if (((phy_vars_eNB->frame%10) == 0) || (phy_vars_eNB->frame < 50))
+              print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0);
 #endif
-	extract_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
-	phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->o_RI[0];
-      }
-    
-      if (ret == (1+MAX_TURBO_ITERATIONS)) {
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
-
-	LOG_D(PHY,"[UE][PUSCH %d] Increasing to round %d\n",harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round);
-	//	dump_ulsch(phy_vars_eNB, last_slot>>1, i);
-	//	exit(-1);
-
-	if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
-	  LOG_I(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
-		phy_vars_eNB->Mod_id,
-		frame,last_slot,last_slot>>1, i,
-		phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
-		phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx-1);
-
-	  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round == 
-	      phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx) {
-	    LOG_D(PHY,"[eNB %d][RAPROC] maxHARQ_Msg3Tx reached, abandoning RA procedure for UE %d\n",
-		  phy_vars_eNB->Mod_id, i);
-	    phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
+              extract_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
+              phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->o_RI[0];
+          }
+
+          if (ret == (1+MAX_TURBO_ITERATIONS)) {
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
+
+              LOG_D(PHY,"[UE][PUSCH %d] Increasing to round %d\n",harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round);
+              //	dump_ulsch(phy_vars_eNB, last_slot>>1, i);
+              //	exit(-1);
+
+              if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+                  LOG_I(PHY,"[eNB %d][RAPROC] frame %d, slot %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
+                      phy_vars_eNB->Mod_id,
+                      frame,last_slot,last_slot>>1, i,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
+                      phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx-1);
+
+                  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round ==
+                      phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx) {
+                      LOG_D(PHY,"[eNB %d][RAPROC] maxHARQ_Msg3Tx reached, abandoning RA procedure for UE %d\n",
+                          phy_vars_eNB->Mod_id, i);
+                      phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
 #ifdef OPENAIR2
-	    mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
-				      frame,
-				      phy_vars_eNB->eNB_UE_stats[i].crnti);
-#endif
-	    remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
-	    phy_vars_eNB->ulsch_eNB[(u32)i]->Msg3_active = 0;
-	    //phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 0;
-
-	  }
-	  else {
-	    // activate retransmission for Msg3 (signalled to UE PHY by PHICH (not MAC/DCI)
-	    phy_vars_eNB->ulsch_eNB[(u32)i]->Msg3_active = 1;
-	    
-	    get_Msg3_alloc_ret(&phy_vars_eNB->lte_frame_parms,
-			       last_slot>>1,
-			       frame,
-			       &phy_vars_eNB->ulsch_eNB[i]->Msg3_frame,
-			       &phy_vars_eNB->ulsch_eNB[i]->Msg3_subframe);
-	  }
-	  LOG_I(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,last_slot>>1,
-		harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	  for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
-	    printf("%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0][j]);
-	  printf("\n");
-	  dump_ulsch(phy_vars_eNB,last_slot>>1,i);
-	  mac_exit_wrapper("Msg3 error");
-	} // This is Msg3 error
-	else { //normal ULSCH
-	  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
-		phy_vars_eNB->Mod_id,harq_pid,
-		frame,last_slot>>1, i,
-		phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
-		phy_vars_eNB->ulsch_eNB[i]->Mdlharq,
-		phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
-		phy_vars_eNB->ulsch_eNB[i]->o_ACK[1]);
-	  	  
-	  LOG_I(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:\n",frame,last_slot>>1,
-		harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0]!=NULL){
-	    for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
-	      LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0][j]);
-	    LOG_T(PHY,"\n");	  
-	  }
-	  
-
-//	  dump_ulsch(phy_vars_eNB,last_slot>>1,i);
-//	  mac_xface->macphy_exit("");
-	  
-	  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round== phy_vars_eNB->ulsch_eNB[i]->Mdlharq) {
-	    LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d ULSCH Mdlharq %d reached\n",
-		  phy_vars_eNB->Mod_id,harq_pid,
-		  frame,last_slot>>1, i,
-		  phy_vars_eNB->ulsch_eNB[i]->Mdlharq);
-	    
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round=0;
-	    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active=0;
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[harq_pid]++;
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]++;
-	    //dump_ulsch(phy_vars_eNB, last_slot>>1, i);
-	    //mac_xface->macphy_exit("");
-	  }
-	
-	  // If we've dropped the UE, go back to PRACH mode for this UE
-	  if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) {
-	    LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached, removing UE\n",
-		  phy_vars_eNB->Mod_id,frame,last_slot>>1, i);
-	    phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
+                      mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
+                          frame,
+                          phy_vars_eNB->eNB_UE_stats[i].crnti);
+#endif
+                      remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
+                      phy_vars_eNB->ulsch_eNB[(u32)i]->Msg3_active = 0;
+                      //phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 0;
+
+                  }
+                  else {
+                      // activate retransmission for Msg3 (signalled to UE PHY by PHICH (not MAC/DCI)
+                      phy_vars_eNB->ulsch_eNB[(u32)i]->Msg3_active = 1;
+
+                      get_Msg3_alloc_ret(&phy_vars_eNB->lte_frame_parms,
+                          last_slot>>1,
+                          frame,
+                          &phy_vars_eNB->ulsch_eNB[i]->Msg3_frame,
+                          &phy_vars_eNB->ulsch_eNB[i]->Msg3_subframe);
+                  }
+                  LOG_I(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,last_slot>>1,
+                      harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                  for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
+                    printf("%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0][j]);
+                  printf("\n");
+                  dump_ulsch(phy_vars_eNB,last_slot>>1,i);
+                  mac_exit_wrapper("Msg3 error");
+              } // This is Msg3 error
+              else { //normal ULSCH
+                  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
+                      phy_vars_eNB->Mod_id,harq_pid,
+                      frame,last_slot>>1, i,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
+                      phy_vars_eNB->ulsch_eNB[i]->Mdlharq,
+                      phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
+                      phy_vars_eNB->ulsch_eNB[i]->o_ACK[1]);
+
+                  LOG_I(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:\n",frame,last_slot>>1,
+                      harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0]!=NULL){
+                      for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
+                        LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->c[0][j]);
+                      LOG_T(PHY,"\n");
+                  }
+
+
+                  //	  dump_ulsch(phy_vars_eNB,last_slot>>1,i);
+                  //	  mac_xface->macphy_exit("");
+
+                  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round== phy_vars_eNB->ulsch_eNB[i]->Mdlharq) {
+                      LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d ULSCH Mdlharq %d reached\n",
+                          phy_vars_eNB->Mod_id,harq_pid,
+                          frame,last_slot>>1, i,
+                          phy_vars_eNB->ulsch_eNB[i]->Mdlharq);
+
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round=0;
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active=0;
+                      phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[harq_pid]++;
+                      phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]++;
+                      //dump_ulsch(phy_vars_eNB, last_slot>>1, i);
+                      //mac_xface->macphy_exit("");
+                  }
+
+                  // If we've dropped the UE, go back to PRACH mode for this UE
+                  if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) {
+                      LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached, removing UE\n",
+                          phy_vars_eNB->Mod_id,frame,last_slot>>1, i);
+                      phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
 #ifdef OPENAIR2
-	    mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
-				      frame,
-				      phy_vars_eNB->eNB_UE_stats[i].crnti);
+                      mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
+                          frame,
+                          phy_vars_eNB->eNB_UE_stats[i].crnti);
 #endif
-	    remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]=0;
-	  }
-	}
-      }  // ulsch in error
-      else {
-	LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
-	      phy_vars_eNB->Mod_id,harq_pid,
-	      frame,last_slot>>1);	    
-
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] = 0;
-
-	if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+                      remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
+                      phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]=0;
+                  }
+              }
+          }  // ulsch in error
+          else {
+              LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
+                  phy_vars_eNB->Mod_id,harq_pid,
+                  frame,last_slot>>1);
+
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] = 0;
+
+              if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
 #ifdef OPENAIR2
 #ifdef DEBUG_PHY_PROC
-	  LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
-		phy_vars_eNB->Mod_id,
-		frame,harq_pid,i);
+                  LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
+                      phy_vars_eNB->Mod_id,
+                      frame,harq_pid,i);
 #endif
-	  mac_xface->terminate_ra_proc(phy_vars_eNB->Mod_id,
-				       frame,
-				       phy_vars_eNB->ulsch_eNB[i]->rnti,
-				       phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
-				       phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                  mac_xface->terminate_ra_proc(phy_vars_eNB->Mod_id,
+                      frame,
+                      phy_vars_eNB->ulsch_eNB[i]->rnti,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
 #endif
 
-	  phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
-	  phy_vars_eNB->ulsch_eNB[i]->Msg3_flag = 0;
+                  phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
+                  phy_vars_eNB->ulsch_eNB[i]->Msg3_flag = 0;
 
 #ifdef DEBUG_PHY_PROC
-	  LOG_I(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,frame,last_slot>>1,i);
+                  LOG_I(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",phy_vars_eNB->Mod_id,frame,last_slot>>1,i);
 #endif //DEBUG_PHY_PROC
 
-	  for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) {
-	    phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[j]=0;
-	    phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0;
-	  }
+                  for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) {
+                      phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[j]=0;
+                      phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0;
+                  }
+
+                  //mac_xface->macphy_exit("Mode PUSCH. Exiting.\n");
+              }
+              else {
 
-	  //mac_xface->macphy_exit("Mode PUSCH. Exiting.\n");
-	}
-	else {
-	  
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_ULSCH
-	  LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,last_slot>>1,
-		harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	  for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
-	    LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
-	  LOG_T(PHY,"\n");
+                  LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,last_slot>>1,
+                      harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                  for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
+                    LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
+                  LOG_T(PHY,"\n");
 #endif
 #endif
-	  //dump_ulsch(phy_vars_eNB,last_slot>>1,i);
-          //mac_xface->macphy_exit("");
- 
+                  //dump_ulsch(phy_vars_eNB,last_slot>>1,i);
+                  //mac_xface->macphy_exit("");
+
 
 #ifdef OPENAIR2
-	  //	  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->calibration_flag == 0) {
-	  mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
-			    frame,
-			    phy_vars_eNB->ulsch_eNB[i]->rnti,
-			    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
-			    phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	  //}
-	  /*
+                  //	  if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->calibration_flag == 0) {
+                  mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
+                      frame,
+                      phy_vars_eNB->ulsch_eNB[i]->rnti,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
+                      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                  //}
+                  /*
 	    else {
 	    // Retrieve calibration information and do whatever
-	    LOG_D(PHY,"[eNB][Auto-Calibration] Frame %d, Subframe %d : ULSCH PDU (RX) %d bytes\n",phy_vars_eNB->frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);	    
+	    LOG_D(PHY,"[eNB][Auto-Calibration] Frame %d, Subframe %d : ULSCH PDU (RX) %d bytes\n",phy_vars_eNB->frame,last_slot>>1,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
 	    }
-	  */
+                   */
 #endif
-	}
+              }
 
-	// estimate timing advance for MAC
-	if (abstraction_flag == 0) {
-	  sync_pos = lte_est_timing_advance_pusch(phy_vars_eNB,i,last_slot>>1);
-	  phy_vars_eNB->eNB_UE_stats[i].timing_advance_update = sync_pos - phy_vars_eNB->lte_frame_parms.nb_prefix_samples/8; //to check 
-	}
+              // estimate timing advance for MAC
+              if (abstraction_flag == 0) {
+                  sync_pos = lte_est_timing_advance_pusch(phy_vars_eNB,i,last_slot>>1);
+                  phy_vars_eNB->eNB_UE_stats[i].timing_advance_update = sync_pos - phy_vars_eNB->lte_frame_parms.nb_prefix_samples/8; //to check
+              }
 
-#ifdef DEBUG_PHY_PROC	
-	LOG_I(PHY,"[eNB %d] frame %d, slot %d: user %d in sector %d: timing advance = %d\n",
-	      phy_vars_eNB->Mod_id,
-	      frame, last_slot, 
-	      i, sect_id,
-	      phy_vars_eNB->eNB_UE_stats[i].timing_advance_update);
+#ifdef DEBUG_PHY_PROC
+              LOG_I(PHY,"[eNB %d] frame %d, slot %d: user %d in sector %d: timing advance = %d\n",
+                  phy_vars_eNB->Mod_id,
+                  frame, last_slot,
+                  i, sect_id,
+                  phy_vars_eNB->eNB_UE_stats[i].timing_advance_update);
 #endif
-	
 
-      }  // ulsch not in error
-      
-      // process HARQ feedback
+
+          }  // ulsch not in error
+
+          // process HARQ feedback
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d, Processing HARQ feedback for UE %d (after PUSCH)\n",phy_vars_eNB->Mod_id,
-	    phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-	    frame,last_slot>>1,
-	    i);
-#endif
-      process_HARQ_feedback(i,
-			    last_slot>>1,
-			    phy_vars_eNB,
-			    1, // pusch_flag
-			    0,
-			    0,
-			    0);
-      
-      //#ifdef DEBUG_PHY_PROC
-      LOG_I(PHY,"[eNB %d] Frame %d subframe %d, sect %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n", 
-	    phy_vars_eNB->Mod_id,frame,last_slot>>1,
-	    phy_vars_eNB->eNB_UE_stats[i].sector, 
-	    harq_pid, 
-	    i, 
-	    ret, 
-	    phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status, 
-	    phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],	
-	    phy_vars_eNB->ulsch_eNB[i]->o_ACK[1], 
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[harq_pid],
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][0]);
-      //#endif
-
-
-      if (frame % 100 == 0) {
-	if ((phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round] - 
-	     phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round]) != 0)
-	  phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[harq_pid][round] = 
-	    (100*(phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][round] - 
-		  phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_pid][round]))/
-	    (phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round] - 
-	     phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round]);
-
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round] = 
-	  phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round];
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_pid][round] = 
-	  phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][round];
+          LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d, Processing HARQ feedback for UE %d (after PUSCH)\n",phy_vars_eNB->Mod_id,
+              phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+              frame,last_slot>>1,
+              i);
+#endif
+          process_HARQ_feedback(i,
+              last_slot>>1,
+              phy_vars_eNB,
+              1, // pusch_flag
+              0,
+              0,
+              0);
+
+          //#ifdef DEBUG_PHY_PROC
+          LOG_I(PHY,"[eNB %d] Frame %d subframe %d, sect %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n",
+              phy_vars_eNB->Mod_id,frame,last_slot>>1,
+              phy_vars_eNB->eNB_UE_stats[i].sector,
+              harq_pid,
+              i,
+              ret,
+              phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status,
+              phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
+              phy_vars_eNB->ulsch_eNB[i]->o_ACK[1],
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[harq_pid],
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][0]);
+          //#endif
+
+
+          if (frame % 100 == 0) {
+              if ((phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round] -
+                  phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round]) != 0)
+                phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[harq_pid][round] =
+                    (100*(phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][round] -
+                        phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_pid][round]))/
+                        (phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round] -
+                            phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round]);
+
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_pid][round] =
+                  phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][round];
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_pid][round] =
+                  phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][round];
+          }
+
       }
 
-    }
-  
 
 #ifdef PUCCH
-    else if ((phy_vars_eNB->dlsch_eNB[i][0]) &&
-	     (phy_vars_eNB->dlsch_eNB[i][0]->rnti>0) &&
-	     ((last_slot%2)==1)){ // check for PUCCH
-
-      // check SR availability
-      do_SR = is_SR_subframe(phy_vars_eNB,i,last_slot>>1);
-      //      do_SR = 0;
-    
-      // Now ACK/NAK
-      // First check subframe_tx flag for earlier subframes
-      get_n1_pucch_eNB(phy_vars_eNB,
-		       i,
-		       last_slot>>1,
-		       &n1_pucch0,
-		       &n1_pucch1,
-		       &n1_pucch2,
-		       &n1_pucch3);
-
-      LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d\n",
-	    phy_vars_eNB->Mod_id,phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-	    frame,last_slot>>1,
-	    n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR);
-
-      if ((n1_pucch0==-1) && (n1_pucch1==-1) && (do_SR==0)) {  // no TX PDSCH that have to be checked and no SR for this UE_id
-      }
-      else {
-	// otherwise we have some PUCCH detection to do
-      
-	if (do_SR == 1) {
-	  phy_vars_eNB->eNB_UE_stats[i].sr_total++;
-	
-	  if (abstraction_flag == 0)
-	    metric0 = rx_pucch(phy_vars_eNB,
-			       pucch_format1,
-			       i,
-			       phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
-			       0, // n2_pucch
-			       1, // shortened format
-			       &SR_payload,
-			       last_slot>>1,
-			       PUCCH1_THRES);
+      else if ((phy_vars_eNB->dlsch_eNB[i][0]) &&
+          (phy_vars_eNB->dlsch_eNB[i][0]->rnti>0) &&
+          ((last_slot%2)==1)){ // check for PUCCH
+
+          // check SR availability
+          do_SR = is_SR_subframe(phy_vars_eNB,i,last_slot>>1);
+          //      do_SR = 0;
+
+          // Now ACK/NAK
+          // First check subframe_tx flag for earlier subframes
+          get_n1_pucch_eNB(phy_vars_eNB,
+              i,
+              last_slot>>1,
+              &n1_pucch0,
+              &n1_pucch1,
+              &n1_pucch2,
+              &n1_pucch3);
+
+          LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d\n",
+              phy_vars_eNB->Mod_id,phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+              frame,last_slot>>1,
+              n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR);
+
+          if ((n1_pucch0==-1) && (n1_pucch1==-1) && (do_SR==0)) {  // no TX PDSCH that have to be checked and no SR for this UE_id
+          }
+          else {
+              // otherwise we have some PUCCH detection to do
+
+              if (do_SR == 1) {
+                  phy_vars_eNB->eNB_UE_stats[i].sr_total++;
+
+                  if (abstraction_flag == 0)
+                    metric0 = rx_pucch(phy_vars_eNB,
+                        pucch_format1,
+                        i,
+                        phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
+                        0, // n2_pucch
+                        1, // shortened format
+                        &SR_payload,
+                        last_slot>>1,
+                        PUCCH1_THRES);
 #ifdef PHY_ABSTRACTION
-	  else {
-	    metric0 = rx_pucch_emul(phy_vars_eNB,
-				    i,
-				    pucch_format1,
-				    0,
-				    &SR_payload,
-				    last_slot>>1);
-	    LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
-		  phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
-	  }
-#endif
-
-	  if (SR_payload == 1) {
-	    LOG_I(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",phy_vars_eNB->Mod_id,
-		  phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
-	    phy_vars_eNB->eNB_UE_stats[i].sr_received++;
-	    if (phy_vars_eNB->first_sr[i] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
-	      phy_vars_eNB->first_sr[i] = 0;
-	      phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->round=0;
-	      phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->status=SCH_IDLE;
-	      LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
-		    phy_vars_eNB->Mod_id,
-		    phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
-	    }
+                  else {
+                      metric0 = rx_pucch_emul(phy_vars_eNB,
+                          i,
+                          pucch_format1,
+                          0,
+                          &SR_payload,
+                          last_slot>>1);
+                      LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
+                          phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
+                  }
+#endif
+
+                  if (SR_payload == 1) {
+                      LOG_I(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",phy_vars_eNB->Mod_id,
+                          phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
+                      phy_vars_eNB->eNB_UE_stats[i].sr_received++;
+                      if (phy_vars_eNB->first_sr[i] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
+                          phy_vars_eNB->first_sr[i] = 0;
+                          phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->round=0;
+                          phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->status=SCH_IDLE;
+                          LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
+                              phy_vars_eNB->Mod_id,
+                              phy_vars_eNB->ulsch_eNB[i]->rnti,frame,last_slot>>1);
+                      }
 #ifdef OPENAIR2
-	    mac_xface->SR_indication(phy_vars_eNB->Mod_id,
-				     frame,
-				     phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
+                      mac_xface->SR_indication(phy_vars_eNB->Mod_id,
+                          frame,
+                          phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
 #endif
-	  } 
-	}// do_SR==1
-	if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR
-	}
-	else if (phy_vars_eNB->lte_frame_parms.frame_type==FDD) { // FDD
-	  // if SR was detected, use the n1_pucch from SR, else use n1_pucch0
-	  n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
-	  if (abstraction_flag == 0)
-	    metric0 = rx_pucch(phy_vars_eNB,
-			       pucch_format1a,
-			       i,
-			       (u16)n1_pucch0,
-			       0, //n2_pucch
-			       1, // shortened format
-			       pucch_payload0,
-			       last_slot>>1,
-			       PUCCH1_THRES);
-	  else {
+                  }
+              }// do_SR==1
+              if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR
+              }
+              else if (phy_vars_eNB->lte_frame_parms.frame_type==FDD) { // FDD
+                  // if SR was detected, use the n1_pucch from SR, else use n1_pucch0
+                  n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
+                  if (abstraction_flag == 0)
+                    metric0 = rx_pucch(phy_vars_eNB,
+                        pucch_format1a,
+                        i,
+                        (u16)n1_pucch0,
+                        0, //n2_pucch
+                        1, // shortened format
+                        pucch_payload0,
+                        last_slot>>1,
+                        PUCCH1_THRES);
+                  else {
 #ifdef PHY_ABSTRACTION
-	    metric0 = rx_pucch_emul(phy_vars_eNB,i,
-				    pucch_format1a,
-				    0,
-				    pucch_payload0,
-				    last_slot>>1);
+                      metric0 = rx_pucch_emul(phy_vars_eNB,i,
+                          pucch_format1a,
+                          0,
+                          pucch_payload0,
+                          last_slot>>1);
 #endif
-	  }	
+                  }
 #ifdef DEBUG_PHY_PROC	  
-	  LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n",
-		phy_vars_eNB->Mod_id,
-		phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-		frame,last_slot>>1,
-		pucch_payload0[0],metric0);
-#endif
-
-	  process_HARQ_feedback(i,last_slot>>1,phy_vars_eNB,
-				0,// pusch_flag
-				pucch_payload0,
-				2,
-				SR_payload);
-
-	} // FDD
-	else {  //TDD
-	
-	  bundling_flag = phy_vars_eNB->pucch_config_dedicated[i].tdd_AckNackFeedbackMode;
-	
-	  // fix later for 2 TB case and format1b
-
-	  if ((frame_parms->frame_type==FDD) || 
-	      (bundling_flag==bundling)    || 
-	      ((frame_parms->frame_type==TDD)&&(frame_parms->tdd_config==1)&&((last_slot!=4)||(last_slot!=14)))) {
-	    format = pucch_format1a;
-	    //	    msg("PUCCH 1a\n");
-	  }
-	  else {
-	    format = pucch_format1b;
-	    //	    msg("PUCCH 1b\n");
-	  }
-	
-	  // if SR was detected, use the n1_pucch from SR
-	  if (SR_payload==1) {
+                  LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n",
+                      phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+                      frame,last_slot>>1,
+                      pucch_payload0[0],metric0);
+#endif
+
+                  process_HARQ_feedback(i,last_slot>>1,phy_vars_eNB,
+                      0,// pusch_flag
+                      pucch_payload0,
+                      2,
+                      SR_payload);
+
+              } // FDD
+              else {  //TDD
+
+                  bundling_flag = phy_vars_eNB->pucch_config_dedicated[i].tdd_AckNackFeedbackMode;
+
+                  // fix later for 2 TB case and format1b
+
+                  if ((frame_parms->frame_type==FDD) ||
+                      (bundling_flag==bundling)    ||
+                      ((frame_parms->frame_type==TDD)&&(frame_parms->tdd_config==1)&&((last_slot!=4)||(last_slot!=14)))) {
+                      format = pucch_format1a;
+                      //	    msg("PUCCH 1a\n");
+                  }
+                  else {
+                      format = pucch_format1b;
+                      //	    msg("PUCCH 1b\n");
+                  }
+
+                  // if SR was detected, use the n1_pucch from SR
+                  if (SR_payload==1) {
 #ifdef DEBUG_PHY_PROC	  
-	    LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR\n",phy_vars_eNB->Mod_id,
-		  phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-		  frame,last_slot>>1,
-		  n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
-#endif
-	    if (abstraction_flag == 0) 
-	      metric0 = rx_pucch(phy_vars_eNB,
-				 format,
-				 i,
-				 phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
-				 0, //n2_pucch
-				 1, // shortened format
-				 pucch_payload0,
-				 last_slot>>1,
-				 PUCCH1_THRES);
-	    else {
+                      LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR\n",phy_vars_eNB->Mod_id,
+                          phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+                          frame,last_slot>>1,
+                          n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
+#endif
+                      if (abstraction_flag == 0)
+                        metric0 = rx_pucch(phy_vars_eNB,
+                            format,
+                            i,
+                            phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
+                            0, //n2_pucch
+                            1, // shortened format
+                            pucch_payload0,
+                            last_slot>>1,
+                            PUCCH1_THRES);
+                      else {
 #ifdef PHY_ABSTRACTION
-	      metric0 = rx_pucch_emul(phy_vars_eNB,i,
-				      format,
-				      0,
-				      pucch_payload0,
-				      last_slot>>1);
-#endif
-	    } 
-	  }
-	  else {  //using n1_pucch0/n1_pucch1 resources
+                          metric0 = rx_pucch_emul(phy_vars_eNB,i,
+                              format,
+                              0,
+                              pucch_payload0,
+                              last_slot>>1);
+#endif
+                      }
+                  }
+                  else {  //using n1_pucch0/n1_pucch1 resources
 #ifdef DEBUG_PHY_PROC	  
-	    LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d\n",phy_vars_eNB->Mod_id,
-		  phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-		  frame,last_slot>>1,
-		  n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
-#endif
-	    metric0=0;
-	    metric1=0;
-	    
-	    // Check n1_pucch0 metric
-	    if (n1_pucch0 != -1) {
-	      if (abstraction_flag == 0) 
-		metric0 = rx_pucch(phy_vars_eNB,
-				   format,
-				   i,
-				   (u16)n1_pucch0,
-				   0, // n2_pucch
-				   1, // shortened format
-				   pucch_payload0,
-				   last_slot>>1,
-				   PUCCH1_THRES);
-	      else {
+                      LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d\n",phy_vars_eNB->Mod_id,
+                          phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+                          frame,last_slot>>1,
+                          n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
+#endif
+                      metric0=0;
+                      metric1=0;
+
+                      // Check n1_pucch0 metric
+                      if (n1_pucch0 != -1) {
+                          if (abstraction_flag == 0)
+                            metric0 = rx_pucch(phy_vars_eNB,
+                                format,
+                                i,
+                                (u16)n1_pucch0,
+                                0, // n2_pucch
+                                1, // shortened format
+                                pucch_payload0,
+                                last_slot>>1,
+                                PUCCH1_THRES);
+                          else {
 #ifdef PHY_ABSTRACTION
-		metric0 = rx_pucch_emul(phy_vars_eNB,i,
-					format,
-					0,
-					pucch_payload0,
-					last_slot>>1);
+                              metric0 = rx_pucch_emul(phy_vars_eNB,i,
+                                  format,
+                                  0,
+                                  pucch_payload0,
+                                  last_slot>>1);
 #endif
-	      }
-	    }
+                          }
+                      }
 
-	    // Check n1_pucch1 metric
-	    if (n1_pucch1 != -1) {
-	      if (abstraction_flag == 0)
-		metric1 = rx_pucch(phy_vars_eNB,
-				   format,
-				   i,
-				   (u16)n1_pucch1,
-				   0, //n2_pucch
-				   1, // shortened format
-				   pucch_payload1,
-				   last_slot>>1,
-				   PUCCH1_THRES);
-	      else {
+                      // Check n1_pucch1 metric
+                      if (n1_pucch1 != -1) {
+                          if (abstraction_flag == 0)
+                            metric1 = rx_pucch(phy_vars_eNB,
+                                format,
+                                i,
+                                (u16)n1_pucch1,
+                                0, //n2_pucch
+                                1, // shortened format
+                                pucch_payload1,
+                                last_slot>>1,
+                                PUCCH1_THRES);
+                          else {
 #ifdef PHY_ABSTRACTION
-		metric1 = rx_pucch_emul(phy_vars_eNB,i,
-					format,
-					1,
-					pucch_payload1,
-					last_slot>>1);
+                              metric1 = rx_pucch_emul(phy_vars_eNB,i,
+                                  format,
+                                  1,
+                                  pucch_payload1,
+                                  last_slot>>1);
+
 
-		
 #endif
-	      }
-	    }
-	  }
-
-	  if (SR_payload == 1) {
-	    pucch_payload = pucch_payload0;
-	    if (bundling_flag == bundling)
-	      pucch_sel = 2;
-	  }
-	  else if (bundling_flag == multiplexing) {  // multiplexing + no SR
-	    pucch_payload = (metric1>metric0) ? pucch_payload1 : pucch_payload0;
-	    pucch_sel     = (metric1>metric0) ? 1 : 0;
-	  }
-	  else { // bundling + no SR
-	    if (n1_pucch1 != -1)
-	      pucch_payload = pucch_payload1;
-	    else if (n1_pucch0 != -1)
-	      pucch_payload = pucch_payload0;
-	    pucch_sel = 2;  // indicate that this is a bundled ACK/NAK  
-	  }
+                          }
+                      }
+                  }
+
+                  if (SR_payload == 1) {
+                      pucch_payload = pucch_payload0;
+                      if (bundling_flag == bundling)
+                        pucch_sel = 2;
+                  }
+                  else if (bundling_flag == multiplexing) {  // multiplexing + no SR
+                      pucch_payload = (metric1>metric0) ? pucch_payload1 : pucch_payload0;
+                      pucch_sel     = (metric1>metric0) ? 1 : 0;
+                  }
+                  else { // bundling + no SR
+                      if (n1_pucch1 != -1)
+                        pucch_payload = pucch_payload1;
+                      else if (n1_pucch0 != -1)
+                        pucch_payload = pucch_payload0;
+                      pucch_sel = 2;  // indicate that this is a bundled ACK/NAK
+                  }
 #ifdef DEBUG_PHY_PROC	  
-	  LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)\n",phy_vars_eNB->Mod_id,
-		phy_vars_eNB->dlsch_eNB[i][0]->rnti,
-		frame,last_slot>>1,
-		metric0,metric1,pucch_sel,pucch_payload[0],pucch_payload[1]);
+                  LOG_I(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)\n",phy_vars_eNB->Mod_id,
+                      phy_vars_eNB->dlsch_eNB[i][0]->rnti,
+                      frame,last_slot>>1,
+                      metric0,metric1,pucch_sel,pucch_payload[0],pucch_payload[1]);
 #endif	  
-	  process_HARQ_feedback(i,last_slot>>1,phy_vars_eNB,
-				0,// pusch_flag
-				pucch_payload,
-				pucch_sel,
-				SR_payload);
-	}
-      }
-    } // PUCCH processing
-    
+                  process_HARQ_feedback(i,last_slot>>1,phy_vars_eNB,
+                      0,// pusch_flag
+                      pucch_payload,
+                      pucch_sel,
+                      SR_payload);
+              }
+          }
+      } // PUCCH processing
+
 #endif //PUCCH
-  
-    if ((frame % 10 == 0) && (last_slot==9)) {
-      phy_vars_eNB->eNB_UE_stats[i].dlsch_bitrate = (phy_vars_eNB->eNB_UE_stats[i].total_TBS - 
-						     phy_vars_eNB->eNB_UE_stats[i].total_TBS_last)*10;
-      
-      phy_vars_eNB->eNB_UE_stats[i].total_TBS_last = phy_vars_eNB->eNB_UE_stats[i].total_TBS;
-    }
-    
-    num_active_cba_groups = phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups;
-    /*if (num_active_cba_groups > 0 )
+
+      if ((frame % 10 == 0) && (last_slot==9)) {
+          phy_vars_eNB->eNB_UE_stats[i].dlsch_bitrate = (phy_vars_eNB->eNB_UE_stats[i].total_TBS -
+              phy_vars_eNB->eNB_UE_stats[i].total_TBS_last)*10;
+
+          phy_vars_eNB->eNB_UE_stats[i].total_TBS_last = phy_vars_eNB->eNB_UE_stats[i].total_TBS;
+      }
+
+      num_active_cba_groups = phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups;
+      /*if (num_active_cba_groups > 0 )
     LOG_D(PHY,"[eNB] last slot %d trying cba transmission decoding UE %d num_grps %d rnti %x flag %d\n",
 	  last_slot, i, num_active_cba_groups,phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups],
 	  phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_cba_scheduling_flag );
-    */ 
-    if ((phy_vars_eNB->ulsch_eNB[i]) &&
-	(num_active_cba_groups > 0) &&
-	(phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups]>0) &&
-	(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_cba_scheduling_flag==1) &&
-	((last_slot%2)==1)) {
-     
-      
-      rnti=0;
+       */
+      if ((phy_vars_eNB->ulsch_eNB[i]) &&
+          (num_active_cba_groups > 0) &&
+          (phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups]>0) &&
+          (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_cba_scheduling_flag==1) &&
+          ((last_slot%2)==1)) {
+
+
+          rnti=0;
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Checking PUSCH/ULSCH CBA Reception for UE %d with cba rnti %x mode %s\n",
-	    phy_vars_eNB->Mod_id,harq_pid,
-	    frame,last_slot>>1,
-	    i, (u16)phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups],mode_string[phy_vars_eNB->eNB_UE_stats[i].mode]);
-#endif
-      if (abstraction_flag==0) {
-	rx_ulsch(phy_vars_eNB,
-		 last_slot>>1,
-		 phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
-		 i,
-		 phy_vars_eNB->ulsch_eNB,
-		 0);
-      }
+          LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Checking PUSCH/ULSCH CBA Reception for UE %d with cba rnti %x mode %s\n",
+              phy_vars_eNB->Mod_id,harq_pid,
+              frame,last_slot>>1,
+              i, (u16)phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups],mode_string[phy_vars_eNB->eNB_UE_stats[i].mode]);
+#endif
+          if (abstraction_flag==0) {
+              rx_ulsch(phy_vars_eNB,
+                  last_slot>>1,
+                  phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                  i,
+                  phy_vars_eNB->ulsch_eNB,
+                  0);
+          }
 #ifdef PHY_ABSTRACTION
-      else {
-	rx_ulsch_emul(phy_vars_eNB,
-		      last_slot>>1,
-		      phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
-		      i);
-      }
+          else {
+              rx_ulsch_emul(phy_vars_eNB,
+                  last_slot>>1,
+                  phy_vars_eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                  i);
+          }
 #endif
-      
-      if (abstraction_flag == 0) {
-	ret = ulsch_decoding(phy_vars_eNB,
-			     i,
-			     last_slot>>1,
-			     0, // control_only_flag
-			     0,  //Nbundled, to be updated!!!!
-			     0);  
-      }
+
+          if (abstraction_flag == 0) {
+              ret = ulsch_decoding(phy_vars_eNB,
+                  i,
+                  last_slot>>1,
+                  0, // control_only_flag
+                  0,  //Nbundled, to be updated!!!!
+                  0);
+          }
 #ifdef PHY_ABSTRACTION
-      else {
-	ret = ulsch_decoding_emul(phy_vars_eNB,
-				  last_slot>>1,
-				  i,
-				  &rnti);
-      }
+          else {
+              ret = ulsch_decoding_emul(phy_vars_eNB,
+                  last_slot>>1,
+                  i,
+                  &rnti);
+          }
 #endif
-      if (phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status == 1) {
+          if (phy_vars_eNB->ulsch_eNB[i]->cqi_crc_status == 1) {
 #ifdef DEBUG_PHY_PROC
-	//if (((phy_vars_eNB->frame%10) == 0) || (phy_vars_eNB->frame < 50)) 
-	//	print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0);
+              //if (((phy_vars_eNB->frame%10) == 0) || (phy_vars_eNB->frame < 50))
+              //	print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0);
 #endif
-	extract_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
-	phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->o_RI[0];
-      }
-      /*  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the subframe_scheduling_flag, total cba groups %d %d\n",
+              extract_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
+              phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->o_RI[0];
+          }
+          /*  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the subframe_scheduling_flag, total cba groups %d %d\n",
 	    phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->frame,last_slot>>1,i,harq_pid,
 	     phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups,num_active_cba_groups);
-      */
-      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=0;
-      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->status= SCH_IDLE;
-      
-      if ((num_active_cba_groups > 0) &&
-	  //  (i % num_active_cba_groups == 0) && // this ue is used a a template for the CBA
-	  (i + num_active_cba_groups < NUMBER_OF_UE_MAX) &&
-	  (phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->cba_rnti[i%num_active_cba_groups] > 0 ) &&
-	  (phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->num_active_cba_groups> 0)) {
+           */
+          phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=0;
+          phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->status= SCH_IDLE;
+
+          if ((num_active_cba_groups > 0) &&
+              //  (i % num_active_cba_groups == 0) && // this ue is used a a template for the CBA
+              (i + num_active_cba_groups < NUMBER_OF_UE_MAX) &&
+              (phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->cba_rnti[i%num_active_cba_groups] > 0 ) &&
+              (phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->num_active_cba_groups> 0)) {
 #ifdef DEBUG_PHY_PROC
-	LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the subframe_scheduling_flag for Ue %d cba groups %d members\n",
-	      phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid,
-	      i+num_active_cba_groups, i%phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups);
+              LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the subframe_scheduling_flag for Ue %d cba groups %d members\n",
+                  phy_vars_eNB->Mod_id,harq_pid,frame,last_slot>>1,i,harq_pid,
+                  i+num_active_cba_groups, i%phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups);
 #endif
-	phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=1;
-	phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->status= CBA_ACTIVE;
-	phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->TBS=phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS;
-      }
-      
-      if (ret == (1+MAX_TURBO_ITERATIONS)) {
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
-      } // ulsch in error
-      else {
-	LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
-	      phy_vars_eNB->Mod_id,harq_pid,
-	      frame,last_slot>>1);	    
-	
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
-	phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
-	phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] = 0;
+              phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=1;
+              phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->status= CBA_ACTIVE;
+              phy_vars_eNB->ulsch_eNB[i+num_active_cba_groups]->harq_processes[harq_pid]->TBS=phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS;
+          }
+
+          if (ret == (1+MAX_TURBO_ITERATIONS)) {
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
+          } // ulsch in error
+          else {
+              LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
+                  phy_vars_eNB->Mod_id,harq_pid,
+                  frame,last_slot>>1);
+
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
+              phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
+              phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] = 0;
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_ULSCH
-	LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",
-	      frame,last_slot>>1,
-	      harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
-	  LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
-	LOG_T(PHY,"\n");
-#endif
-#endif
-	if (access_mode > UNKNOWN_ACCESS){
-	  LOG_I(PHY,"[eNB %d] Frame %d, Subframe %d : received ULSCH SDU from CBA transmission, UE (%d,%x), CBA (group %d, rnti %x)\n", 
-		phy_vars_eNB->Mod_id, frame,last_slot>>1,
-		i, phy_vars_eNB->ulsch_eNB[i]->rnti,
-		i % phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups, phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups]);
-	  // detect if there is a CBA collision 
-	  if (phy_vars_eNB->cba_last_reception[i%num_active_cba_groups] == 0 ) {
-	    mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
-			      frame,
-			      phy_vars_eNB->ulsch_eNB[i]->rnti,
-			      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
-			      phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
-	    phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]=1;//(last_slot>>1);
-	  } else {
-	    LOG_N(PHY,"[eNB %d] Frame %d subframe %d : CBA collision detected for UE%d for group %d, set the SR for this UE \n ",
-		  phy_vars_eNB->Mod_id,frame,last_slot>>1,
-		  i,i%num_active_cba_groups ); 
-	    mac_xface->SR_indication(phy_vars_eNB->Mod_id,
-				     frame,
-				     phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
-	  }
-	  
-	}
-      } // ULSCH CBA not in error 
-    }
-       
+              LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",
+                  frame,last_slot>>1,
+                  harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+              for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3;j++)
+                LOG_T(PHY,"%x.",phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
+              LOG_T(PHY,"\n");
+#endif
+#endif
+              if (access_mode > UNKNOWN_ACCESS){
+                  LOG_I(PHY,"[eNB %d] Frame %d, Subframe %d : received ULSCH SDU from CBA transmission, UE (%d,%x), CBA (group %d, rnti %x)\n",
+                      phy_vars_eNB->Mod_id, frame,last_slot>>1,
+                      i, phy_vars_eNB->ulsch_eNB[i]->rnti,
+                      i % phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups, phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i%num_active_cba_groups]);
+                  // detect if there is a CBA collision
+                  if (phy_vars_eNB->cba_last_reception[i%num_active_cba_groups] == 0 ) {
+                      mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
+                          frame,
+                          phy_vars_eNB->ulsch_eNB[i]->rnti,
+                          phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
+                          phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                      phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]=1;//(last_slot>>1);
+                  } else {
+                      LOG_N(PHY,"[eNB %d] Frame %d subframe %d : CBA collision detected for UE%d for group %d, set the SR for this UE \n ",
+                          phy_vars_eNB->Mod_id,frame,last_slot>>1,
+                          i,i%num_active_cba_groups );
+                      mac_xface->SR_indication(phy_vars_eNB->Mod_id,
+                          frame,
+                          phy_vars_eNB->dlsch_eNB[i][0]->rnti,last_slot>>1);
+                  }
+
+              }
+          } // ULSCH CBA not in error
+      }
+
   } // loop i=0 ... NUMBER_OF_UE_MAX-1
 
   if (((last_slot&1) == 1 ) &&
       (pusch_active == 0)){
-    if (abstraction_flag == 0) {
-      //      LOG_D(PHY,"[eNB] Frame %d, subframe %d Doing I0_measurements\n",
-      //	  (((last_slot>>1)==9)?-1:0) + phy_vars_eNB->frame,last_slot>>1);
-      lte_eNB_I0_measurements(phy_vars_eNB,
-			      0,
-			      phy_vars_eNB->first_run_I0_measurements);
-    }
+      if (abstraction_flag == 0) {
+          //      LOG_D(PHY,"[eNB] Frame %d, subframe %d Doing I0_measurements\n",
+          //	  (((last_slot>>1)==9)?-1:0) + phy_vars_eNB->frame,last_slot>>1);
+          lte_eNB_I0_measurements(phy_vars_eNB,
+              0,
+              phy_vars_eNB->first_run_I0_measurements);
+      }
 #ifdef PHY_ABSTRACTION
-    else {
-      lte_eNB_I0_measurements_emul(phy_vars_eNB,
-				   sect_id);
-    }
+      else {
+          lte_eNB_I0_measurements_emul(phy_vars_eNB,
+              sect_id);
+      }
 #endif
-  
-    
-    if (I0_clear == 1)
-      I0_clear = 0;
+
+
+      if (I0_clear == 1)
+        I0_clear = 0;
   }
 
 #ifdef EMOS
@@ -3595,14 +3596,14 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
 #endif
 
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX,0);
-   
+
 }
 
 #undef DEBUG_PHY_PROC
 
 #ifdef Rel10  
 int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, relaying_type_t r_type){
-  
+
   int do_proc=0;// do nothing
   switch(r_type){
   case no_relay:
@@ -3623,7 +3624,7 @@ int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, r
 }
 #endif 
 void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag, 
-			    relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn) {
+    relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn) {
 #if defined(ENABLE_ITTI)
   MessageDef   *msg_p;
   const char   *msg_name;
@@ -3634,40 +3635,40 @@ void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY
   /*
     if (phy_vars_eNB->frame >= 1000)
     mac_xface->macphy_exit("Exiting after 1000 Frames\n");
-  */
+   */
   vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_ENB, (last_slot + 1) % 20);
   vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_ENB, phy_vars_eNB->frame);
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,1);
-  
+
 #if defined(ENABLE_ITTI)
   do {
-    // Checks if a message has been sent to PHY sub-task
-    itti_poll_msg (TASK_PHY_ENB, &msg_p);
+      // Checks if a message has been sent to PHY sub-task
+      itti_poll_msg (TASK_PHY_ENB, &msg_p);
 
-    if (msg_p != NULL) {
-      msg_name = ITTI_MSG_NAME (msg_p);
-      instance = ITTI_MSG_INSTANCE (msg_p);
-      Mod_id = instance;
+      if (msg_p != NULL) {
+          msg_name = ITTI_MSG_NAME (msg_p);
+          instance = ITTI_MSG_INSTANCE (msg_p);
+          Mod_id = instance;
 
-      switch (ITTI_MSG_ID(msg_p)) {
+          switch (ITTI_MSG_ID(msg_p)) {
 #   if defined(ENABLE_RAL)
-        case TIMER_HAS_EXPIRED:
+          case TIMER_HAS_EXPIRED:
             // check if it is a measurement timer
-        {
-            hashtable_rc_t       hashtable_rc;
+            {
+              hashtable_rc_t       hashtable_rc;
 
-            hashtable_rc = hashtable_is_key_exists(PHY_vars_eNB_g[Mod_id]->ral_thresholds_timed, (uint64_t)(TIMER_HAS_EXPIRED(msg_p).timer_id));
-            if (hashtable_rc == HASH_TABLE_OK) {
-                phy_eNB_lte_check_measurement_thresholds(instance, (ral_threshold_phy_t*)TIMER_HAS_EXPIRED(msg_p).arg);
+              hashtable_rc = hashtable_is_key_exists(PHY_vars_eNB_g[Mod_id]->ral_thresholds_timed, (uint64_t)(TIMER_HAS_EXPIRED(msg_p).timer_id));
+              if (hashtable_rc == HASH_TABLE_OK) {
+                  phy_eNB_lte_check_measurement_thresholds(instance, (ral_threshold_phy_t*)TIMER_HAS_EXPIRED(msg_p).arg);
+              }
             }
-        }
             break;
 
 
-        case PHY_MEAS_THRESHOLD_REQ:
+          case PHY_MEAS_THRESHOLD_REQ:
 #warning "TO DO LIST OF THRESHOLDS"
-          LOG_I(PHY, "[ENB %d] Received %s\n", Mod_id, msg_name);
-          {
+            LOG_I(PHY, "[ENB %d] Received %s\n", Mod_id, msg_name);
+            {
               ral_threshold_phy_t* threshold_phy_p  = NULL;
               int                  index, res;
               long                 timer_id;
@@ -3675,126 +3676,126 @@ void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY
 
               switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action) {
 
-                  case RAL_TH_ACTION_CANCEL_THRESHOLD:
-                      break;
+              case RAL_TH_ACTION_CANCEL_THRESHOLD:
+                break;
 
-                  case RAL_TH_ACTION_SET_NORMAL_THRESHOLD:
-                  case RAL_TH_ACTION_SET_ONE_SHOT_THRESHOLD:
-                      for (index = 0; index < PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.num_thresholds; index++) {
-                          threshold_phy_p                  = calloc(1, sizeof(ral_threshold_phy_t));
-                          threshold_phy_p->th_action       = PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action;
-                          memcpy(&threshold_phy_p->link_param.link_param_type,
-                                  &PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type,
-                                  sizeof(ral_link_param_type_t));
-
-                          memcpy(&threshold_phy_p->threshold,
-                                  &PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.thresholds[index],
-                                  sizeof(ral_threshold_t));
-
-                          switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.union_choice) {
-
-                              case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL:
-                                  switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type.choice) {
-                                      case RAL_LINK_PARAM_TYPE_CHOICE_GEN:
-                                          SLIST_INSERT_HEAD(
-                                              &PHY_vars_eNB_g[Mod_id]->ral_thresholds_gen_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_gen],
-                                              threshold_phy_p,
-                                              ral_thresholds);
-                                          break;
-
-                                      case RAL_LINK_PARAM_TYPE_CHOICE_LTE:
-                                          SLIST_INSERT_HEAD(
-                                              &PHY_vars_eNB_g[Mod_id]->ral_thresholds_lte_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_lte],
-                                              threshold_phy_p,
-                                              ral_thresholds);
-                                          break;
-
-                                      default:
-                                          LOG_E(PHY, "[ENB %d] BAD PARAMETER cfg_param.link_param_type.choice %d in %s\n",
-                                                  Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type.choice, msg_name);
-                                  }
-                                  break;
-
-                              case RAL_LINK_CFG_PARAM_CHOICE_TIMER:
-                                  res = timer_setup(
-                                      (uint32_t)(PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param._union.timer_interval/1000),//uint32_t      interval_sec,
-                                      (uint32_t)(PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param._union.timer_interval%1000),//uint32_t      interval_us,
-                                      TASK_PHY_ENB,
-                                      instance,
-                                      TIMER_PERIODIC,
-                                      threshold_phy_p,
-                                      &timer_id);
-
-                                  if (res == 0) {
-                                      hashtable_rc = hashtable_insert(PHY_vars_eNB_g[Mod_id]->ral_thresholds_timed, (uint64_t )timer_id, (void*)threshold_phy_p);
-                                      if (hashtable_rc == HASH_TABLE_OK) {
-                                          threshold_phy_p->timer_id = timer_id;
-                                      } else {
-                                          LOG_E(PHY, "[ENB %d]  %s: Error in hashtable. Could not configure threshold index %d \n",
-                                                  Mod_id, msg_name, index);
-                                      }
-
-                                  } else {
-                                      LOG_E(PHY, "[ENB %d]  %s: Could not configure threshold index %d because of timer initialization failure\n",
-                                              Mod_id, msg_name, index);
-                                  }
-                                  break;
-
-                              default: // already checked in RRC, should not happen here
-                                  LOG_E(PHY, "[ENB %d] BAD PARAMETER cfg_param.union_choice %d in %s\n",
-                                           Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.union_choice, msg_name);
-                          }
+              case RAL_TH_ACTION_SET_NORMAL_THRESHOLD:
+              case RAL_TH_ACTION_SET_ONE_SHOT_THRESHOLD:
+                for (index = 0; index < PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.num_thresholds; index++) {
+                    threshold_phy_p                  = calloc(1, sizeof(ral_threshold_phy_t));
+                    threshold_phy_p->th_action       = PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action;
+                    memcpy(&threshold_phy_p->link_param.link_param_type,
+                        &PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type,
+                        sizeof(ral_link_param_type_t));
+
+                    memcpy(&threshold_phy_p->threshold,
+                        &PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.thresholds[index],
+                        sizeof(ral_threshold_t));
+
+                    switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.union_choice) {
+
+                    case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL:
+                      switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type.choice) {
+                      case RAL_LINK_PARAM_TYPE_CHOICE_GEN:
+                        SLIST_INSERT_HEAD(
+                            &PHY_vars_eNB_g[Mod_id]->ral_thresholds_gen_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_gen],
+                            threshold_phy_p,
+                            ral_thresholds);
+                        break;
+
+                      case RAL_LINK_PARAM_TYPE_CHOICE_LTE:
+                        SLIST_INSERT_HEAD(
+                            &PHY_vars_eNB_g[Mod_id]->ral_thresholds_lte_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_lte],
+                            threshold_phy_p,
+                            ral_thresholds);
+                        break;
+
+                      default:
+                        LOG_E(PHY, "[ENB %d] BAD PARAMETER cfg_param.link_param_type.choice %d in %s\n",
+                            Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type.choice, msg_name);
                       }
                       break;
 
-                  default:
-                      LOG_E(PHY, "[ENB %d] BAD PARAMETER th_action value %d in %s\n",
-                              Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action, msg_name);
+                      case RAL_LINK_CFG_PARAM_CHOICE_TIMER:
+                        res = timer_setup(
+                            (uint32_t)(PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param._union.timer_interval/1000),//uint32_t      interval_sec,
+                            (uint32_t)(PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param._union.timer_interval%1000),//uint32_t      interval_us,
+                            TASK_PHY_ENB,
+                            instance,
+                            TIMER_PERIODIC,
+                            threshold_phy_p,
+                            &timer_id);
+
+                        if (res == 0) {
+                            hashtable_rc = hashtable_insert(PHY_vars_eNB_g[Mod_id]->ral_thresholds_timed, (uint64_t )timer_id, (void*)threshold_phy_p);
+                            if (hashtable_rc == HASH_TABLE_OK) {
+                                threshold_phy_p->timer_id = timer_id;
+                            } else {
+                                LOG_E(PHY, "[ENB %d]  %s: Error in hashtable. Could not configure threshold index %d \n",
+                                    Mod_id, msg_name, index);
+                            }
+
+                        } else {
+                            LOG_E(PHY, "[ENB %d]  %s: Could not configure threshold index %d because of timer initialization failure\n",
+                                Mod_id, msg_name, index);
+                        }
+                        break;
+
+                      default: // already checked in RRC, should not happen here
+                        LOG_E(PHY, "[ENB %d] BAD PARAMETER cfg_param.union_choice %d in %s\n",
+                            Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.union_choice, msg_name);
+                    }
+                }
+                break;
+
+              default:
+                LOG_E(PHY, "[ENB %d] BAD PARAMETER th_action value %d in %s\n",
+                    Mod_id, PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action, msg_name);
               }
 
-          }
-          break;
+            }
+            break;
 #   endif
 
-        /* Messages from eNB app */
-        case PHY_CONFIGURATION_REQ:
-          LOG_I(PHY, "[eNB %d] Received %s\n", instance, msg_name);
-          /* TODO */
+            /* Messages from eNB app */
+          case PHY_CONFIGURATION_REQ:
+            LOG_I(PHY, "[eNB %d] Received %s\n", instance, msg_name);
+            /* TODO */
 
-          break;
+            break;
 
-        default:
-          LOG_E(PHY, "[ENB %d] Received unexpected message %s\n", Mod_id, msg_name);
-          break;
-      }
+          default:
+            LOG_E(PHY, "[ENB %d] Received unexpected message %s\n", Mod_id, msg_name);
+            break;
+          }
 
-      result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
-      AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
-    }
+          result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
+          AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+      }
   } while(msg_p != NULL);
 #endif
 
   if ((((phy_vars_eNB->lte_frame_parms.frame_type == TDD)&&(subframe_select(&phy_vars_eNB->lte_frame_parms,next_slot>>1)==SF_DL))||
       (phy_vars_eNB->lte_frame_parms.frame_type == FDD)) && ((next_slot&1)==0)) {
 #ifdef Rel10 
-    if (phy_procedures_RN_eNB_TX(last_slot, next_slot, r_type) != 0 ) 
+      if (phy_procedures_RN_eNB_TX(last_slot, next_slot, r_type) != 0 )
 #endif 
-      phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_type,phy_vars_rn);
+        phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_type,phy_vars_rn);
   }
   if ((((phy_vars_eNB->lte_frame_parms.frame_type == TDD )&&(subframe_select(&phy_vars_eNB->lte_frame_parms,last_slot>>1)==SF_UL)) ||
       (phy_vars_eNB->lte_frame_parms.frame_type == FDD)) && ((last_slot&1)==1)){
-    phy_procedures_eNB_RX(last_slot,phy_vars_eNB,abstraction_flag,r_type);
+      phy_procedures_eNB_RX(last_slot,phy_vars_eNB,abstraction_flag,r_type);
   }
   if ((subframe_select(&phy_vars_eNB->lte_frame_parms,next_slot>>1)==SF_S) &&
       ((next_slot&1)==0)) {
 #ifdef Rel10 
-    if (phy_procedures_RN_eNB_TX(last_slot, next_slot, r_type) != 0 )
+      if (phy_procedures_RN_eNB_TX(last_slot, next_slot, r_type) != 0 )
 #endif 
-      phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_type,phy_vars_rn);
+        phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_type,phy_vars_rn);
   }
   if ((subframe_select(&phy_vars_eNB->lte_frame_parms,last_slot>>1)==SF_S) &&
       ((last_slot&1)==0)){
-    phy_procedures_eNB_S_RX(last_slot,phy_vars_eNB,abstraction_flag,r_type);
+      phy_procedures_eNB_S_RX(last_slot,phy_vars_eNB,abstraction_flag,r_type);
   }
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,0);
 
diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h
index a5f64e5641a627ee99743741ad5baf27a1b1f56d..88b758e625dde99200a0b3c33b80ab9d8a7d63aa 100755
--- a/openair2/COMMON/platform_constants.h
+++ b/openair2/COMMON/platform_constants.h
@@ -67,47 +67,6 @@
 #define CH_OFFSET      0x0004
 #define CH_SHIFT       2
 
-#ifdef MESH
-
-//#    define MAX_RB_MOBILE              NB_RB_MAX  * ( MAX_MANAGED_RG_PER_MOBILE + MAX_MOBILES_PER_RG - 1 )
-//#    define MAX_RAB_MOBILE             NB_RAB_MAX * ( MAX_MANAGED_RG_PER_MOBILE + MAX_MOBILES_PER_RG - 1 )
-//#    define MAX_RB_RG                  MAX_RB_MOBILE //NB_RB_MAX  *  MAX_MOBILES_PER_RG
-//#    define MAX_RAB_RG                 (NB_RB_MAX+1) * (MAX_MOBILES_PER_RG + 1)
-//#    define MAX_RAB                    MAX_RAB_RG
-//#    define MAX_RB                     MAX_RB_RG
-#else
-
-//#    define MAX_RB_MOBILE              NB_RB_MAX * MAX_MANAGED_RG_PER_MOBILE
-//#    define MAX_RAB_MOBILE             NB_RAB_MAX * MAX_MANAGED_RG_PER_MOBILE
-//#    define MAX_RB_RG                  NB_RB_MAX * MAX_MOBILES_PER_RG
-//#    define MAX_RAB_RG                 NB_RB_MAX * MAX_MOBILES_PER_RG
-//#    ifdef NODE_RG
-//#        define MAX_RAB                MAX_RAB_RG
-//#        define MAX_RB                 MAX_RB_RG
-//#    else
-//#      //  ifdef NODE_MT
-//#        //    define MAX_RAB            MAX_RAB_MOBILE
-//#          //  define MAX_RB             MAX_RB_MOBILE
-//#        //else
-//#          //error NODE_RG or NODE_MT must be defined
-//#        //endif
-//#    endif
-#endif //MESH
-
-// RLC_MODE
-#        define RLC_NONE     (rlc_mode_t)0
-#        define RLC_MODE_AM  (rlc_mode_t)1
-#        define RLC_MODE_TM  (rlc_mode_t)2
-#        define RLC_MODE_UM  (rlc_mode_t)3
-
-//E_R
-#        define E_R_RLC_ER_RELEASE          1
-#        define E_R_RLC_ER_MODIFICATION     2
-#        define E_R_RLC_ER_RE_ESTABLISHMENT 4
-#        define E_R_RLC_ER_STOP             8
-#        define E_R_RLC_ER_CONTINUE         16
-#        define E_R_RLC_ER_NONE             0
-
 // RLC_AM_SEND_MRW
 #        define SEND_MRW_OFF    15
 #        define SEND_MRW_ON     240
@@ -134,7 +93,8 @@
 #        endif
 #    endif
 
-
+#define  UNUSED_PARAM_MBMS_SESSION_ID  0
+#define  UNUSED_PARAM_MBMS_SERVICE_ID  0
 
 #ifdef USER_MODE
 #define printk printf
diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h
index 751d1914f9bc43d7b57f8cbf6790b481aa160bd3..bee3e66635d2d0acb421ef45714951a394d71135 100755
--- a/openair2/COMMON/platform_types.h
+++ b/openair2/COMMON/platform_types.h
@@ -32,18 +32,20 @@ typedef unsigned int       tb_size_t;
 typedef u16_t              rb_id_t;
 typedef u16_t              srb_id_t;
 typedef u32_t              frame_t;
+typedef s32_t              sframe_t;
 typedef u32_t              sub_frame_t;
 typedef u8_t               module_id_t;
+typedef s8_t               smodule_id_t;
 typedef unsigned int       mui_t;
 typedef unsigned int       confirm_t;
-typedef unsigned int       rb_type_t;
 typedef unsigned int       logical_chan_id_t;
 typedef unsigned int       num_tb_t;
 typedef unsigned int       crc_t;
 typedef unsigned int       rlc_tx_status_t;
-typedef unsigned int       rlc_mode_t;
 typedef s16_t              rlc_sn_t;
 typedef u16_t              rlc_usn_t;
+typedef u16_t              pdcp_sn_t;
+typedef u32_t              pdcp_hfn_t;
 typedef int                traffic_type_t;
 typedef u32_t              mbms_session_id_t;
 typedef u16_t              mbms_service_id_t;
@@ -56,6 +58,25 @@ typedef unsigned short     crc16_t;
 typedef unsigned int       crc32_t;
 
 typedef signed char        boolean_t;
+#if !defined(TRUE)
+#define TRUE               (boolean_t)0x01
+#endif
+#if !defined(FALSE)
+#define FALSE              (boolean_t)0x00
+#endif
+
+typedef enum link_direction_e {
+    UNKNOWN_DIR          = 0,
+    DIR_UPLINK           = 1,
+    DIR_DOWNLINK         = 2
+} link_direction_t;
+
+typedef enum rb_type_e {
+    UNKNOWN_RADIO_BEARER        = 0,
+    SIGNALLING_RADIO_BEARER     = 1,
+    RADIO_ACCESS_BEARER         = 2
+} rb_type_t;
+
 
 typedef enum MBMS_flag_e {
     MBMS_FLAG_NO       = 0,
diff --git a/openair2/COMMON/rrm_constants.h b/openair2/COMMON/rrm_constants.h
index da0076f7f04391f247a162cb35ed010a93a41176..04c90e43f0d3aad0f789c9d203df471d4f41b2dd 100755
--- a/openair2/COMMON/rrm_constants.h
+++ b/openair2/COMMON/rrm_constants.h
@@ -29,11 +29,6 @@
 #        define ACTION_MBMS_ADD 10
 #        define ACTION_MBMS_MODIFY 11
 
-#        define UPLINK         1
-#        define DOWNLINK       2
-
-#        define SIGNALLING_RADIO_BEARER 1
-#        define RADIO_ACCESS_BEARER     2
 #        define MOBILE    7
 
 // equipment type
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index 3444fca6a2970e8cfd2c75b2ceaf53dcb9988a9a..a7a02c911c3021130e99c4cc41fac17b539bc3a8 100755
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -203,7 +203,6 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
   char*             enb_ipv4_address_for_S1U      = NULL;
   char*             enb_interface_name_for_S1_MME = NULL;
   char*             enb_ipv4_address_for_S1_MME   = NULL;
-  char             *astring                       = NULL;
   char             *address                       = NULL;
   char             *cidr                          = NULL;
 
diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index adee2caf608c8b2a16ef040d922e59bbb5d965e9..a3f108ee2bbc7db61b146eb1b1fc917be6a55d34 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -472,7 +472,7 @@ typedef struct{
   /// NDI from last UL scheduling
   uint8_t oldNDI_UL[8];
   /// Flag to indicate UL has been scheduled at least once
-  int ul_active;
+  boolean_t ul_active;
 
   // PHY interface info
 
@@ -536,7 +536,7 @@ typedef struct{
 
 typedef struct {
   /// Flag to indicate this process is active
-  u8 RA_active;
+  boolean_t RA_active;
   /// Size of DCI for RA-Response (bytes)
   u8 RA_dci_size_bytes1;
   /// Size of DCI for RA-Response (bits)
@@ -1129,9 +1129,9 @@ void        init_ue_sched_info(void);
 void        add_ue_ulsch_info (module_id_t module_idP,  module_id_t ue_mod_idP, sub_frame_t subframe,UE_ULSCH_STATUS status);
 void        add_ue_dlsch_info (module_id_t module_idP, module_id_t ue_mod_idP, sub_frame_t subframe,UE_DLSCH_STATUS status);
 module_id_t find_UE_id        (module_id_t module_idP, rnti_t rnti) ;
-u16         find_UE_RNTI      (module_id_t module_idP, module_id_t ue_mod_idP);
+rnti_t      find_UE_RNTI      (module_id_t module_idP, module_id_t ue_mod_idP);
 u8          find_active_UEs   (module_id_t module_idP);
-u8          is_UE_active      (module_id_t module_idP, module_id_t ue_mod_idP );
+boolean_t   is_UE_active      (module_id_t module_idP, module_id_t ue_mod_idP );
 u8          find_ulgranted_UEs(module_id_t module_idP);
 u8          find_dlgranted_UEs(module_id_t module_idP);
 u8          process_ue_cqi    (module_id_t module_idP, module_id_t ue_mod_idP);
@@ -1343,13 +1343,13 @@ BSR_SHORT *get_bsr_short(module_id_t module_idP, u8 bsr_len);
 */
 BSR_LONG * get_bsr_long(module_id_t module_idP, u8 bsr_len);
 
-/*! \fn  int update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid)
+/*! \fn  boolean_t update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid)
    \brief get the rlc stats and update the bsr level for each lcid 
 \param[in] Mod_id instance of the UE
 \param[in] frame Frame index
 \param[in] lcid logical channel identifier
 */
-int update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid, u8 lcgid);
+boolean_t update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid, u8 lcgid);
 
 /*! \fn  locate (int *table, int size, int value)
    \brief locate the BSR level in the table as defined in 36.321. This function requires that he values in table to be monotonic, either increasing or decreasing. The returned value is not less than 0, nor greater than n-1, where n is the size of table. 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index e16cdb4f93816e59781deecba79864648479f6a8..5f2255564061f2a7021c0adae2a7ebbabfe507f8 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -199,8 +199,8 @@ void initiate_ra_proc(module_id_t module_idP, frame_t frameP, u16 preamble_index
   LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Initiating RA procedure for preamble index %d\n",module_idP,frameP,preamble_index);
 
   for (i=0;i<NB_RA_PROC_MAX;i++) {
-      if (eNB_mac_inst[module_idP].RA_template[i].RA_active==0) {
-          eNB_mac_inst[module_idP].RA_template[i].RA_active=1;
+      if (eNB_mac_inst[module_idP].RA_template[i].RA_active==FALSE) {
+          eNB_mac_inst[module_idP].RA_template[i].RA_active=TRUE;
           eNB_mac_inst[module_idP].RA_template[i].generate_rar=1;
           eNB_mac_inst[module_idP].RA_template[i].generate_Msg4=0;
           eNB_mac_inst[module_idP].RA_template[i].wait_ack_Msg4=0;
@@ -224,7 +224,7 @@ void cancel_ra_proc(module_id_t module_idP, frame_t frameP, rnti_t rnti) {
 
   for (i=0;i<NB_RA_PROC_MAX;i++) {
       if (rnti == eNB_mac_inst[module_idP].RA_template[i].rnti) {
-          eNB_mac_inst[module_idP].RA_template[i].RA_active=0;
+          eNB_mac_inst[module_idP].RA_template[i].RA_active=FALSE;
           eNB_mac_inst[module_idP].RA_template[i].generate_rar=0;
           eNB_mac_inst[module_idP].RA_template[i].generate_Msg4=0;
           eNB_mac_inst[module_idP].RA_template[i].wait_ack_Msg4=0;
@@ -251,7 +251,7 @@ void terminate_ra_proc(module_id_t module_idP,frame_t frameP,rnti_t rnti,unsigne
           eNB_mac_inst[module_idP].RA_template[i].rnti, rnti,
           eNB_mac_inst[module_idP].RA_template[i].RA_active);
       if ((eNB_mac_inst[module_idP].RA_template[i].rnti==rnti) &&
-          (eNB_mac_inst[module_idP].RA_template[i].RA_active==1)) {
+          (eNB_mac_inst[module_idP].RA_template[i].RA_active==TRUE)) {
 
           payload_ptr = parse_ulsch_header(msg3,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,msg3_len);
           LOG_D(MAC,"[eNB %d][RAPROC] Frame %d Received CCCH: length %d, offset %d\n",
@@ -307,16 +307,16 @@ module_id_t find_UE_id(module_id_t module_idP, rnti_t rnti) {
 
 }
 
-u16 find_UE_RNTI(module_id_t module_idP, module_id_t ue_mod_idP) {
+rnti_t find_UE_RNTI(module_id_t module_idP, module_id_t ue_mod_idP) {
 
   return (eNB_mac_inst[module_idP].UE_template[ue_mod_idP].rnti);
 
 }
-u8 is_UE_active(module_id_t module_idP, module_id_t ue_mod_idP ){
+boolean_t is_UE_active(module_id_t module_idP, module_id_t ue_mod_idP ){
   if (eNB_mac_inst[module_idP].UE_template[ue_mod_idP].rnti !=0 )
-    return 1;
+    return TRUE;
   else
-    return 0 ;
+    return FALSE ;
 }
 u8 find_active_UEs(module_id_t module_idP){
 
@@ -326,7 +326,7 @@ u8 find_active_UEs(module_id_t module_idP){
 
   for (ue_mod_id=0;ue_mod_id<NUMBER_OF_UE_MAX;ue_mod_id++) {
 
-      if (((rnti=eNB_mac_inst[module_idP].UE_template[ue_mod_id].rnti) !=0)&&(eNB_mac_inst[module_idP].UE_template[ue_mod_id].ul_active==1)){
+      if (((rnti=eNB_mac_inst[module_idP].UE_template[ue_mod_id].rnti) !=0)&&(eNB_mac_inst[module_idP].UE_template[ue_mod_id].ul_active==TRUE)){
 
           if (mac_xface->get_eNB_UE_stats(module_idP,rnti) != NULL){ // check at the phy enb_ue state for this rnti
               nb_active_ue++;
@@ -369,7 +369,7 @@ u8 find_num_active_UEs_in_cbagroup(module_id_t module_idP, unsigned char group_i
   for (UE_id=group_id;UE_id<NUMBER_OF_UE_MAX;UE_id+=eNB_mac_inst[module_idP].num_active_cba_groups) {
 
       if (((rnti=eNB_mac_inst[module_idP].UE_template[UE_id].rnti) !=0) &&
-          (eNB_mac_inst[module_idP].UE_template[UE_id].ul_active==1)    &&
+          (eNB_mac_inst[module_idP].UE_template[UE_id].ul_active==TRUE)    &&
           (mac_get_rrc_status(module_idP,1,UE_id) > RRC_CONNECTED)){
           //  && (UE_is_to_be_scheduled(module_idP,UE_id)))
           // check at the phy enb_ue state for this rnti
@@ -383,9 +383,9 @@ u8 find_num_active_UEs_in_cbagroup(module_id_t module_idP, unsigned char group_i
   return(nb_ue_in_pusch);
 }
 #endif 
-s8 add_new_ue(module_id_t enb_mod_idP, u16 rntiP) {
+s8 add_new_ue(module_id_t enb_mod_idP, rnti_t rntiP) {
   module_id_t ue_mod_id;
-  int    j;
+  int         j;
 
   for (ue_mod_id=0;ue_mod_id<NUMBER_OF_UE_MAX;ue_mod_id++) {
       if (eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].rnti == 0) {
@@ -415,7 +415,7 @@ s8 mac_remove_ue(module_id_t enb_mod_idP, module_id_t ue_mod_idP) {
 
   eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_idP].ul_SR             = 0;
   eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_idP].rnti              = 0;
-  eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_idP].ul_active         = 0;
+  eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_idP].ul_active         = FALSE;
   eNB_ulsch_info[enb_mod_idP][ue_mod_idP].rnti                        = 0;
   eNB_ulsch_info[enb_mod_idP][ue_mod_idP].status                      = S_UL_NONE;
   eNB_dlsch_info[enb_mod_idP][ue_mod_idP].rnti                        = 0;
@@ -511,12 +511,12 @@ unsigned char *parse_ulsch_header(unsigned char *mac_header,
 
 void SR_indication(module_id_t enb_mod_idP, frame_t frameP, rnti_t rntiP, sub_frame_t subframeP) {
 
-  s8 ue_mod_id = find_UE_id(enb_mod_idP, rntiP);
+  smodule_id_t ue_mod_id = find_UE_id(enb_mod_idP, rntiP);
 
   if (ue_mod_id >= 0) {
       LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d \n",enb_mod_idP,rntiP,frameP,subframeP, ue_mod_id);
       eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_SR = 1;
-      eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_active = 1;
+      eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_active = TRUE;
   } else {
       AssertFatal(0, "find_UE_id(%u,rnti %d) not found", enb_mod_idP, rntiP);
   }
@@ -602,7 +602,7 @@ void rx_sdu(module_id_t enb_mod_idP,frame_t frameP,rnti_t rntiP,u8 *sdu, u16 sdu
               LOG_D(MAC,"[eNB %d] Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d(%d) \n",
                   enb_mod_idP,frameP, rx_lengths[i], ue_mod_id, rx_lcids[i], rx_lcids[i]);
 
-              mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,1,RLC_MBMS_NO,
+              mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
                   rx_lcids[i],
                   (char *)payload_ptr,
                   rx_lengths[i],
@@ -628,7 +628,7 @@ void rx_sdu(module_id_t enb_mod_idP,frame_t frameP,rnti_t rntiP,u8 *sdu, u16 sdu
               enb_mod_idP,frameP, rx_lengths[i], ue_mod_id,rx_lcids[i],rx_lcids[i]);
 
           if ((rx_lengths[i] <SCH_PAYLOAD_SIZE_MAX) &&  (rx_lengths[i] > 0) ) {   // MAX SIZE OF transport block
-              mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,1,RLC_MBMS_NO,
+              mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
                   DTCH,
                   (char *)payload_ptr,
                   rx_lengths[i],
@@ -969,6 +969,7 @@ void add_common_dci(DCI_PDU *DCI_pdu,
 
 
   DCI_pdu->Num_common_dci++;
+  LOG_D(MAC,"add common dci format %d for rnti %d \n",dci_fmt,rnti);
 }
 
 void add_ue_spec_dci(DCI_PDU *DCI_pdu,void *pdu,rnti_t rnti,unsigned char dci_size_bytes,unsigned char aggregation,unsigned char dci_size_bits,unsigned char dci_fmt,u8 ra_flag) {
@@ -1453,7 +1454,7 @@ int schedule_MBMS(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
           module_idP,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,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG,
+      rlc_status = mac_rlc_status_ind(module_idP,0,frameP,ENB_FLAG_YES,MBMS_FLAG_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG,
           TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
       //printf("frameP %d, subframeP %d,  rlc_status.bytes_in_buffer is %d\n",frameP,subframeP, rlc_status.bytes_in_buffer);
 
@@ -1461,10 +1462,10 @@ int schedule_MBMS(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
           LOG_I(MAC,"[eNB %d][MBMS USER-PLANE], Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d)\n",
               module_idP,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, frameP, 1, RLC_MBMS_YES,
+          sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,
               MTCH + (maxDRB + 3) * MAX_MOBILES_PER_RG,
               (char*)&mch_buffer[sdu_length_total]);
-          //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, RLC_MBMS_NO,  MTCH+(MAX_NUM_RB*(NUMBER_OF_UE_MAX+1)), (char*)&mch_buffer[sdu_length_total]);
+          //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO,  MTCH+(MAX_NUM_RB*(NUMBER_OF_UE_MAX+1)), (char*)&mch_buffer[sdu_length_total]);
           LOG_I(MAC,"[eNB %d][MBMS USER-PLANE] Got %d bytes for MTCH %d\n",module_idP,sdu_lengths[num_sdus],MTCH);
           eNB_mac_inst[module_idP].mtch_active=1;
           sdu_lcids[num_sdus] = MTCH;
@@ -1597,7 +1598,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 
   for (i=0;i<NB_RA_PROC_MAX;i++) {
 
-      if (RA_template[i].RA_active == 1) {
+      if (RA_template[i].RA_active == TRUE) {
 
           LOG_I(MAC,"[eNB %d][RAPROC] RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)\n",
               module_idP,i,RA_template[i].generate_rar,RA_template[i].generate_Msg4,RA_template[i].wait_ack_Msg4, RA_template[i].rnti);
@@ -1886,7 +1887,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
                   RA_template[i].generate_Msg4=0;
                   RA_template[i].generate_Msg4_dci=1;
                   RA_template[i].wait_ack_Msg4=1;
-                  RA_template[i].RA_active = 0;
+                  RA_template[i].RA_active = FALSE;
                   lcid=0;
 
                   if ((TBsize - rrc_sdu_length - msg4_header) <= 2) {
@@ -2002,7 +2003,7 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char coopera
   // not sure about the break (can there be more than 1 active RA procedure?)
 
   for (i=0;i<NB_RA_PROC_MAX;i++) {
-      if ((eNB_mac_inst[module_idP].RA_template[i].RA_active == 1) &&
+      if ((eNB_mac_inst[module_idP].RA_template[i].RA_active == TRUE) &&
           (eNB_mac_inst[module_idP].RA_template[i].generate_rar == 0) &&
           (eNB_mac_inst[module_idP].RA_template[i].Msg3_subframe == sched_subframe)) {
           first_rb++;
@@ -3216,7 +3217,7 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
               else {
                   LOG_I(MAC,"[eNB %d][RAPROC] Frame %d, subframeP %d : Msg4 acknowledged\n",module_idP,frameP,subframeP);
                   eNB_mac_inst[module_idP].RA_template[i].wait_ack_Msg4=0;
-                  eNB_mac_inst[module_idP].RA_template[i].RA_active=0;
+                  eNB_mac_inst[module_idP].RA_template[i].RA_active=FALSE;
               }
           }
       }
@@ -3818,8 +3819,8 @@ void schedule_ue_spec(module_id_t   module_idP,
               module_idP,
               ue_mod_id,
               frameP,
-              1,
-              RLC_MBMS_NO,
+              ENB_FLAG_YES,
+              MBMS_FLAG_NO,
               DCCH,
               (TBS-ta_len-header_len_dcch)); // transport block set size
 
@@ -3830,8 +3831,8 @@ void schedule_ue_spec(module_id_t   module_idP,
                   module_idP,
                   ue_mod_id,
                   frameP,
-                  1,
-                  RLC_MBMS_NO,
+                  ENB_FLAG_YES,
+                  MBMS_FLAG_NO,
                   DCCH,
                   (char *)&dlsch_buffer[sdu_lengths[0]]);
 
@@ -3858,8 +3859,8 @@ void schedule_ue_spec(module_id_t   module_idP,
               module_idP,
               ue_mod_id,
               frameP,
-              1,
-              RLC_MBMS_NO,
+              ENB_FLAG_YES,
+              MBMS_FLAG_NO,
               DCCH+1,
               (TBS-ta_len-header_len_dcch-sdu_length_total)); // transport block set size less allocations for timing advance and
           // DCCH SDU
@@ -3871,8 +3872,8 @@ void schedule_ue_spec(module_id_t   module_idP,
                   module_idP,
                   ue_mod_id,
                   frameP,
-                  1,
-                  RLC_MBMS_NO,
+                  ENB_FLAG_YES,
+                  MBMS_FLAG_NO,
                   DCCH+1,
                   (char *)&dlsch_buffer[sdu_lengths[0]]);
 
@@ -3897,8 +3898,8 @@ void schedule_ue_spec(module_id_t   module_idP,
               module_idP,
               ue_mod_id,
               frameP,
-              1,
-              RLC_MBMS_NO,
+              ENB_FLAG_YES,
+              MBMS_FLAG_NO,
               DTCH,
               TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch);
 
@@ -3910,8 +3911,8 @@ void schedule_ue_spec(module_id_t   module_idP,
                   module_idP,
                   ue_mod_id,
                   frameP,
-                  1,
-                  RLC_MBMS_NO,
+                  ENB_FLAG_YES,
+                  MBMS_FLAG_NO,
                   DTCH,
                   (char*)&dlsch_buffer[sdu_length_total]);
 
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 6555e30200b55f7616d2b8369874de47b115c33f..a48c47efee359550499cd7069f2269a8083e9a31 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -54,6 +54,7 @@
 
 #include "defs.h"
 #include "extern.h"
+#include "assertions.h"
 #include "PHY_INTERFACE/extern.h"
 #include "PHY_INTERFACE/defs.h"
 #include "PHY/defs.h"
@@ -68,11 +69,6 @@
 
 #include "SCHED/defs.h"
 
-//#ifdef BIGPHYSAREA
-//extern void *bigphys_malloc(int);
-//#endif
-
-
 /***********************************************************************/
 void dl_phy_sync_success(module_id_t   module_idP,
     frame_t       frameP,
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 3d80ce64185ae369d0f9fb4296699247109eba8e..88f917e52871f822824f1d7495878b9c951686af 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -106,7 +106,7 @@ void store_dlsch_buffer (module_id_t Mod_id,
 
       for(i=0;i< MAX_NUM_LCID; i++){ // loop over all the logical channels
 
-          rlc_status = mac_rlc_status_ind(Mod_id,next_ue, frameP,1,RLC_MBMS_NO,i,0 );
+          rlc_status = mac_rlc_status_ind(Mod_id,next_ue, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,i,0 );
           eNB_mac_inst[Mod_id].UE_template[next_ue].dl_buffer_info[i] = rlc_status.bytes_in_buffer; //storing the dlsch buffer for each logical channel
           eNB_mac_inst[Mod_id].UE_template[next_ue].dl_pdus_in_buffer[i] = rlc_status.pdus_in_buffer;
           eNB_mac_inst[Mod_id].UE_template[next_ue].dl_buffer_head_sdu_creation_time[i] = rlc_status.head_sdu_creation_time ;
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index b12fff2fcd66b638b8730c1a130a9871bfba6477..fd3d9b9fb1165f4f30c9eb7e21477b9dcc0fdc89 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -296,7 +296,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,frame_t frameP, u8 eNB_ind
               else if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[DCCH] > 0) {
                   // This is for triggering a transmission on DCCH using PRACH (during handover, or sending SR for example)
                   dcch_header_len = 2 + 2;  /// SHORT Subheader + C-RNTI control element
-                  rlc_status = mac_rlc_status_ind(0, module_idP,frameP,0,RLC_MBMS_NO,
+                  rlc_status = mac_rlc_status_ind(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
                       DCCH,
                       6);
                   if (UE_mac_inst[module_idP].crnti_before_ho)
@@ -306,7 +306,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,frame_t frameP, u8 eNB_ind
                     LOG_D(MAC,"[UE %d] Frame %d : UL-DCCH -> ULSCH, RRC message has %d bytes to send through PRACH(mac header len %d)\n",
                         module_idP,frameP, rlc_status.bytes_in_buffer,dcch_header_len);
 
-                  sdu_lengths[0] = mac_rlc_data_req(eNB_indexP, module_idP,frameP,0, RLC_MBMS_NO,
+                  sdu_lengths[0] = mac_rlc_data_req(eNB_indexP, module_idP,frameP,ENB_FLAG_NO, MBMS_FLAG_NO,
                       DCCH,
                       (char *)&ulsch_buff[0]);
 
@@ -355,7 +355,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,frame_t frameP, u8 eNB_ind
                   UE_mac_inst[module_idP].RA_tx_frame,UE_mac_inst[module_idP].RA_tx_subframe);
               // compute backoff parameters
               if (UE_mac_inst[module_idP].RA_backoff_cnt>0) {
-                  frame_diff = (s32)frameP - UE_mac_inst[module_idP].RA_backoff_frame;
+                  frame_diff = (sframe_t)frameP - UE_mac_inst[module_idP].RA_backoff_frame;
                   if (frame_diff < 0)
                     frame_diff = -frame_diff;
                   UE_mac_inst[module_idP].RA_backoff_cnt -= ((10*frame_diff) + (subframeP-UE_mac_inst[module_idP].RA_backoff_subframe));
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index adfc54c257505d2d24607a8c8e3caebacba834de..afe7ad30592d1103b3d3c0fe14ca7f71e340509e 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -367,8 +367,8 @@ void ue_send_sdu(module_id_t module_idP,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eN
           mac_rlc_data_ind(eNB_index,
               module_idP,
               frameP,
-              0,
-              RLC_MBMS_NO,
+              ENB_FLAG_NO,
+              MBMS_FLAG_NO,
               DCCH,
               (char *)payload_ptr,
               rx_lengths[i],
@@ -380,8 +380,8 @@ void ue_send_sdu(module_id_t module_idP,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eN
           mac_rlc_data_ind(eNB_index,
               module_idP,
               frameP,
-              0,
-              RLC_MBMS_NO,
+              ENB_FLAG_NO,
+              MBMS_FLAG_NO,
               DCCH1,
               (char *)payload_ptr,
               rx_lengths[i],
@@ -401,8 +401,8 @@ void ue_send_sdu(module_id_t module_idP,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eN
           mac_rlc_data_ind(eNB_index,
               module_idP,
               frameP,
-              0,
-              RLC_MBMS_NO,
+              ENB_FLAG_NO,
+              MBMS_FLAG_NO,
               DTCH,
               (char *)payload_ptr,
               rx_lengths[i],
@@ -517,8 +517,8 @@ void ue_send_mch_sdu(module_id_t module_idP, frame_t frameP, u8 *sdu, u16 sdu_le
                   0,
                   module_idP,
                   frameP,
-                  0,
-                  RLC_MBMS_YES,
+                  ENB_FLAG_NO,
+                  MBMS_FLAG_YES,
                   MTCH + (maxDRB + 3),
                   (char *)payload_ptr,
                   rx_lengths[i],
@@ -1080,14 +1080,14 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
 
   if (UE_mac_inst[module_idP].scheduling_info.LCID_status[DCCH] == LCID_NOT_EMPTY) {
 
-      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,0,RLC_MBMS_NO,
+      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
           DCCH,
           (buflen-dcch_header_len-bsr_len-phr_len));
       LOG_D(MAC, "[UE %d] Frame %d : UL-DCCH -> ULSCH, RRC message has %d bytes to "
           "send (Transport Block size %d, mac header len %d)\n",
           module_idP,frameP, rlc_status.bytes_in_buffer,buflen,dcch_header_len);
 
-      sdu_lengths[0] += mac_rlc_data_req(0, module_idP,frameP,0, RLC_MBMS_NO,
+      sdu_lengths[0] += mac_rlc_data_req(0, module_idP,frameP,ENB_FLAG_NO, MBMS_FLAG_NO,
           DCCH,
           (char *)&ulsch_buff[sdu_lengths[0]]);
 
@@ -1106,7 +1106,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
   // DCCH1
   if (UE_mac_inst[module_idP].scheduling_info.LCID_status[DCCH1] == LCID_NOT_EMPTY) {
 
-      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,0,RLC_MBMS_NO,
+      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
           DCCH1,
           (buflen-bsr_len-phr_len-dcch_header_len-dcch1_header_len-sdu_length_total));
 
@@ -1114,7 +1114,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
           " send (Transport Block size %d, mac header len %d)\n",
           module_idP,frameP, rlc_status.bytes_in_buffer,buflen,dcch1_header_len);
 
-      sdu_lengths[num_sdus] = mac_rlc_data_req(0, module_idP,frameP,0,RLC_MBMS_NO,
+      sdu_lengths[num_sdus] = mac_rlc_data_req(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
           DCCH1,
           (char *)&ulsch_buff[sdu_lengths[0]]);
       sdu_length_total += sdu_lengths[num_sdus];
@@ -1140,7 +1140,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
     else 
       dtch_header_len = 2;//sizeof(SCH_SUBHEADER_SHORT);
        */
-      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,0,RLC_MBMS_NO,
+      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
           DTCH,
           buflen-bsr_len-phr_len-dcch_header_len-dcch1_header_len-dtch_header_len-sdu_length_total);
 
@@ -1148,7 +1148,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
           module_idP,frameP, rlc_status.bytes_in_buffer,buflen,dtch_header_len,
           UE_mac_inst[module_idP].scheduling_info.BSR_bytes[DTCH]);
 
-      sdu_lengths[num_sdus] = mac_rlc_data_req(0, module_idP,frameP, 0, RLC_MBMS_NO,
+      sdu_lengths[num_sdus] = mac_rlc_data_req(0, module_idP,frameP, ENB_FLAG_NO, MBMS_FLAG_NO,
           DTCH,
           (char *)&ulsch_buff[sdu_length_total]);
 
@@ -1586,10 +1586,10 @@ u8 get_bsr_len (module_id_t module_idP, u16 buflen) {
 }
 
 
-int  update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid, u8 lcg_id){
+boolean_t  update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid, u8 lcg_id){
 
   mac_rlc_status_resp_t rlc_status;
-  u8 sr_pending = 0;
+  boolean_t sr_pending = FALSE;
   if ((lcg_id < 0) || (lcg_id > MAX_NUM_LCGID) )
     return sr_pending;
   // fixme: need a better way to reset 
@@ -1599,11 +1599,11 @@ int  update_bsr(module_id_t module_idP, frame_t frameP, u8 lcid, u8 lcg_id){
   }
   //  for (lcid =0 ; lcid < MAX_NUM_LCID; lcid++) {
   if (UE_mac_inst[module_idP].scheduling_info.LCGID[lcid] == lcg_id) {
-      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,0,RLC_MBMS_NO,
+      rlc_status = mac_rlc_status_ind(0, module_idP,frameP,ENB_FLAG_NO,MBMS_FLAG_NO,
           lcid,
           0);
       if (rlc_status.bytes_in_buffer > 0 ) {
-          sr_pending = 1;
+          sr_pending = TRUE;
           UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = LCID_NOT_EMPTY;
           UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id] += locate (BSR_TABLE,BSR_TABLE_SIZE, rlc_status.bytes_in_buffer);
           UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id] += rlc_status.bytes_in_buffer;
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 00297d498331d9575d431d0f7bde82516a84812d..8f427b47a41a322feb5c054f6214d9273b1d8bca 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -76,7 +76,7 @@ extern int otg_rx_pkt( int src, int dst, int ctime, char *buffer_tx, unsigned in
  * this mem_block_t to be dissected for testing purposes. For further details see test
  * code at targets/TEST/PDCP/test_pdcp.c:test_pdcp_data_req()
  */
-BOOL pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, rb_id_t rb_idP, mui_t muiP, u32 confirmP,
+boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, rb_id_t rb_idP, mui_t muiP, u32 confirmP,
     sdu_size_t sdu_buffer_sizeP, unsigned char* sdu_buffer_pP, u8 modeP)
 {
   //-----------------------------------------------------------------------------
@@ -131,7 +131,7 @@ BOOL pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t fram
       pdcp_pdu_p = get_free_mem_block(sdu_buffer_sizeP);
       if (pdcp_pdu_p != NULL) {
           memcpy(&pdcp_pdu_p->data[0], sdu_buffer_pP, sdu_buffer_sizeP);
-          rlc_status = rlc_data_req(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, RLC_MBMS_YES, rb_idP, muiP, confirmP, sdu_buffer_sizeP, pdcp_pdu_p);
+          rlc_status = rlc_data_req(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, MBMS_FLAG_YES, rb_idP, muiP, confirmP, sdu_buffer_sizeP, pdcp_pdu_p);
       } else {
         rlc_status = RLC_OP_STATUS_OUT_OF_RESSOURCES;
 #if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
@@ -291,8 +291,8 @@ BOOL pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t fram
 }
 
 
-BOOL pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, u8_t MBMS_flagP, rb_id_t rb_idP, sdu_size_t sdu_buffer_sizeP, \
-    mem_block_t* sdu_buffer_pP, u8 is_data_planeP)
+boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, MBMS_flag_t MBMS_flagP, rb_id_t rb_idP, sdu_size_t sdu_buffer_sizeP, \
+    mem_block_t* sdu_buffer_pP, boolean_t is_data_planeP)
 {
   //-----------------------------------------------------------------------------
   pdcp_t      *pdcp_p          = NULL;
@@ -300,7 +300,7 @@ BOOL pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t fram
   mem_block_t *new_sdu_p       = NULL;
   u8           pdcp_header_len = 0;
   u8           pdcp_tailer_len = 0;
-  u16          sequence_number = 0;
+  pdcp_sn_t    sequence_number = 0;
   u8           payload_offset  = 0;
 
   AssertFatal (enb_mod_idP >= oai_emulation.info.first_enb_local,
@@ -605,7 +605,7 @@ void pdcp_run (frame_t frameP, eNB_flag_t  enb_flagP, module_id_t ue_mod_idP, mo
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT);
 }
 
-BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
+boolean_t rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
     module_id_t               ue_mod_idP,
     frame_t              frameP,
     eNB_flag_t           enb_flagP,
@@ -625,7 +625,7 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
   long int        lc_id          = 0;
   long int        srb_id         = 0;
   long int        mch_id         = 0;
-  rlc_mode_t      rlc_type       = RLC_NONE;
+  rlc_mode_t      rlc_type       = RLC_MODE_NONE;
   DRB_Identity_t  drb_id         = 0;
   DRB_Identity_t *pdrb_id_p      = NULL;
   u8              drb_sn         = 0;
@@ -637,7 +637,6 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
   SRB_ToAddMod_t *srb_toaddmod_p = NULL;
   DRB_ToAddMod_t *drb_toaddmod_p = NULL;
   pdcp_t         *pdcp_p         = NULL;
-  module_id_t     module_id      = -1;
 
 #ifdef Rel10
   int i,j;
@@ -646,9 +645,9 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
 #endif
 
   if (enb_flagP == 0) {
-      LOG_D(PDCP, "[UE %d] CONFIG REQ ASN1 for eNB %d\n", ue_mod_idP, enb_mod_idP);
+      LOG_D(PDCP, "[UE %u] CONFIG REQ ASN1 for eNB %u\n", ue_mod_idP, enb_mod_idP);
   } else {
-      LOG_D(PDCP, "[eNB %d] CONFIG REQ ASN1 for UE %d\n", enb_mod_idP, ue_mod_idP);
+      LOG_D(PDCP, "[eNB %u] CONFIG REQ ASN1 for UE %u\n", enb_mod_idP, ue_mod_idP);
   }
   // srb2add_list does not define pdcp config, we use rlc info to setup the pdcp dcch0 and dcch1 channels
 
@@ -784,8 +783,8 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
                 // set the applicable profile
                 break;
               default:
-                LOG_W(PDCP,"[MOD_id %d][RB %d] unknown drb_toaddmod->PDCP_Config->headerCompression->present \n",
-                    module_id, drb_id);
+                LOG_W(PDCP,"[MOD_id %u/%u][RB %u] unknown drb_toaddmod->PDCP_Config->headerCompression->present \n",
+                    enb_mod_idP, ue_mod_idP, drb_id);
                 break;
               }
               pdcp_config_req_asn1 (pdcp_p,
@@ -850,14 +849,14 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
 
               // can set the mch_id = i
               if (enb_flagP) {
-                rb_id =  (mch_id * maxSessionPerPMCH ) + lc_id;
-                if (pdcp_mbms_array_eNB[enb_mod_idP][rb_id].instanciated_instance == module_id + 1)
+                rb_id =  (mch_id * maxSessionPerPMCH ) + lc_id; // 1
+                if (pdcp_mbms_array_eNB[enb_mod_idP][mch_id][lc_id].instanciated_instance == enb_mod_idP + 1)
                   action = ACTION_MBMS_MODIFY;
                 else
                   action = ACTION_MBMS_ADD;
               } else {
-                rb_id =  (mch_id * maxSessionPerPMCH ) + lc_id + (maxDRB + 3);
-                if (pdcp_mbms_array_ue[ue_mod_idP][rb_id].instanciated_instance == module_id + 1)
+                rb_id =  (mch_id * maxSessionPerPMCH ) + lc_id + (maxDRB + 3); // 15
+                if (pdcp_mbms_array_ue[ue_mod_idP][mch_id][lc_id].instanciated_instance == ue_mod_idP + 1)
                   action = ACTION_MBMS_MODIFY;
                 else
                   action = ACTION_MBMS_ADD;
@@ -865,24 +864,23 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
 
 
 
-              rlc_type = RLC_MODE_UM;
-              pdcp_config_req_asn1 (NULL,
+              pdcp_config_req_asn1 (NULL,  // unused for MBMS
                   enb_mod_idP,
                   ue_mod_idP,
                   frameP,
                   enb_flagP,
-                  rlc_type,
+                  RLC_MODE_NONE,
                   action,
                   lc_id,
                   mch_id,
                   rb_id,
-                  0, // set to deafult
-                  0,
-                  0,
-                  security_modeP,
-                  kRRCenc_pP,
-                  kRRCint_pP,
-                  kUPenc_pP);
+                  0,   // unused for MBMS
+                  0,   // unused for MBMS
+                  0,   // unused for MBMS
+                  0,   // unused for MBMS
+                  NULL,  // unused for MBMS
+                  NULL,  // unused for MBMS
+                  NULL); // unused for MBMS
           }
       }
   }
@@ -892,49 +890,49 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t               enb_mod_idP,
 
 }
 
-BOOL pdcp_config_req_asn1 (pdcp_t   *pdcp_pP,
+boolean_t pdcp_config_req_asn1 (pdcp_t   *pdcp_pP,
     module_id_t     enb_mod_idP,
     module_id_t     ue_mod_idP,
-    frame_t    frameP,
-    eNB_flag_t enb_flagP,
-    rlc_mode_t rlc_modeP,
-    u32        actionP,
-    u16        lc_idP,
-    u16        mch_idP,
-    rb_id_t    rb_idP,
-    u8         rb_snP,
-    u8         rb_reportP,
-    u16        header_compression_profileP,
-    u8         security_modeP,
-    u8        *kRRCenc_pP,
-    u8        *kRRCint_pP,
-    u8        *kUPenc_pP)
+    frame_t         frameP,
+    eNB_flag_t      enb_flagP,
+    rlc_mode_t      rlc_modeP,
+    u32             actionP,
+    u16             lc_idP,
+    u16             mch_idP,
+    rb_id_t         rb_idP,
+    u8              rb_snP,
+    u8              rb_reportP,
+    u16             header_compression_profileP,
+    u8              security_modeP,
+    u8             *kRRCenc_pP,
+    u8             *kRRCint_pP,
+    u8             *kUPenc_pP)
 {
 
   switch (actionP) {
   case ACTION_ADD:
     DevAssert(pdcp_pP != NULL);
-    pdcp_pP->instanciated_instance = 1;
-    pdcp_pP->is_ue = (enb_flagP == 0) ? 1 : 0;
-    pdcp_pP->lcid = lc_idP;
+    pdcp_pP->instanciated_instance      = 1;
+    pdcp_pP->is_ue                      = (enb_flagP == 0) ? 1 : 0;
+    pdcp_pP->lcid                       = lc_idP;
     pdcp_pP->header_compression_profile = header_compression_profileP;
-    pdcp_pP->status_report = rb_reportP;
+    pdcp_pP->status_report              = rb_reportP;
 
     if (rb_snP == PDCP_Config__rlc_UM__pdcp_SN_Size_len7bits) {
         pdcp_pP->seq_num_size = 7;
     } else if (rb_snP == PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits) {
-        pdcp_pP->seq_num_size=12;
+        pdcp_pP->seq_num_size = 12;
     } else {
-        pdcp_pP->seq_num_size=5;
+        pdcp_pP->seq_num_size = 5;
     }
 
-    pdcp_pP->rlc_mode = rlc_modeP;
-    pdcp_pP->next_pdcp_tx_sn = 0;
-    pdcp_pP->next_pdcp_rx_sn = 0;
-    pdcp_pP->tx_hfn = 0;
-    pdcp_pP->rx_hfn = 0;
+    pdcp_pP->rlc_mode                  = rlc_modeP;
+    pdcp_pP->next_pdcp_tx_sn           = 0;
+    pdcp_pP->next_pdcp_rx_sn           = 0;
+    pdcp_pP->tx_hfn                    = 0;
+    pdcp_pP->rx_hfn                    = 0;
     pdcp_pP->last_submitted_pdcp_rx_sn = 4095;
-    pdcp_pP->first_missing_pdu = -1;
+    pdcp_pP->first_missing_pdu         = -1;
 
     if (enb_flagP == 0) {
         LOG_I(PDCP, "[UE %d] Config request : Action ADD for eNB %d: Frame %d LCID %d (rb id %d) "
@@ -995,7 +993,7 @@ BOOL pdcp_config_req_asn1 (pdcp_t   *pdcp_pP,
     pdcp_pP->cipheringAlgorithm = 0xff;
     pdcp_pP->integrityProtAlgorithm = 0xff;
     pdcp_pP->status_report = 0;
-    pdcp_pP->rlc_mode = RLC_NONE;
+    pdcp_pP->rlc_mode = RLC_MODE_NONE;
     pdcp_pP->next_pdcp_tx_sn = 0;
     pdcp_pP->next_pdcp_rx_sn = 0;
     pdcp_pP->tx_hfn = 0;
@@ -1023,6 +1021,7 @@ BOOL pdcp_config_req_asn1 (pdcp_t   *pdcp_pP,
         free(pdcp_pP->kRRCenc);
     }
     break;
+#if defined(Rel10)
   case ACTION_MBMS_ADD:
   case ACTION_MBMS_MODIFY:
     if (enb_flagP == 0) {
@@ -1033,17 +1032,14 @@ BOOL pdcp_config_req_asn1 (pdcp_t   *pdcp_pP,
             enb_mod_idP, ue_mod_idP, actionP == ACTION_MBMS_ADD ? "ACTION_MBMS_ADD" : "ACTION_MBMS_MODIFY", frameP, mch_idP, lc_idP, rb_idP);
     }
     if (enb_flagP == 1) {
-        pdcp_mbms_array_eNB[enb_mod_idP][rb_idP].instanciated_instance = 1 ;
-        pdcp_mbms_array_eNB[enb_mod_idP][rb_idP].service_id = mch_idP;
-        pdcp_mbms_array_eNB[enb_mod_idP][rb_idP].session_id = lc_idP;
-        pdcp_mbms_array_eNB[enb_mod_idP][rb_idP].rb_id = rb_idP;
+        pdcp_mbms_array_eNB[enb_mod_idP][mch_idP][lc_idP].instanciated_instance = 1 ;
+        pdcp_mbms_array_eNB[enb_mod_idP][mch_idP][lc_idP].rb_id = rb_idP;
     } else {
-        pdcp_mbms_array_eNB[ue_mod_idP][rb_idP].instanciated_instance = 1 ;
-        pdcp_mbms_array_eNB[ue_mod_idP][rb_idP].service_id = mch_idP;
-        pdcp_mbms_array_eNB[ue_mod_idP][rb_idP].session_id = lc_idP;
-        pdcp_mbms_array_eNB[ue_mod_idP][rb_idP].rb_id = rb_idP;
+        pdcp_mbms_array_eNB[ue_mod_idP][mch_idP][lc_idP].instanciated_instance = 1 ;
+        pdcp_mbms_array_eNB[ue_mod_idP][mch_idP][lc_idP].rb_id = rb_idP;
     }
     break;
+#endif
   case ACTION_SET_SECURITY_MODE:
     pdcp_config_set_security(pdcp_pP, enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_idP, lc_idP, security_modeP, kRRCenc_pP, kRRCint_pP, kUPenc_pP);
     break;
@@ -1210,9 +1206,13 @@ void pdcp_module_cleanup (void)
 void pdcp_layer_init(void)
 {
   //-----------------------------------------------------------------------------
-  module_id_t  instance, instance2;
-  rb_id_t rb_id;
-  int     j;
+  module_id_t       instance;
+  module_id_t       instance2;
+  rb_id_t           rb_id;
+#if defined(Rel10)
+  mbms_session_id_t session_id;
+  mbms_service_id_t service_id;
+#endif
   /*
    * Initialize SDU list
    */
@@ -1222,9 +1222,13 @@ void pdcp_layer_init(void)
       for (rb_id = 0; rb_id < NB_RB_MAX; rb_id++) {
           memset(&pdcp_array_ue[instance][rb_id], 0, sizeof(pdcp_t));
       }
-      for (j = 0; j < 16*29; j++) {
-          memset(&pdcp_mbms_array_ue[instance][j], 0, sizeof(pdcp_mbms_t));
+#if defined(Rel10)
+      for (service_id = 0; service_id < maxServiceCount; service_id++) {
+          for (session_id = 0; session_id < maxSessionPerPMCH; session_id++) {
+              memset(&pdcp_mbms_array_ue[instance][service_id][session_id], 0, sizeof(pdcp_mbms_t));
+          }
       }
+#endif
   }
   for (instance = 0; instance < NUMBER_OF_eNB_MAX; instance++) {
       for (instance2 = 0; instance2 < NUMBER_OF_UE_MAX; instance2++) {
@@ -1232,9 +1236,13 @@ void pdcp_layer_init(void)
               memset(&pdcp_array_eNB[instance][instance2][rb_id], 0, sizeof(pdcp_t));
           }
       }
-      for (j = 0; j < 16*29; j++) {
-          memset(&pdcp_mbms_array_eNB[instance][j], 0, sizeof(pdcp_mbms_t));
+#if defined(Rel10)
+      for (service_id = 0; service_id < maxServiceCount; service_id++) {
+          for (session_id = 0; session_id < maxSessionPerPMCH; session_id++) {
+              memset(&pdcp_mbms_array_eNB[instance][service_id][session_id], 0, sizeof(pdcp_mbms_t));
+          }
       }
+#endif
   }
 
   LOG_I(PDCP, "PDCP layer has been initialized\n");
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index 54d9e13255b2bb2f422566e2e838bf3ee8672b3c..4393438cf6b89a52d57e31ba99f2807879896f46 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -28,7 +28,7 @@
 *******************************************************************************/
 
 /*! \file pdcp.c
-* \brief pdcp interface with RLC
+* \brief pdcp interface with RLC, RRC
 * \author  Lionel GAUTHIER and Navid Nikaein
 * \date 2009-2012
 * \version 1.0
@@ -82,23 +82,16 @@
 #include "PMCH-InfoList-r9.h"
 #endif
 
-#ifndef FALSE
-#define FALSE (0x00)
-#endif
-#ifndef TRUE
-#define TRUE  !(FALSE)
-#endif
 
-extern pthread_t pdcp_thread;
-extern pthread_attr_t pdcp_thread_attr;
+extern pthread_t       pdcp_thread;
+extern pthread_attr_t  pdcp_thread_attr;
 extern pthread_mutex_t pdcp_mutex;
-extern pthread_cond_t pdcp_cond;
-extern int pdcp_instance_cnt;
+extern pthread_cond_t  pdcp_cond;
+extern int             pdcp_instance_cnt;
 
 int init_pdcp_thread(void);
 void cleanup_pdcp_thread(void);
 
-typedef unsigned char BOOL;
 
 public_pdcp(unsigned int Pdcp_stats_tx[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_MAX]);
 public_pdcp(unsigned int Pdcp_stats_tx_bytes[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_MAX]);
@@ -110,13 +103,13 @@ public_pdcp(unsigned int Pdcp_stats_rx_bytes_last[NB_MODULES_MAX][NB_CNX_CH][NB_
 public_pdcp(unsigned int Pdcp_stats_rx_rate[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_MAX]);
 
 typedef struct pdcp_t {
-  BOOL instanciated_instance;
-  u16  header_compression_profile;
+  boolean_t instanciated_instance;
+  u16       header_compression_profile;
 
   /* SR: added this flag to distinguish UE/eNB instance as pdcp_run for virtual
    * mode can receive data on NETLINK for eNB while eNB_flag = 0 and for UE when eNB_flag = 1
    */
-  u8 is_ue;
+  boolean_t is_ue;
 
   /* Configured security algorithms */
   u8 cipheringAlgorithm;
@@ -133,27 +126,27 @@ typedef struct pdcp_t {
 
   u8 security_activated;
 
-  u8 rlc_mode;
+  rlc_mode_t rlc_mode;
   u8 status_report;
   u8 seq_num_size;
 
-  u8 lcid;
+  logical_chan_id_t lcid;
   /*
    * Sequence number state variables
    *
    * TX and RX window
    */
-  u16  next_pdcp_tx_sn;
-  u16  next_pdcp_rx_sn;
+  pdcp_sn_t next_pdcp_tx_sn;
+  pdcp_sn_t next_pdcp_rx_sn;
   /*
    * TX and RX Hyper Frame Numbers
    */
-  u16  tx_hfn;
-  u16  rx_hfn;
+  pdcp_hfn_t tx_hfn;
+  pdcp_hfn_t rx_hfn;
   /*
    * SN of the last PDCP SDU delivered to upper layers
    */
-  u16  last_submitted_pdcp_rx_sn;
+  pdcp_sn_t  last_submitted_pdcp_rx_sn;
 
   /*
    * Following array is used as a bitmap holding missing sequence
@@ -168,15 +161,12 @@ typedef struct pdcp_t {
   short int first_missing_pdu;
 } pdcp_t;
 
+#if defined(Rel10)
 typedef struct pdcp_mbms_t {
-  BOOL instanciated_instance;
-
-  uint16_t service_id;
-  uint32_t session_id; // lcid
-
-  uint16_t rb_id;
-
+  boolean_t instanciated_instance;
+  rb_id_t   rb_id;
 } pdcp_mbms_t;
+#endif
 /*
  * Following symbolic constant alters the behaviour of PDCP
  * and makes it linked to PDCP test code under targets/TEST/PDCP/
@@ -186,9 +176,10 @@ typedef struct pdcp_mbms_t {
  * under targets/TEST/PDCP/
  */
 
-/*! \fn BOOL pdcp_data_req(module_id_t, u32_t, u8_t, rb_id_t, sdu_size_t, unsigned char*)
+/*! \fn boolean_t pdcp_data_req(module_id_t, u32_t, u8_t, rb_id_t, sdu_size_t, unsigned char*)
 * \brief This functions handles data transfer requests coming either from RRC or from IP
-* \param[in] module_id Module ID
+* \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
 * \param[in] frame Frame number
 * \param[in] Shows if relevant PDCP entity is part of an eNB or a UE
 * \param[in] rab_id Radio Bearer ID
@@ -201,12 +192,13 @@ typedef struct pdcp_mbms_t {
 * \note None
 * @ingroup _pdcp
 */
-public_pdcp(BOOL pdcp_data_req(module_id_t eNB_id, module_id_t UE_id, frame_t frame, eNB_flag_t eNB_flag, rb_id_t rb_id, mui_t muiP, u32 confirmP, \
+public_pdcp(boolean_t pdcp_data_req(module_id_t eNB_id, module_id_t UE_id, frame_t frame, eNB_flag_t eNB_flag, rb_id_t rb_id, mui_t muiP, u32 confirmP, \
     sdu_size_t sdu_buffer_size, unsigned char* sdu_buffer, u8 mode));
 
-/*! \fn BOOL pdcp_data_ind(module_id_t, module_id_t, u32_t, u8_t, u8_t, rb_id_t, sdu_size_t, unsigned char*)
+/*! \fn boolean_t pdcp_data_ind(module_id_t, module_id_t, frame_t, eNB_flag_t, MBMS_flag_t, rb_id_t, sdu_size_t, mem_block_t*, boolean_t)
 * \brief This functions handles data transfer indications coming from RLC
-* \param[in] module_id Module ID
+* \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
 * \param[in] frame Frame number
 * \param[in] Shows if relevant PDCP entity is part of an eNB or a UE
 * \param[in] Tells if MBMS traffic
@@ -218,16 +210,18 @@ public_pdcp(BOOL pdcp_data_req(module_id_t eNB_id, module_id_t UE_id, frame_t fr
 * \note None
 * @ingroup _pdcp
 */
-public_pdcp(BOOL pdcp_data_ind(module_id_t eNB_id, module_id_t UE_id, frame_t frame, eNB_flag_t eNB_flag, u8_t MBMS_flagP, rb_id_t rb_id, sdu_size_t sdu_buffer_size,
-                   mem_block_t* sdu_buffer, u8 is_data_plane));
+public_pdcp(boolean_t pdcp_data_ind(module_id_t eNB_id, module_id_t UE_id, frame_t frame, eNB_flag_t eNB_flag, MBMS_flag_t MBMS_flagP, rb_id_t rb_id, sdu_size_t sdu_buffer_size,
+                   mem_block_t* sdu_buffer, boolean_t is_data_plane));
 
-/*! \fn void rrc_pdcp_config_req(module_id_t, rb_id_t,u8)
+/*! \fn void rrc_pdcp_config_req(module_id_t , module_id_t ,frame_t,eNB_flag_t,u32,rb_id_t,u8)
 * \brief This functions initializes relevant PDCP entity
-* \param[in] module_id Module ID of relevant PDCP entity
-* \param[in] frame frame counter (TTI)
-* \param[in] eNB_flag flag indicating the node type
-* \param[in] action flag for action: add, remove , modify
-* \param[in] rab_id Radio Bearer ID of relevant PDCP entity
+* \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
+* \param[in] frameP frame counter (TTI)
+* \param[in] eNB_flagP flag indicating the node type
+* \param[in] actionP flag for action: add, remove , modify
+* \param[in] rb_idP Radio Bearer ID of relevant PDCP entity
+* \param[in] security_modeP Radio Bearer ID of relevant PDCP entity
 * \return none
 * \note None
 * @ingroup _pdcp
@@ -242,7 +236,8 @@ public_pdcp(void rrc_pdcp_config_req (module_id_t enb_idP,
 
 /*! \fn bool rrc_pdcp_config_asn1_req (module_id_t module_id, frame_t frame, eNB_flag_t eNB_flag, SRB_ToAddModList_t* srb2add_list, DRB_ToAddModList_t* drb2add_list, DRB_ToReleaseList_t*  drb2release_list)
 * \brief  Function for RRC to configure a Radio Bearer.
-* \param[in]  module_id         Virtualized module identifier.
+* \param[in]  enb_mod_idP        Virtualized enb module identifier.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
 * \param[in]  frame              Frame index.
 * \param[in]  eNB_flag           Flag to indicate eNB (1) or UE (0)
 * \param[in]  index             index of UE or eNB depending on the eNB_flag
@@ -256,7 +251,7 @@ public_pdcp(void rrc_pdcp_config_req (module_id_t enb_idP,
 * \return     A status about the processing, OK or error code.
 */
 public_pdcp(
-BOOL rrc_pdcp_config_asn1_req (module_id_t          eNB_idP,
+boolean_t rrc_pdcp_config_asn1_req (module_id_t          eNB_idP,
                                module_id_t          ue_idP,
                                frame_t              frameP,
                                eNB_flag_t           eNB_flagP,
@@ -272,9 +267,11 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t          eNB_idP,
 #endif
                                ));
 
-/*! \fn BOOL pdcp_config_req_asn1 (module_id_t module_id, frame_t frame, eNB_flag_t eNB_flag, u32  action, rb_id_t rb_id, u8 rb_sn, u8 rb_report, u16 header_compression_profile, u8 security_mode)
+/*! \fn boolean_t pdcp_config_req_asn1 (module_id_t module_id, frame_t frame, eNB_flag_t eNB_flag, u32  action, rb_id_t rb_id, u8 rb_sn, u8 rb_report, u16 header_compression_profile, u8 security_mode)
 * \brief  Function for RRC to configure a Radio Bearer.
-* \param[in]  module_id         Virtualized module identifier.
+* \param[in]  pdcp_pP            Pointer on PDCP structure.
+* \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
 * \param[in]  frame              Frame index.
 * \param[in]  eNB_flag           Flag to indicate eNB (1) or UE (0)
 * \param[in]  action             add, remove, modify a RB
@@ -288,7 +285,7 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t          eNB_idP,
 * \param[in]  kUPenc             User-Plane encryption key
 * \return     A status about the processing, OK or error code.
 */
-public_pdcp(BOOL pdcp_config_req_asn1 (pdcp_t      *pdcp_pP,
+public_pdcp(boolean_t pdcp_config_req_asn1 (pdcp_t      *pdcp_pP,
                                        module_id_t enb_idP,
                                        module_id_t ue_idP,
                                        frame_t     frameP,
@@ -315,10 +312,12 @@ public_pdcp(BOOL pdcp_config_req_asn1 (pdcp_t      *pdcp_pP,
 */
 //public_pdcp(void rrc_pdcp_config_release (module_id_t, rb_id_t);)
 
-/*! \fn void pdcp_run(u32_t, u8_t)
+/*! \fn void pdcp_run(frame_t, eNB_flag_t, module_id_t,module_id_t)
 * \brief Runs PDCP entity to let it handle incoming/outgoing SDUs
 * \param[in] frame Frame number
 * \param[in] eNB_flag Indicates if this PDCP entity belongs to an eNB or to a UE
+* \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
+* \param[in]  ue_mod_idP         Virtualized ue module identifier.
 * \return none
 * \note None
 * @ingroup _pdcp
@@ -372,7 +371,7 @@ struct pdcp_netlink_element_s {
  * into pdcp.missing_pdus for every missing PDU
  */
 typedef struct pdcp_missing_pdu_info_t {
-  u16 sequence_number;
+  pdcp_sn_t sequence_number;
 } pdcp_missing_pdu_info_t;
 #endif
 
@@ -387,8 +386,10 @@ typedef struct pdcp_missing_pdu_info_t {
 protected_pdcp(signed int             pdcp_2_nas_irq;)
 protected_pdcp(pdcp_t                 pdcp_array_ue[NUMBER_OF_UE_MAX][NB_RB_MAX];)
 protected_pdcp(pdcp_t                 pdcp_array_eNB[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][NB_RB_MAX];)
-public_pdcp(pdcp_mbms_t               pdcp_mbms_array_ue[NUMBER_OF_UE_MAX][16*29];) // MAX_SERVICEx MAX_SESSION
-public_pdcp(pdcp_mbms_t               pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][16*29];) // MAX_SERVICEx MAX_SESSION
+#if defined(Rel10)
+public_pdcp(pdcp_mbms_t               pdcp_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];)   // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
+public_pdcp(pdcp_mbms_t               pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
+#endif
 protected_pdcp(sdu_size_t             pdcp_output_sdu_bytes_to_write;)
 protected_pdcp(sdu_size_t             pdcp_output_header_bytes_to_write;)
 protected_pdcp(list_t                 pdcp_sdu_list;)
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
index 9873685e360db5f61f3c918fc7416b5441e1e94d..3b7f91c93476f15519ab24a778682026b42e0c4a 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
@@ -40,7 +40,7 @@
 #include "pdcp.h"
 #include "pdcp_primitives.h"
 
-extern BOOL util_mark_nth_bit_of_octet(u8_t* octet, u8_t index);
+extern boolean_t util_mark_nth_bit_of_octet(u8_t* octet, u8_t index);
 
 /*
  * Parses data/control field out of buffer of User Plane PDCP Data PDU with
@@ -129,7 +129,7 @@ u8 pdcp_get_sequence_number_of_pdu_with_SRB_sn(unsigned char* pdu_buffer)
  * @param pdu_buffer PDCP PDU buffer
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu_buffer, \
      pdcp_control_plane_data_pdu_header* pdu)
 {
   if (pdu_buffer == NULL || pdu == NULL)
@@ -150,7 +150,7 @@ BOOL pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu
  * @param pdu_buffer PDCP PDU buffer
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_buffer, \
      pdcp_user_plane_data_pdu_header_with_long_sn* pdu)
 {
   if (pdu_buffer == NULL || pdu == NULL)
@@ -182,7 +182,7 @@ BOOL pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_b
  * @param pdu A status report header
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_control_pdu_for_pdcp_status_report(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_control_pdu_for_pdcp_status_report(unsigned char* pdu_buffer, \
      u8 bitmap[512], pdcp_control_pdu_for_pdcp_status_report* pdu)
 {
   if (pdu_buffer == NULL || pdu == NULL)
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
index 9d5505e20b69868b9947df1b58ecab1f9e9db4eb..28b98a6f0f87aff7710fcafc0b19ad938d7c50ea 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
@@ -9,12 +9,6 @@
 #ifndef PDCP_PRIMITIVES_H
 #define PDCP_PRIMITIVES_H
 
-#ifndef TRUE
-  #define TRUE 0x01
-  #define FALSE 0x00
-  typedef unsigned char BOOL;
-#endif
-
 /*
  * 3GPP TS 36.323 V10.1.0 (2011-03)
  */
@@ -130,7 +124,7 @@ u8 pdcp_get_sequence_number_of_pdu_with_SRB_sn(unsigned char* pdu_buffer);
  * @param pdu_buffer PDCP PDU buffer
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu_buffer, \
 							      pdcp_control_plane_data_pdu_header* pdu);
 /*
  * Fills the incoming buffer with the fields of the header for long SN (RLC UM and AM)
@@ -138,7 +132,7 @@ BOOL pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(unsigned char* pdu
  * @param pdu_buffer PDCP PDU buffer
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_buffer, \
      pdcp_user_plane_data_pdu_header_with_long_sn* pdu);
 
 /*
@@ -150,7 +144,7 @@ BOOL pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(unsigned char* pdu_b
  * @param pdu A status report header
  * @return TRUE on success, FALSE otherwise
  */
-BOOL pdcp_serialize_control_pdu_for_pdcp_status_report(unsigned char* pdu_buffer, \
+boolean_t pdcp_serialize_control_pdu_for_pdcp_status_report(unsigned char* pdu_buffer, \
      u8 bitmap[512], pdcp_control_pdu_for_pdcp_status_report* pdu);
 
 int pdcp_netlink_dequeue_element(module_id_t enb_mod_idP, module_id_t ue_mod_idP, eNB_flag_t eNB_flagP,
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
index fc1c2cb214fd514694c63b123c4ffc69de95af13..27ca897452ff5b028be1a24dfba57af57cd26145 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
@@ -40,9 +40,9 @@
 /*
  * Initializes sequence numbering state
  * @param pdcp_entity The PDCP entity to be initialized
- * @return BOOL TRUE on success, FALSE otherwise
+ * @return boolean_t TRUE on success, FALSE otherwise
  */
-BOOL pdcp_init_seq_numbers(pdcp_t* pdcp_entity)
+boolean_t pdcp_init_seq_numbers(pdcp_t* pdcp_entity)
 {
   if (pdcp_entity == NULL)
     return FALSE;
@@ -64,7 +64,7 @@ BOOL pdcp_init_seq_numbers(pdcp_t* pdcp_entity)
   return TRUE;
 }
 
-BOOL pdcp_is_seq_num_size_valid(pdcp_t* pdcp_entity)
+boolean_t pdcp_is_seq_num_size_valid(pdcp_t* pdcp_entity)
 {
   if (pdcp_entity == NULL)
     return FALSE;
@@ -81,7 +81,7 @@ BOOL pdcp_is_seq_num_size_valid(pdcp_t* pdcp_entity)
 /**
  * Check if SN number is in the range according to SN size
  */
-BOOL pdcp_is_seq_num_valid(u16 seq_num, u8 seq_num_size)
+boolean_t pdcp_is_seq_num_valid(u16 seq_num, u8 seq_num_size)
 {
   if (seq_num >= 0 && seq_num <= pdcp_calculate_max_seq_num_for_given_size(seq_num_size))
     return TRUE;
@@ -121,7 +121,7 @@ u16 pdcp_get_next_tx_seq_number(pdcp_t* pdcp_entity)
   return pdcp_seq_num;
 }
 
-BOOL pdcp_advance_rx_window(pdcp_t* pdcp_entity)
+boolean_t pdcp_advance_rx_window(pdcp_t* pdcp_entity)
 {
   if (pdcp_is_seq_num_size_valid(pdcp_entity) == FALSE)
     return FALSE;
@@ -146,7 +146,7 @@ BOOL pdcp_advance_rx_window(pdcp_t* pdcp_entity)
  * @return 1 if SN is okay, 0 otherwise
  * XXX Reordering window should also be handled here
  */
-BOOL pdcp_is_rx_seq_number_valid(u16 seq_num, pdcp_t* pdcp_entity)
+boolean_t pdcp_is_rx_seq_number_valid(u16 seq_num, pdcp_t* pdcp_entity)
 {
   LOG_D(PDCP, "Incoming RX Seq # is %04d\n", seq_num);
 
@@ -187,7 +187,7 @@ BOOL pdcp_is_rx_seq_number_valid(u16 seq_num, pdcp_t* pdcp_entity)
   }
 }
 
-BOOL pdcp_mark_current_pdu_as_received(u16 seq_num, pdcp_t* pdcp_entity)
+boolean_t pdcp_mark_current_pdu_as_received(u16 seq_num, pdcp_t* pdcp_entity)
 {
   /*
    * Incoming sequence number and PDCP entity were already
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
index 19c949882cb0d5b8826cdf748715b9df64359873..dd76899455f8dee89d0201e4a7b68b225fba16b5 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
@@ -43,17 +43,17 @@
  * @param pdcp_entity The PDCP entity to be initialized
  * @return none
  */
-BOOL pdcp_init_seq_numbers(pdcp_t* pdcp_entity);
+boolean_t pdcp_init_seq_numbers(pdcp_t* pdcp_entity);
 /**
  * Checks if incoming PDCP entitiy pointer and relevant sequence number size is valid
  * @return TRUE (0x01) if it is valid, FALSE (0x00) otherwise
  */
-BOOL pdcp_is_seq_num_size_valid(pdcp_t* pdcp_entity);
+boolean_t pdcp_is_seq_num_size_valid(pdcp_t* pdcp_entity);
 /**
  * Check if SN number is in the range according to SN size
  * @return TRUE if it is valid, FALSE otherwise
  */
-BOOL pdcp_is_seq_num_valid(u16 seq_num, u8 seq_num_size);
+boolean_t pdcp_is_seq_num_valid(u16 seq_num, u8 seq_num_size);
 /**
  * Returns the maximum allowed sequence number value for given size of SN field
  * @return Max sequence number value
@@ -66,16 +66,16 @@ u16 pdcp_get_next_tx_seq_number(pdcp_t* pdcp_entity);
 /**
  * Advances the RX window state of given PDCP entity upon successfull receipt of a SDU
  */
-BOOL pdcp_advance_rx_window(pdcp_t* pdcp_entity);
+boolean_t pdcp_advance_rx_window(pdcp_t* pdcp_entity);
 /**
  * Checks if incoming PDU has a sequence number in accordance with the RX window
  * @return TRUE if it is valid, FALSE otherwise
  */
-BOOL pdcp_is_rx_seq_number_valid(u16 seq_num, pdcp_t* pdcp_entity);
+boolean_t pdcp_is_rx_seq_number_valid(u16 seq_num, pdcp_t* pdcp_entity);
 /**
 * Updates missing PDU bitmap with incoming sequence number
 * @return TRUE if successful, FALSE otherwise
 */
-BOOL pdcp_mark_current_pdu_as_received(u16 seq_num, pdcp_t* pdcp_entity);
+boolean_t pdcp_mark_current_pdu_as_received(u16 seq_num, pdcp_t* pdcp_entity);
 
 #endif
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
index 3cc41a16a3c19e2d3c370335adc75b6f170cf73d..ca06a3f45e2e3fb70f7249d6f2c749c7d646cec5 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
@@ -25,18 +25,18 @@
   Forums       : http://forums.eurecom.fsr/openairinterface
   Address      : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
 
-*******************************************************************************/
+ *******************************************************************************/
 
 /*! \file pdcp_thread.c
-* \brief
-* \author F. Kaltenberger
-* \date 2013
-* \version 0.1
-* \company Eurecom
-* \email: florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
+ * \brief
+ * \author F. Kaltenberger
+ * \date 2013
+ * \version 0.1
+ * \company Eurecom
+ * \email: florian.kaltenberger@eurecom.fr
+ * \note
+ * \warning
+ */
 #include <pthread.h>
 //#include <inttypes.h>
 
@@ -48,112 +48,108 @@
 #define OPENAIR_THREAD_STACK_SIZE    8192
 #define OPENAIR_THREAD_PRIORITY        255
 
-extern int oai_exit;
+extern int  oai_exit;
 extern char UE_flag;
 
-pthread_t pdcp_thread;
-pthread_attr_t pdcp_thread_attr;
+pthread_t       pdcp_thread;
+pthread_attr_t  pdcp_thread_attr;
 pthread_mutex_t pdcp_mutex;
-pthread_cond_t pdcp_cond;
-int pdcp_instance_cnt;
+pthread_cond_t  pdcp_cond;
+int             pdcp_instance_cnt;
 
 static void *pdcp_thread_main(void* param);
 
 static void *pdcp_thread_main(void* param) {
-
-  //u8 eNB_flag = *((u8*)param);
   u8 eNB_flag = !UE_flag;
 
   LOG_I(PDCP,"This is pdcp_thread eNB_flag = %d\n",eNB_flag);
 
   while (!oai_exit) {
 
-    if (pthread_mutex_lock(&pdcp_mutex) != 0) {
-        LOG_E(PDCP,"Error locking mutex.\n");
-    }
-    else {
-        while (pdcp_instance_cnt < 0) {
-            pthread_cond_wait(&pdcp_cond,&pdcp_mutex);
-        }
-        if (pthread_mutex_unlock(&pdcp_mutex) != 0) {	
-            LOG_E(PDCP,"Error unlocking mutex.\n");
-        }
-    }
-
-    if (oai_exit) break;
-
-    if (eNB_flag) {
-      pdcp_run(PHY_vars_eNB_g[0]->frame, eNB_flag, PHY_vars_eNB_g[0]->Mod_id, 0);
-      LOG_D(PDCP,"Calling pdcp_run (eNB) for frame %d\n",PHY_vars_eNB_g[0]->frame);
-    }
-    else  {
-      pdcp_run(PHY_vars_UE_g[0]->frame, eNB_flag, 0, PHY_vars_UE_g[0]->Mod_id);
-      LOG_D(PDCP,"Calling pdcp_run (UE) for frame %d\n",PHY_vars_UE_g[0]->frame);
-    }
-
-
-    if (pthread_mutex_lock(&pdcp_mutex) != 0) {
-      LOG_E(PDCP,"Error locking mutex.\n");
-    }
-    else {
-        pdcp_instance_cnt--;
-        if (pthread_mutex_unlock(&pdcp_mutex) != 0) {	
-	  LOG_E(PDCP,"Error unlocking mutex.\n");
-        }
-    }
+      if (pthread_mutex_lock(&pdcp_mutex) != 0) {
+          LOG_E(PDCP,"Error locking mutex.\n");
+      }
+      else {
+          while (pdcp_instance_cnt < 0) {
+              pthread_cond_wait(&pdcp_cond,&pdcp_mutex);
+          }
+          if (pthread_mutex_unlock(&pdcp_mutex) != 0) {
+              LOG_E(PDCP,"Error unlocking mutex.\n");
+          }
+      }
+
+      if (oai_exit) break;
+
+      if (eNB_flag) {
+          pdcp_run(PHY_vars_eNB_g[0]->frame, eNB_flag, PHY_vars_eNB_g[0]->Mod_id, 0);
+          LOG_D(PDCP,"Calling pdcp_run (eNB) for frame %d\n",PHY_vars_eNB_g[0]->frame);
+      }
+      else  {
+          pdcp_run(PHY_vars_UE_g[0]->frame, eNB_flag, 0, PHY_vars_UE_g[0]->Mod_id);
+          LOG_D(PDCP,"Calling pdcp_run (UE) for frame %d\n",PHY_vars_UE_g[0]->frame);
+      }
+
+      if (pthread_mutex_lock(&pdcp_mutex) != 0) {
+          LOG_E(PDCP,"Error locking mutex.\n");
+      }
+      else {
+          pdcp_instance_cnt--;
+          if (pthread_mutex_unlock(&pdcp_mutex) != 0) {
+              LOG_E(PDCP,"Error unlocking mutex.\n");
+          }
+      }
   }
   return(NULL);
 }
 
 
-
 int init_pdcp_thread(void) {
 
-    int error_code;
-    struct sched_param p;
+  int    error_code;
+  struct sched_param p;
+
+  pthread_attr_init (&pdcp_thread_attr);
+  pthread_attr_setstacksize(&pdcp_thread_attr,OPENAIR_THREAD_STACK_SIZE);
+  //attr_dlsch_threads.priority = 1;
 
-    pthread_attr_init (&pdcp_thread_attr);
-    pthread_attr_setstacksize(&pdcp_thread_attr,OPENAIR_THREAD_STACK_SIZE);
-    //attr_dlsch_threads.priority = 1;
-    
-    p.sched_priority = OPENAIR_THREAD_PRIORITY;
-    pthread_attr_setschedparam  (&pdcp_thread_attr, &p);
+  p.sched_priority = OPENAIR_THREAD_PRIORITY;
+  pthread_attr_setschedparam  (&pdcp_thread_attr, &p);
 #ifndef RTAI_ISNT_POSIX
-    pthread_attr_setschedpolicy (&pdcp_thread_attr, SCHED_FIFO);
+  pthread_attr_setschedpolicy (&pdcp_thread_attr, SCHED_FIFO);
 #endif
-    pthread_mutex_init(&pdcp_mutex,NULL);
-    pthread_cond_init(&pdcp_cond,NULL);
-
-    pdcp_instance_cnt = -1;
-    LOG_I(PDCP,"Allocating PDCP thread\n");
-    error_code = pthread_create(&pdcp_thread,
-				&pdcp_thread_attr,
-				pdcp_thread_main,
-				(void*)NULL);
-      
-    if (error_code!= 0) {
+  pthread_mutex_init(&pdcp_mutex,NULL);
+  pthread_cond_init(&pdcp_cond,NULL);
+
+  pdcp_instance_cnt = -1;
+  LOG_I(PDCP,"Allocating PDCP thread\n");
+  error_code = pthread_create(&pdcp_thread,
+      &pdcp_thread_attr,
+      pdcp_thread_main,
+      (void*)NULL);
+
+  if (error_code!= 0) {
       LOG_I(PDCP,"Could not allocate PDCP thread, error %d\n",error_code);
       return(error_code);
-    }
-    else {
+  }
+  else {
       LOG_I(PDCP,"Allocate PDCP thread successful\n");
-    }
-       
-    return(0);
+  }
+  return(0);
 }
 
+
 void cleanup_pdcp_thread(void) {
-  void *status;
+  void *status_p = NULL;
 
   LOG_I(PDCP,"Scheduling PDCP thread to exit\n");
-  
+
   pdcp_instance_cnt = 0;
   if (pthread_cond_signal(&pdcp_cond) != 0)
     LOG_I(PDCP,"ERROR pthread_cond_signal\n");
   else
     LOG_I(PDCP,"Signalled PDCP thread to exit\n");
 
-  pthread_join(pdcp_thread,&status);
+  pthread_join(pdcp_thread,&status_p);
   LOG_I(PDCP,"PDCP thread exited\n");
   pthread_cond_destroy(&pdcp_cond);
   pthread_mutex_destroy(&pdcp_mutex);
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
index 2fe2960e568870acdf161e7636965b171a614831..ff0ba5a80047a635944b59aa0d95359483b00465 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
@@ -131,7 +131,7 @@ void util_print_binary_representation(unsigned char* message, u8_t octet)
  * @param index Index of bit to be set
  * @return TRUE on success, FALSE otherwise
  */
-BOOL util_mark_nth_bit_of_octet(u8_t* octet, u8_t index)
+boolean_t util_mark_nth_bit_of_octet(u8_t* octet, u8_t index)
 {
   u8_t mask = 0x80;
 
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
index 8d136c18b70839362cef8017aba59900e7af4247..df3c036362fe303ca04b5644249dbea9bd39d8e3 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
@@ -76,6 +76,6 @@ void util_print_binary_representation(unsigned char* message, u8_t octet);
  * @param index Index
  * @return TRUE on success, FALSE otherwise
  */
-BOOL util_mark_nth_bit_of_octet(u8_t* octet, u8_t index);
+boolean_t util_mark_nth_bit_of_octet(u8_t* octet, u8_t index);
 
 #endif // PDCP_UTIL_H
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
index e5ba3575eaedd28edee5623b518b9824e882da70..8635e96f4477cdb4b83257c500072e7811bbb02f 100755
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
@@ -125,7 +125,7 @@ void rlc_am_send_sdu (rlc_am_entity_t *rlc_pP,frame_t frameP, eNB_flag_t eNB_fla
               rlc_pP->output_sdu_size_to_write,
               rlc_pP->output_sdu_in_construction);
 #else
-          rlc_data_ind (rlc_pP->enb_module_id, rlc_pP->ue_module_id, frameP, eNB_flagP, RLC_MBMS_NO, rlc_pP->rb_id, rlc_pP->output_sdu_size_to_write, rlc_pP->output_sdu_in_construction, rlc_pP->is_data_plane);
+          rlc_data_ind (rlc_pP->enb_module_id, rlc_pP->ue_module_id, frameP, eNB_flagP, MBMS_FLAG_NO, rlc_pP->rb_id, rlc_pP->output_sdu_size_to_write, rlc_pP->output_sdu_in_construction, rlc_pP->is_data_plane);
 #endif
           rlc_pP->output_sdu_in_construction = NULL;
       } else {
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
index fda4a636968cd508eb0d7bda82747537c42acc37..f1a11a51ed27ddcfd82ea8510aaf043afd718cc9 100755
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
@@ -64,7 +64,7 @@ rlc_tm_send_sdu (rlc_tm_entity_t *rlcP, u32_t frame, u8_t eNB_flag, u8_t error_i
 
         memcpy (&rlcP->output_sdu_in_construction->data[rlcP->output_sdu_size_to_write], srcP, length_in_bytes);
 
-        rlc_data_ind (rlcP->enb_module_id, rlcP->ue_module_id, frame, eNB_flag, RLC_MBMS_NO, rlcP->rb_id, length_in_bytes, rlcP->output_sdu_in_construction, rlcP->is_data_plane);
+        rlc_data_ind (rlcP->enb_module_id, rlcP->ue_module_id, frame, eNB_flag, MBMS_FLAG_NO, rlcP->rb_id, length_in_bytes, rlcP->output_sdu_in_construction, rlcP->is_data_plane);
         rlcP->output_sdu_in_construction = NULL;
     } else {
         msg ("[RLC_TM %p][SEND_SDU] ERROR  OUTPUT SDU IS NULL\n", rlcP);
@@ -182,7 +182,6 @@ rlc_tm_mac_data_indication (void *rlcP, u32_t frame, u8_t eNB_flag, struct mac_d
 {
 //-----------------------------------------------------------------------------
     rlc_tm_entity_t *l_rlc = (rlc_tm_entity_t *) rlcP;
-    mem_block_t     *tb;
 
     if (data_indP.data.nb_elements > 0) {
         LOG_D(RLC, "[RLC_TM][%s][MOD %02u/%02u][RB %d][FRAME %05d] MAC_DATA_IND %d TBs\n",
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
index 963123f0c2ef48458239df9fed18ebdaa03dcb98..ffd19b260fdba62936d9f804f4149961f2df89cf 100755
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
@@ -51,12 +51,12 @@ void config_req_rlc_um (frame_t         frameP,
                         rb_type_t       rb_typeP)
 {
   //-----------------------------------------------------------------------------
-  rlc_um_entity_t *rlc = NULL;
+  rlc_um_entity_t *rlc_p = NULL;
 
   if (eNB_flagP) {
-      rlc = &rlc_array_eNB[enb_module_idP][ue_module_idP][rb_idP].rlc.um;
+      rlc_p = &rlc_array_eNB[enb_module_idP][ue_module_idP][rb_idP].rlc.um;
   } else {
-      rlc = &rlc_array_ue[ue_module_idP][rb_idP].rlc.um;
+      rlc_p = &rlc_array_ue[ue_module_idP][rb_idP].rlc.um;
   }
   LOG_D(RLC, "[FRAME %05d][%s][RRC][MOD %u/%u][][--- CONFIG_REQ timer_reordering=%d sn_field_length=%d is_mXch=%d --->][RLC_UM][MOD %u/%u][RB %u]    \n",
       frame,
@@ -70,10 +70,10 @@ void config_req_rlc_um (frame_t         frameP,
           ue_module_idP,
           rb_idP);
 
-  rlc_um_init(rlc);
-  if (rlc_um_fsm_notify_event (rlc, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
-      rlc_um_set_debug_infos(rlc, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
-      rlc_um_configure(rlc,
+  rlc_um_init(rlc_p);
+  if (rlc_um_fsm_notify_event (rlc_p, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
+      rlc_um_set_debug_infos(rlc_p, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
+      rlc_um_configure(rlc_p,
           frame,
           config_um_pP->timer_reordering,
           config_um_pP->sn_field_length,
@@ -84,25 +84,38 @@ void config_req_rlc_um (frame_t         frameP,
 //-----------------------------------------------------------------------------
 u32_t t_Reordering_tab[T_Reordering_spare1] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,110,120,130,140,150,160,170,180,190,200};
 
-void config_req_rlc_um_asn1 (frame_t      frameP,
-                             eNB_flag_t   eNB_flagP,
-                             u8_t         mbms_flagP,
-                             module_id_t  enb_module_idP,
-                             module_id_t  ue_module_idP,
-                             UL_UM_RLC_t *ul_rlc_pP,
-                             DL_UM_RLC_t *dl_rlc_pP,
-                             rb_id_t      rb_idP,
-                             rb_type_t    rb_typeP)
+void config_req_rlc_um_asn1 (frame_t            frameP,
+                             eNB_flag_t         eNB_flagP,
+                             MBMS_flag_t        mbms_flagP,
+                             module_id_t        enb_module_idP,
+                             module_id_t        ue_module_idP,
+                             mbms_session_id_t  mbms_session_idP,
+                             mbms_service_id_t  mbms_service_idP,
+                             UL_UM_RLC_t       *ul_rlc_pP,
+                             DL_UM_RLC_t       *dl_rlc_pP,
+                             rb_id_t            rb_idP,
+                             rb_type_t          rb_typeP)
 {
   u32_t            ul_sn_FieldLength = 0;
   u32_t            dl_sn_FieldLength = 0;
   u32_t            t_Reordering;
-  rlc_um_entity_t *rlc               = NULL;
-
-  if (eNB_flagP) {
-      rlc = &rlc_array_eNB[enb_module_idP][ue_module_idP][rb_idP].rlc.um;
-  } else {
-      rlc = &rlc_array_ue[ue_module_idP][rb_idP].rlc.um;
+  rlc_um_entity_t *rlc_p               = NULL;
+#if defined(rel10)
+  if (mbms_flagP) {
+      if (eNB_flagP) {
+          rlc_p = &rlc_mbms_array_eNB[enb_module_idP][mbms_service_idP][mbms_session_idP].um;
+      } else {
+          rlc_p = &rlc_mbms_array_ue[ue_module_idP][mbms_service_idP][mbms_session_idP].um;
+      }
+  }
+  else
+#endif
+  {
+      if (eNB_flagP) {
+          rlc_p = &rlc_array_eNB[enb_module_idP][ue_module_idP][rb_idP].rlc.um;
+      } else {
+          rlc_p = &rlc_array_ue[ue_module_idP][rb_idP].rlc.um;
+      }
   }
 
   //-----------------------------------------------------------------------------
@@ -116,9 +129,9 @@ void config_req_rlc_um_asn1 (frame_t      frameP,
               ue_module_idP,
               rb_idP);
 
-  rlc_um_init(rlc);
-  if (rlc_um_fsm_notify_event (rlc, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
-      rlc_um_set_debug_infos(rlc, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
+  rlc_um_init(rlc_p);
+  if (rlc_um_fsm_notify_event (rlc_p, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
+      rlc_um_set_debug_infos(rlc_p, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
       if (ul_rlc_pP != NULL) {
           switch (ul_rlc_pP->sn_FieldLength) {
           case SN_FieldLength_size5:
@@ -130,10 +143,10 @@ void config_req_rlc_um_asn1 (frame_t      frameP,
           default:
             LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID Uplink sn_FieldLength %d, RLC NOT CONFIGURED\n",
                 frame,
-                (rlc->is_enb) ? "eNB" : "UE",
-                    rlc->enb_module_id,
-                    rlc->ue_module_id,
-                    rlc->rb_id,
+                (rlc_p->is_enb) ? "eNB" : "UE",
+                    rlc_p->enb_module_id,
+                    rlc_p->ue_module_id,
+                    rlc_p->rb_id,
                     ul_rlc_pP->sn_FieldLength);
             return;
           }
@@ -150,10 +163,10 @@ void config_req_rlc_um_asn1 (frame_t      frameP,
           default:
             LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID Downlink sn_FieldLength %d, RLC NOT CONFIGURED\n",
                 frame,
-                (rlc->is_enb) ? "eNB" : "UE",
-                    rlc->enb_module_id,
-                    rlc->ue_module_id,
-                    rlc->rb_id,
+                (rlc_p->is_enb) ? "eNB" : "UE",
+                    rlc_p->enb_module_id,
+                    rlc_p->ue_module_id,
+                    rlc_p->rb_id,
                     dl_rlc_pP->sn_FieldLength);
             return;
           }
@@ -162,23 +175,23 @@ void config_req_rlc_um_asn1 (frame_t      frameP,
           } else {
               LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID T_Reordering %d, RLC NOT CONFIGURED\n",
                   frame,
-                  (rlc->is_enb) ? "eNB" : "UE",
-                      rlc->enb_module_id,
-                      rlc->ue_module_id,
-                      rlc->rb_id,
+                  (rlc_p->is_enb) ? "eNB" : "UE",
+                      rlc_p->enb_module_id,
+                      rlc_p->ue_module_id,
+                      rlc_p->rb_id,
                       dl_rlc_pP->t_Reordering);
               return;
           }
       }
       if (eNB_flagP > 0) {
-          rlc_um_configure(rlc,
+          rlc_um_configure(rlc_p,
               frame,
               t_Reordering,
               ul_sn_FieldLength,
               dl_sn_FieldLength,
               mbms_flagP);
       } else {
-          rlc_um_configure(rlc,
+          rlc_um_configure(rlc_p,
               frame,
               t_Reordering,
               dl_sn_FieldLength,
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
index ec49a0a387b6b987adfb984f8ddd400c5b149590..7c3b0cc89db2ae3c8b92f6beffe5af5341182dac 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
@@ -88,19 +88,41 @@ typedef volatile struct {
 */
 public_rlc_um_control_primitives(   void config_req_rlc_um (frame_t frame, eNB_flag_t eNB_flagP, module_id_t enb_module_idP, module_id_t ue_module_idP, rlc_um_info_t * config_umP, rb_id_t rb_idP, rb_type_t rb_typeP);)
 
-/*! \fn void config_req_rlc_um_asn1 (frame_t frame, eNB_flag_t eNB_flagP, u8_t mbms_flagP, module_id_t enb_module_idP, module_id_t ue_module_idP, UL_UM_RLC_t* ul_rlcP, DL_UM_RLC_t* dl_rlcP, rb_id_t rb_idP, rb_type_t rb_typeP)
+/*! \fn void config_req_rlc_um_asn1 (frame_t frame,
+ *                                   eNB_flag_t eNB_flagP,
+ *                                   MBMS_flag_t mbms_flagP,
+ *                                   module_id_t enb_module_idP,
+ *                                   module_id_t ue_module_idP,
+ *                                   mbms_session_id_t  mbms_session_idP,
+                                     mbms_service_id_t  mbms_service_idP,
+                                     UL_UM_RLC_t* ul_rlcP,
+                                     DL_UM_RLC_t* dl_rlcP,
+                                     rb_id_t rb_idP,
+                                     rb_type_t rb_typeP)
 * \brief    Allocate memory for RLC UM instance, reset protocol variables, and set protocol parameters. After this configuration the RLC UM protocol instance will be in RLC_DATA_TRANSFER_READY_STATE state.
-* \param[in]  frame                     Frame index.
-* \param[in]  eNB_flag                  Flag to indicate eNB (1) or UE (0)
+* \param[in]  frameP                     Frame index.
+* \param[in]  eNB_flagP                  Flag to indicate eNB (1) or UE (0)
 * \param[in]  mbms_flagP                Flag to indicate if this RLC is configured for MBMS.
 * \param[in]  enb_module_idP            eNB Virtualized module identifier.
 * \param[in]  ue_module_idP             UE Virtualized module identifier.
+* \param[in]  mbms_session_idP          MBMS session id.
+* \param[in]  mbms_service_idP          MBMS service id.
 * \param[in]  ul_rlcP                   Configuration parameters for RLC UM UL instance.
 * \param[in]  dl_rlcP                   Configuration parameters for RLC UM DL instance.
 * \param[in]  rb_idP                    Radio bearer identifier.
 * \param[in]  rb_typeP                  Radio bearer type (Signalling or Data).
 */
-public_rlc_um_control_primitives(   void config_req_rlc_um_asn1 (frame_t frame, eNB_flag_t eNB_flagP, u8_t mbms_flagP, module_id_t enb_module_idP, module_id_t ue_module_idP, UL_UM_RLC_t* ul_rlcP, DL_UM_RLC_t* dl_rlcP, rb_id_t rb_idP, rb_type_t rb_typeP);)
+public_rlc_um_control_primitives(   void config_req_rlc_um_asn1 (frame_t            frameP,
+                                                                 eNB_flag_t         eNB_flagP,
+                                                                 MBMS_flag_t        mbms_flagP,
+                                                                 module_id_t        enb_module_idP,
+                                                                 module_id_t        ue_module_idP,
+                                                                 mbms_session_id_t  mbms_session_idP,
+                                                                 mbms_service_id_t  mbms_service_idP,
+                                                                 UL_UM_RLC_t       *ul_rlcP,
+                                                                 DL_UM_RLC_t       *dl_rlcP,
+                                                                 rb_id_t            rb_idP,
+                                                                 rb_type_t          rb_typeP);)
 
 /*! \fn void rlc_um_init (rlc_um_entity_t *rlcP)
 * \brief    Initialize a RLC UM protocol instance, initialize all variables, lists, allocate buffers for making this instance ready to be configured with protocol configuration parameters. After this initialization the RLC UM protocol instance will be in RLC_NULL_STATE state.
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
index 4899814000a861f9600c39d125f525b6b8d7bd9d..6da77cd65a44ae147d795a8da6ae10042d9d667f 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
@@ -886,7 +886,6 @@ inline signed int rlc_um_in_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_
 inline signed int rlc_um_in_reordering_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_sn_t snP) {
 //-----------------------------------------------------------------------------
     rlc_sn_t   modulus = (signed int)rlc_pP->vr_uh - rlc_pP->rx_um_window_size;
-    rlc_sn_t   sn = snP;
 
     snP           = (snP - modulus) % rlc_pP->rx_sn_modulo;
 
diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c
index 8ff2e65194f50b6c0449e4d16dcaabe51ce14b2e..471710ab08ca43e77e9c54342b4f5a8d00c3c49d 100644
--- a/openair2/LAYER2/RLC/rlc.c
+++ b/openair2/LAYER2/RLC/rlc.c
@@ -115,7 +115,7 @@ rlc_op_status_t rlc_stat_req     (
                   unsigned int* stat_timer_poll_retransmit_timed_out,
                   unsigned int* stat_timer_status_prohibit_timed_out) {
 //-----------------------------------------------------------------------------
-    rlc_mode_t             rlc_mode = RLC_NONE;
+    rlc_mode_t             rlc_mode = RLC_MODE_NONE;
     void                  *rlc_p      = NULL;
 
 #ifdef OAI_EMU
@@ -140,16 +140,16 @@ rlc_op_status_t rlc_stat_req     (
     if (eNB_flagP) {
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "enB RLC not configured rb id %u  module eNB id %u!\n", rb_idP, enb_mod_idP);
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm;
               break;
           default:
@@ -158,16 +158,16 @@ rlc_op_status_t rlc_stat_req     (
     } else {
         rlc_mode = rlc_array_ue[ue_mod_idP][rb_idP].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "UE RLC not configured rb id %u module ue id %u!\n", rb_idP, ue_mod_idP);
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm;
               break;
           default:
@@ -175,7 +175,7 @@ rlc_op_status_t rlc_stat_req     (
         }
     }
     switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
             *stat_tx_pdcp_sdu                     = 0;
             *stat_tx_pdcp_bytes                   = 0;
             *stat_tx_pdcp_sdu_discarded           = 0;
@@ -206,7 +206,7 @@ rlc_op_status_t rlc_stat_req     (
             return RLC_OP_STATUS_BAD_PARAMETER;
             break;
 
-        case RLC_AM:
+        case RLC_MODE_AM:
             rlc_am_stat_req((rlc_am_entity_t*)rlc_p,
                             stat_tx_pdcp_sdu,
                             stat_tx_pdcp_bytes,
@@ -238,7 +238,7 @@ rlc_op_status_t rlc_stat_req     (
                             return RLC_OP_STATUS_OK;
            break;
 
-       case RLC_UM:
+       case RLC_MODE_UM:
            *stat_tx_retransmit_pdu_by_status     = 0;
            *stat_tx_retransmit_bytes_by_status   = 0;
            *stat_tx_retransmit_pdu               = 0;
@@ -272,7 +272,7 @@ rlc_op_status_t rlc_stat_req     (
            return RLC_OP_STATUS_OK;
            break;
 
-       case RLC_TM:
+       case RLC_MODE_TM:
            *stat_tx_pdcp_sdu                     = 0;
            *stat_tx_pdcp_bytes                   = 0;
            *stat_tx_pdcp_sdu_discarded           = 0;
@@ -347,7 +347,7 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
                                   mem_block_t *sdu_pP) {
 //-----------------------------------------------------------------------------
   mem_block_t           *new_sdu_p    = NULL;
-  rlc_mode_t             rlc_mode     = RLC_NONE;
+  rlc_mode_t             rlc_mode     = RLC_MODE_NONE;
   void                  *rlc_p        = NULL;
 #ifdef Rel10
   rb_id_t                mbms_rb_id = 0;
@@ -398,16 +398,16 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
   if (eNB_flagP) {
       rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
       switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
             AssertFatal (0 , "enB RLC not configured rb id %u module %u!\n", rb_idP, enb_mod_idP);
             break;
-        case RLC_AM:
+        case RLC_MODE_AM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm;
             break;
         default:
@@ -416,16 +416,16 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
   } else {
       rlc_mode = rlc_array_ue[ue_mod_idP][rb_idP].mode;
       switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
             AssertFatal (0 , "UE RLC not configured rb id %u module %u!\n", rb_idP, ue_mod_idP);
             break;
-        case RLC_AM:
+        case RLC_MODE_AM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.am;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.um;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm;
             break;
         default:
@@ -447,18 +447,18 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
       LOG_D(RLC,"RLC_TYPE : %d ",rlc_mode);
 #endif
       switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               free_mem_block(sdu_pP);
-              LOG_E(RLC, "Received RLC_NONE as rlc_type for %s eNB id  %u, ue id %u, rb_id %u\n",
+              LOG_E(RLC, "Received RLC_MODE_NONE as rlc_type for %s eNB id  %u, ue id %u, rb_id %u\n",
                     (eNB_flagP) ? "eNB" : "UE",
                     enb_mod_idP,
                     ue_mod_idP,
                     rb_idP);
               return RLC_OP_STATUS_BAD_PARAMETER;
 
-          case RLC_AM:
+          case RLC_MODE_AM:
 #ifdef DEBUG_RLC_DATA_REQ
-              msg("RLC_AM\n");
+              msg("RLC_MODE_AM\n");
 #endif
               new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_am_data_req_alloc));
 
@@ -505,7 +505,7 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
               }
               break;
 
-          case RLC_UM:
+          case RLC_MODE_UM:
             new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_um_data_req_alloc));
 
               if (new_sdu_p != NULL) {
@@ -551,7 +551,7 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
               }
               break;
 
-          case RLC_TM:
+          case RLC_MODE_TM:
             new_sdu_p = get_free_mem_block (sdu_sizeP + sizeof (struct rlc_tm_data_req_alloc));
 
               if (new_sdu_p != NULL) {
@@ -692,7 +692,7 @@ rlc_op_status_t rlc_data_req     (module_id_t  enb_mod_idP,
 //-----------------------------------------------------------------------------
 void rlc_data_ind     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, rb_id_t rb_idP, sdu_size_t sdu_sizeP, mem_block_t* sdu_pP, boolean_t is_data_planeP) {
 //-----------------------------------------------------------------------------
-  rlc_mode_t             rlc_mode   = RLC_NONE;
+  rlc_mode_t             rlc_mode   = RLC_MODE_NONE;
 
   if (eNB_flagP) {
       rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
@@ -714,7 +714,9 @@ void rlc_data_ind     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
 
 
   switch (rlc_mode) {
-      case RLC_AM:
+      case RLC_MODE_NONE:
+        break;
+      case RLC_MODE_AM:
           LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
                    frame,
                    (eNB_flagP) ? "eNB" : "UE",
@@ -726,7 +728,7 @@ void rlc_data_ind     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
                    ue_mod_idP,
                    rb_idP);
           break;
-      case RLC_UM:
+      case RLC_MODE_UM:
           LOG_D(RLC, "[FRAME %5u][%s][RLC_UM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
                    frame,
                    (eNB_flagP) ? "eNB" : "UE",
@@ -738,7 +740,7 @@ void rlc_data_ind     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
                    ue_mod_idP,
                    rb_idP);
           break;
-      case RLC_TM:
+      case RLC_MODE_TM:
           LOG_D(RLC, "[FRAME %5u][%s][RLC_TM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
                  frame,
                  (eNB_flagP) ? "eNB" : "UE",
@@ -763,7 +765,7 @@ void rlc_data_conf     (module_id_t     enb_mod_idP,
                         rlc_tx_status_t statusP,
                         boolean_t       is_data_planeP) {
 //-----------------------------------------------------------------------------
-    rlc_mode_t             rlc_mode   = RLC_NONE;
+    rlc_mode_t             rlc_mode   = RLC_MODE_NONE;
 
     if (eNB_flagP) {
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
@@ -774,7 +776,9 @@ void rlc_data_conf     (module_id_t     enb_mod_idP,
         if (rlc_rrc_data_conf != NULL) {
             LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED);
             switch (rlc_mode) {
-                case RLC_AM:
+                case RLC_MODE_NONE:
+                    break;
+                case RLC_MODE_AM:
                     LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
                             frame,
                             (eNB_flagP) ? "eNB" : "UE",
@@ -785,7 +789,7 @@ void rlc_data_conf     (module_id_t     enb_mod_idP,
                             ue_mod_idP,
                             muiP);
                     break;
-                case RLC_UM:
+                case RLC_MODE_UM:
                     LOG_D(RLC, "[FRAME %5u][%s][RLC_UM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
                             frame,
                             (eNB_flagP) ? "eNB" : "UE",
@@ -796,7 +800,7 @@ void rlc_data_conf     (module_id_t     enb_mod_idP,
                             ue_mod_idP,
                             muiP);
                     break;
-                case RLC_TM:
+                case RLC_MODE_TM:
                     LOG_D(RLC, "[FRAME %5u][%s][RLC_TM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
                             frame,
                             (eNB_flagP) ? "eNB" : "UE",
@@ -822,6 +826,10 @@ rlc_module_init (void)
    module_id_t  module_id1;
    module_id_t  module_id2;
    rb_id_t      rb_id;
+#if defined(Rel10)
+  mbms_session_id_t session_id;
+  mbms_service_id_t service_id;
+#endif
 
    LOG_D(RLC, "MODULE INIT\n");
    rlc_rrc_data_ind  = NULL;
@@ -832,18 +840,26 @@ rlc_module_init (void)
        for (k=0; k < RLC_MAX_LC; k++) {
            lcid2rbid_ue[module_id1][k] = RLC_RB_UNALLOCATED;
        }
-       for (k=0; k < 16*29; k++) {
-           memset(&rlc_mbms_array_ue[module_id1][k], 0, sizeof(rlc_mbms_t));
-       }
+#if defined(Rel10)
+      for (service_id = 0; service_id < maxServiceCount; service_id++) {
+          for (session_id = 0; session_id < maxSessionPerPMCH; session_id++) {
+              memset(&rlc_mbms_array_ue[module_id1][service_id][session_id], 0, sizeof(rlc_mbms_t));
+          }
+      }
+#endif
        for (rb_id=0; rb_id < NB_RB_MAX; rb_id++) {
            memset(&rlc_array_ue[module_id1][rb_id], 0, sizeof(rlc_t));
        }
    }
 
    for (module_id1=0; module_id1 < NUMBER_OF_eNB_MAX; module_id1++) {
-       for (k=0; k < 16*29; k++) {
-           memset(&rlc_mbms_array_eNB[module_id1][k], 0, sizeof(rlc_mbms_t));
-       }
+#if defined(Rel10)
+      for (service_id = 0; service_id < maxServiceCount; service_id++) {
+          for (session_id = 0; session_id < maxSessionPerPMCH; session_id++) {
+              memset(&rlc_mbms_array_eNB[module_id1][service_id][session_id], 0, sizeof(rlc_mbms_t));
+          }
+      }
+#endif
        for (module_id2=0; module_id2 < NUMBER_OF_UE_MAX; module_id2++) {
            for (rb_id=0; rb_id < NB_RB_MAX; rb_id++) {
                memset(&rlc_array_eNB[module_id1][module_id2][rb_id], 0, sizeof(rlc_t));
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index d8655c75578a4e4ca5486c1c8a64eb7c761237c6..b915c60565af38786c425639b354a9c15351789f 100755
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -108,13 +108,25 @@ Address      : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis
 #define  RLC_OP_STATUS_INTERNAL_ERROR    2
 #define  RLC_OP_STATUS_OUT_OF_RESSOURCES 3
 
-#define  RLC_SDU_CONFIRM_YES   1
-#define  RLC_SDU_CONFIRM_NO    0
-
-#define  RLC_MUI_UNDEFINED     0
+#define  RLC_MUI_UNDEFINED     (mui_t)0
 
 #define  RLC_RB_UNALLOCATED    (rb_id_t)0
 
+//-----------------------------------------------------------------------------
+//   PUBLIC RLC CONSTANTS
+//-----------------------------------------------------------------------------
+
+typedef enum rlc_confirm_e {
+  RLC_SDU_CONFIRM_NO    = 0,
+  RLC_SDU_CONFIRM_YES   = 1,
+} rlc_confirm_t;
+
+typedef enum rlc_mode_e {
+  RLC_MODE_NONE    = 0,
+  RLC_MODE_AM      = 1,
+  RLC_MODE_UM      = 2,
+  RLC_MODE_TM      = 4
+} rlc_mode_t;
 
 /*! \struct  rlc_info_t
 * \brief Structure containing RLC protocol configuration parameters.
@@ -132,11 +144,11 @@ typedef volatile struct {
 * \brief Primitive exchanged between RLC and MAC informing about the buffer occupancy of the RLC protocol instance.
 */
 typedef  struct {
-    u32_t                        bytes_in_buffer; /*!< \brief Bytes buffered in RLC protocol instance. */
-    u32_t                        pdus_in_buffer;  /*!< \brief Number of PDUs buffered in RLC protocol instance (OBSOLETE). */
-    u32_t                        head_sdu_creation_time;           /*!< \brief Head SDU creation time. */
-    u32_t                        head_sdu_remaining_size_to_send;  /*!< \brief remaining size of sdu: could be the total size or the remaining size of already segmented sdu */
-    u32_t                        head_sdu_is_segmented;	    /*!< \brief 0 if head SDU has not been segmented, 1 if already segmeneted */
+    rlc_buffer_occupancy_t       bytes_in_buffer; /*!< \brief Bytes buffered in RLC protocol instance. */
+    rlc_buffer_occupancy_t       pdus_in_buffer;  /*!< \brief Number of PDUs buffered in RLC protocol instance (OBSOLETE). */
+    frame_t                      head_sdu_creation_time;           /*!< \brief Head SDU creation time. */
+    sdu_size_t                   head_sdu_remaining_size_to_send;  /*!< \brief remaining size of sdu: could be the total size or the remaining size of already segmented sdu */
+    boolean_t                    head_sdu_is_segmented;	    /*!< \brief 0 if head SDU has not been segmented, 1 if already segmeneted */
 } mac_rlc_status_resp_t;
 
 
@@ -164,9 +176,9 @@ typedef struct {
 #endif
 
 protected_rlc(void            (*rlc_rrc_data_ind)  (module_id_t, module_id_t, frame_t, eNB_flag_t, rb_id_t , sdu_size_t , u8_t* );)
-protected_rlc(void            (*rlc_rrc_data_conf) (module_id_t , module_id_t , u8_t, rb_id_t , mui_t, rlc_tx_status_t );)
+protected_rlc(void            (*rlc_rrc_data_conf) (module_id_t , module_id_t , eNB_flag_t, rb_id_t , mui_t, rlc_tx_status_t );)
 typedef void (rrc_data_ind_cb_t)(module_id_t eNB_inst, module_id_t UE_inst, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t rb_idP, sdu_size_t sdu_sizeP, u8_t* sduP);
-typedef void (rrc_data_conf_cb_t)(module_id_t eNB_inst, module_id_t UE_inst, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP);
+typedef void (rrc_data_conf_cb_t)(module_id_t eNB_inst, module_id_t UE_inst, eNB_flag_t eNB_flagP, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP);
 
 
 /*! \struct  rlc_t
@@ -182,15 +194,23 @@ typedef struct rlc_t {
 }rlc_t;
 
 typedef struct rlc_mbms_s {
-  mbms_session_id_t session_id; // lcid
-  mbms_service_id_t service_id;
   rb_id_t           rb_id;
   module_id_t       instanciated_instance;
   rlc_um_entity_t   um;
 } rlc_mbms_t;
 
-public_rlc(rlc_mbms_t           rlc_mbms_array_ue[NUMBER_OF_UE_MAX][16*29];) // MAX_SERVICEx MAX_SESSION
-public_rlc(rlc_mbms_t           rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][16*29];) // MAX_SERVICEx MAX_SESSION
+#if !defined(Rel10)
+#    if !defined(maxServiceCount)
+         //unused arrays rlc_mbms_array_ue rlc_mbms_array_eNB
+#        define maxServiceCount 1
+#    endif
+#    if !defined(maxSessionPerPMCH)
+         //unused arrays rlc_mbms_array_ue rlc_mbms_array_eNB
+#        define maxSessionPerPMCH 1
+#    endif
+#endif
+public_rlc(rlc_mbms_t           rlc_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];)   // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
+public_rlc(rlc_mbms_t           rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];)   // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
 
 public_rlc(rb_id_t      lcid2rbid_ue[NUMBER_OF_UE_MAX][RLC_MAX_LC];)              /*!< \brief Pairing logical channel identifier with radio bearer identifer. */
 public_rlc(rb_id_t      lcid2rbid_eNB[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][RLC_MAX_LC];)              /*!< \brief Pairing logical channel identifier with radio bearer identifer. */
@@ -227,7 +247,7 @@ private_rlc_mac(struct mac_data_ind   mac_rlc_deserialize_tb (char*, tb_size_t,
 //   PUBLIC INTERFACE WITH RRC
 //-----------------------------------------------------------------------------
 #ifdef Rel10
-/*! \fn rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP,  SRB_ToAddMod_t* srb2addmod, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP, MBMS_SessionInfoList_r9_t *SessionInfo_listP)
+/*! \fn rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP,  SRB_ToAddMod_t* srb2addmod, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP, PMCH_InfoList_r9_t *pmch_info_listP)
 * \brief  Function for RRC to configure a Radio Bearer.
 * \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
 * \param[in]  ue_mod_idP         Virtualized ue module identifier.
@@ -241,7 +261,7 @@ private_rlc_mac(struct mac_data_ind   mac_rlc_deserialize_tb (char*, tb_size_t,
 */
 public_rlc_rrc( rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t, module_id_t, frame_t, eNB_flag_t, SRB_ToAddModList_t*, DRB_ToAddModList_t*, DRB_ToReleaseList_t*, PMCH_InfoList_r9_t *pmch_info_listP);)
 #else
-/*! \fn rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, SRB_ToAddModList_t* srb2add_listP, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP, MBMS_SessionInfoList_r9_t *SessionInfo_listP)
+/*! \fn rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, SRB_ToAddModList_t* srb2add_listP, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP)
 * \brief  Function for RRC to configure a Radio Bearer.
 * \param[in]  enb_mod_idP        Virtualized enb module identifier, Not used if eNB_flagP = 0.
 * \param[in]  ue_mod_idP         Virtualized ue module identifier.
@@ -360,23 +380,6 @@ public_rlc_mac(void                  mac_rlc_data_ind     (module_id_t, module_i
 * \return     The maximum number of bytes that the RLC instance can send in the next transmission sequence.
 */
 public_rlc_mac(mac_rlc_status_resp_t mac_rlc_status_ind   (module_id_t, module_id_t, frame_t, eNB_flag_t, MBMS_flag_t, logical_chan_id_t, tb_size_t );)
-
-//-----------------------------------------------------------------------------
-//   PUBLIC RLC CONSTANTS
-//-----------------------------------------------------------------------------
-/** RLC null type identifier. */
-#define  RLC_NONE  (rlc_mode_t)0
-/** RLC AM type identifier. */
-#define  RLC_AM    (rlc_mode_t)1
-/** RLC UM type identifier. */
-#define  RLC_UM    (rlc_mode_t)2
-/** RLC TM type identifier. */
-#define  RLC_TM    (rlc_mode_t)4
-
-#define  RLC_MBMS_NO   0
-#define  RLC_MBMS_YES  1
-
-#define RLC_CHANNEL_ID_DUMMY -1
 //-----------------------------------------------------------------------------
 //   RLC methods
 //-----------------------------------------------------------------------------
diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c
index 19ed4ad53263afc41251e35d591c27ab637a9027..8e83c94c97724f94d12784294c854a1a0ce6df2b 100644
--- a/openair2/LAYER2/RLC/rlc_mac.c
+++ b/openair2/LAYER2/RLC/rlc_mac.c
@@ -91,7 +91,7 @@ tbs_size_t mac_rlc_data_req     (module_id_t       enb_mod_idP,
 //-----------------------------------------------------------------------------
     struct mac_data_req    data_request;
     rb_id_t                rb_id    = 0;
-    rlc_mode_t             rlc_mode = RLC_NONE;
+    rlc_mode_t             rlc_mode = RLC_MODE_NONE;
     void                  *rlc_p      = NULL;
 
 #ifdef DEBUG_MAC_INTERFACE
@@ -126,17 +126,17 @@ tbs_size_t mac_rlc_data_req     (module_id_t       enb_mod_idP,
         rb_id = lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][channel_idP];
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "enB RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP);
               return (tbs_size_t)0;
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm;
               break;
           default:
@@ -146,17 +146,17 @@ tbs_size_t mac_rlc_data_req     (module_id_t       enb_mod_idP,
         rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP];
         rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "UE RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP);
               return (tbs_size_t)0;
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm;
               break;
           default:
@@ -165,20 +165,20 @@ tbs_size_t mac_rlc_data_req     (module_id_t       enb_mod_idP,
     }
 
     switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
         break;
 
-        case RLC_AM:
+        case RLC_MODE_AM:
             data_request = rlc_am_mac_data_request((rlc_am_entity_t*)rlc_p, frameP);
             return mac_rlc_serialize_tb(buffer_pP, data_request.data);
             break;
 
-        case RLC_UM:
+        case RLC_MODE_UM:
             data_request = rlc_um_mac_data_request((rlc_um_entity_t*)rlc_p, frameP);
             return mac_rlc_serialize_tb(buffer_pP, data_request.data);
             break;
 
-        case RLC_TM:
+        case RLC_MODE_TM:
             data_request = rlc_tm_mac_data_request((rlc_tm_entity_t*)rlc_p, frameP);
             return mac_rlc_serialize_tb(buffer_pP, data_request.data);
             break;
@@ -200,7 +200,7 @@ void mac_rlc_data_ind     (module_id_t         enb_mod_idP,
                            crc_t              *crcs_pP) {
 //-----------------------------------------------------------------------------
     rb_id_t                rb_id    = 0;
-    rlc_mode_t             rlc_mode = RLC_NONE;
+    rlc_mode_t             rlc_mode = RLC_MODE_NONE;
     void                  *rlc_p      = NULL;
 #ifdef DEBUG_MAC_INTERFACE
     if (num_tbP) {
@@ -242,16 +242,16 @@ void mac_rlc_data_ind     (module_id_t         enb_mod_idP,
         AssertFatal (rb_id < NB_RB_MAX, "enB RB id is too high (%u/%d) lcid %u enb module %u ue module id %u!\n", rb_id, NB_RB_MAX, channel_idP, enb_mod_idP, ue_mod_idP);
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "enB RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP);
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm;
               break;
           default:
@@ -262,16 +262,16 @@ void mac_rlc_data_ind     (module_id_t         enb_mod_idP,
         AssertFatal (rb_id < NB_RB_MAX, "UE RB id is too high (%u/%d) lcid %u enb module %u ue module id %u!\n", rb_id, NB_RB_MAX, channel_idP, enb_mod_idP, ue_mod_idP);
         rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode;
         switch (rlc_mode) {
-          case RLC_NONE:
+          case RLC_MODE_NONE:
               AssertFatal (0 , "UE RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP);
               break;
-          case RLC_AM:
+          case RLC_MODE_AM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am;
               break;
-          case RLC_UM:
+          case RLC_MODE_UM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um;
               break;
-          case RLC_TM:
+          case RLC_MODE_TM:
               rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm;
               break;
           default:
@@ -280,25 +280,25 @@ void mac_rlc_data_ind     (module_id_t         enb_mod_idP,
     }
     struct mac_data_ind data_ind = mac_rlc_deserialize_tb(buffer_pP, tb_sizeP, num_tbP, crcs_pP);
     switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
         //handle_event(WARNING,"FILE %s FONCTION mac_rlc_data_ind() LINE %s : no radio bearer configured :%d\n", __FILE__, __LINE__, channel_idP);
         break;
 
-        case RLC_AM:
+        case RLC_MODE_AM:
 #ifdef DEBUG_MAC_INTERFACE
             LOG_D(RLC, "MAC DATA IND TO RLC_AM MOD_ID %s enb id %u ue id %u \n", (eNB_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP);
 #endif
             rlc_am_mac_data_indication((rlc_am_entity_t*)rlc_p, frameP, eNB_flagP, data_ind);
             break;
 
-        case RLC_UM:
+        case RLC_MODE_UM:
 #ifdef DEBUG_MAC_INTERFACE
             LOG_D(RLC, "MAC DATA IND TO RLC_UM MOD_ID %s enb id %u ue id %u \n", (eNB_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP);
 #endif
             rlc_um_mac_data_indication((rlc_um_entity_t*)rlc_p, frameP, eNB_flagP, data_ind);
             break;
 
-        case RLC_TM:
+        case RLC_MODE_TM:
 #ifdef DEBUG_MAC_INTERFACE
             LOG_D(RLC, "MAC DATA IND TO RLC_TM MOD_ID %s enb id %u ue id %u \n", (eNB_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP);
 #endif
@@ -313,7 +313,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
   struct mac_status_ind  tx_status;
   struct mac_status_resp status_resp;
   rb_id_t                rb_id    = 0;
-  rlc_mode_t             rlc_mode = RLC_NONE;
+  rlc_mode_t             rlc_mode = RLC_MODE_NONE;
   void                  *rlc_p      = NULL;
 
   memset (&mac_rlc_status_resp, 0, sizeof(mac_rlc_status_resp_t));
@@ -355,17 +355,17 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
       }
       rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode;
       switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
             //LOG_E (RLC, "enB RLC not configured rb id %u lcid %u enb id  %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP);
             return mac_rlc_status_resp;
             break;
-        case RLC_AM:
+        case RLC_MODE_AM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm;
             break;
         default:
@@ -384,17 +384,17 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
       }
       rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode;
       switch (rlc_mode) {
-        case RLC_NONE:
+        case RLC_MODE_NONE:
             AssertFatal (0 , "UE RLC not configured rb id %u lcid %u enb id  %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP);
             return mac_rlc_status_resp;
             break;
-        case RLC_AM:
+        case RLC_MODE_AM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm;
             break;
         default:
@@ -403,11 +403,11 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
   }
 
   switch (rlc_mode) {
-      case RLC_NONE:
+      case RLC_MODE_NONE:
       //handle_event(WARNING,"FILE %s FONCTION mac_rlc_data_ind() LINE %s : no radio bearer configured :%d\n", __FILE__, __LINE__, channel_idP);
       break;
 
-      case RLC_AM:
+      case RLC_MODE_AM:
           status_resp = rlc_am_mac_status_indication((rlc_am_entity_t*)rlc_p, frameP, tb_sizeP, tx_status);
           mac_rlc_status_resp.bytes_in_buffer                 = status_resp.buffer_occupancy_in_bytes;
           mac_rlc_status_resp.head_sdu_creation_time          = status_resp.head_sdu_creation_time;
@@ -416,7 +416,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
           return mac_rlc_status_resp;
           break;
 
-      case RLC_UM:
+      case RLC_MODE_UM:
           status_resp = rlc_um_mac_status_indication((rlc_um_entity_t*)rlc_p, frameP, eNB_flagP, tb_sizeP, tx_status);
           mac_rlc_status_resp.bytes_in_buffer                 = status_resp.buffer_occupancy_in_bytes;
           mac_rlc_status_resp.pdus_in_buffer                  = status_resp.buffer_occupancy_in_pdus;
@@ -426,7 +426,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind     (module_id_t enb_mod_idP, module_id
           return mac_rlc_status_resp;
           break;
 
-      case RLC_TM:
+      case RLC_MODE_TM:
           status_resp = rlc_tm_mac_status_indication((rlc_tm_entity_t*)rlc_p, frameP, tb_sizeP, tx_status);
           mac_rlc_status_resp.bytes_in_buffer = status_resp.buffer_occupancy_in_bytes;
           mac_rlc_status_resp.pdus_in_buffer  = status_resp.buffer_occupancy_in_pdus;
diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c
index cdec049c4e51acb0e8e335b4142f0293aaa8b217..49b98c136ec4d905a35b2da31c9b8b9532cf7853 100644
--- a/openair2/LAYER2/RLC/rlc_rrc.c
+++ b/openair2/LAYER2/RLC/rlc_rrc.c
@@ -28,33 +28,38 @@
 #include "LAYER2/MAC/extern.h"
 #include "assertions.h"
 //-----------------------------------------------------------------------------
-#ifdef Rel10
-rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, SRB_ToAddModList_t* srb2add_listP, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP, PMCH_InfoList_r9_t *pmch_info_listP) {
-#else
-rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, SRB_ToAddModList_t* srb2add_listP, DRB_ToAddModList_t* drb2add_listP, DRB_ToReleaseList_t*  drb2release_listP) {
-#endif//-----------------------------------------------------------------------------
-  rb_id_t                rb_id        = 0;
-  logical_chan_id_t              lc_id        = 0;
-  DRB_Identity_t         drb_id       = 0;
-  DRB_Identity_t*        pdrb_id      = NULL;
-  long int               cnt          = 0;
-  SRB_ToAddMod_t        *srb_toaddmod = NULL;
-  DRB_ToAddMod_t        *drb_toaddmod = NULL;
-  rlc_mode_t             rlc_mode     = RLC_NONE;
-#ifdef Rel10
-  long int               cnt2            = 0;
-  //  long int               mrb_id          = 0;
-  long int               mbms_service_id = 0;
-  // long int               mbms_session_id = 0;
-  PMCH_Info_r9_t*        pmch_info_r9    = NULL;
-  MBMS_SessionInfo_r9_t* mbms_session    = NULL;
-  rlc_op_status_t        rlc_status      = RLC_OP_STATUS_OK;
-  DL_UM_RLC_t            dl_um_rlc;
+rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t           enb_mod_idP,
+                                         module_id_t           ue_mod_idP,
+                                         frame_t               frameP,
+                                         eNB_flag_t            enb_flagP,
+                                         SRB_ToAddModList_t   *srb2add_listP,
+                                         DRB_ToAddModList_t   *drb2add_listP,
+                                         DRB_ToReleaseList_t  *drb2release_listP
+#if defined(Rel10)
+                                         ,PMCH_InfoList_r9_t*  pmch_InfoList_r9_pP
+#endif
+  ) {
+  //-----------------------------------------------------------------------------
+  rb_id_t                rb_id           = 0;
+  logical_chan_id_t      lc_id           = 0;
+  DRB_Identity_t         drb_id          = 0;
+  DRB_Identity_t*        pdrb_id         = NULL;
+  long int               cnt             = 0;
+  SRB_ToAddMod_t        *srb_toaddmod_p  = NULL;
+  DRB_ToAddMod_t        *drb_toaddmod_p  = NULL;
+  rlc_mode_t             rlc_mode        = RLC_MODE_NONE;
+#if defined(Rel10)
+  int                        i, j;
+  MBMS_SessionInfoList_r9_t *mbms_SessionInfoList_r9_p = NULL;
+  MBMS_SessionInfo_r9_t     *MBMS_SessionInfo_p        = NULL;
+  mbms_session_id_t          mbms_session_id;
+  mbms_service_id_t          mch_id, mbms_service_id;
+  DL_UM_RLC_t                dl_um_rlc;
 #endif
   
   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] CONFIG REQ ASN1 \n",
           frameP,
-          (eNB_flagP) ? "eNB" : "UE",
+          (enb_flagP) ? "eNB" : "UE",
           enb_mod_idP,
           ue_mod_idP);
 
@@ -80,37 +85,37 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
       for (cnt=0;cnt<srb2add_listP->list.count;cnt++) {
          rb_id = srb2add_listP->list.array[cnt]->srb_Identity;
 
-         if (eNB_flagP) {
+         if (enb_flagP) {
              rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode;
          } else {
              rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode;
          }
          LOG_D(RLC, "Adding SRB %d, rb_id %d\n",srb2add_listP->list.array[cnt]->srb_Identity,rb_id);
-          srb_toaddmod = srb2add_listP->list.array[cnt];
+          srb_toaddmod_p = srb2add_listP->list.array[cnt];
 
-          if (srb_toaddmod->rlc_Config) {
-              switch (srb_toaddmod->rlc_Config->present) {
+          if (srb_toaddmod_p->rlc_Config) {
+              switch (srb_toaddmod_p->rlc_Config->present) {
                   case SRB_ToAddMod__rlc_Config_PR_NOTHING:
                       break;
                   case SRB_ToAddMod__rlc_Config_PR_explicitValue:
-                      switch (srb_toaddmod->rlc_Config->choice.explicitValue.present) {
+                      switch (srb_toaddmod_p->rlc_Config->choice.explicitValue.present) {
                           case RLC_Config_PR_NOTHING:
                               break;
                           case RLC_Config_PR_am:
-                              if (rlc_mode == RLC_NONE) {
-                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, rb_id, rb_id, RLC_AM) == RLC_OP_STATUS_OK) {
+                              if (rlc_mode == RLC_MODE_NONE) {
+                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_id, rb_id, RLC_MODE_AM) == RLC_OP_STATUS_OK) {
                                       config_req_rlc_am_asn1 (
                                                  frameP, 
-                                                 eNB_flagP,
+                                                 enb_flagP,
                                                  enb_mod_idP,
                                                  ue_mod_idP,
-                                                 &srb_toaddmod->rlc_Config->choice.explicitValue.choice.am, 
+                                                 &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
                                                  rb_id, 
                                                  SIGNALLING_RADIO_BEARER);
                                   } else {
                                       LOG_E(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] ERROR IN ALLOCATING SRB %d \n",
                                               frameP,
-                                              (eNB_flagP) ? "eNB" : "UE",
+                                              (enb_flagP) ? "eNB" : "UE",
                                               enb_mod_idP,
                                               ue_mod_idP,
                                               rb_id);
@@ -118,29 +123,31 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
                               } else {
                                   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] SRB %d AM ALREADY CONFIGURED, TO DO MODIFY \n",
                                           frameP,
-                                          (eNB_flagP) ? "eNB" : "UE",
+                                          (enb_flagP) ? "eNB" : "UE",
                                           enb_mod_idP,
                                           ue_mod_idP,
                                           rb_id);
                               }
                               break;
                           case RLC_Config_PR_um_Bi_Directional:
-                              if (rlc_mode == RLC_NONE) {
-                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, rb_id, rb_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                              if (rlc_mode == RLC_MODE_NONE) {
+                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_id, rb_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                                       config_req_rlc_um_asn1(
                                           frameP,
-                                          eNB_flagP,
-                                          RLC_MBMS_NO,
+                                          enb_flagP,
+                                          MBMS_FLAG_NO,
                                           enb_mod_idP,
                                           ue_mod_idP,
-                                          &srb_toaddmod->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.ul_UM_RLC,
-                                          &srb_toaddmod->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.dl_UM_RLC,
+                                          UNUSED_PARAM_MBMS_SESSION_ID,
+                                          UNUSED_PARAM_MBMS_SERVICE_ID,
+                                          &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.ul_UM_RLC,
+                                          &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.dl_UM_RLC,
                                           rb_id,
                                           SIGNALLING_RADIO_BEARER);
                                   } else {
                                       LOG_E(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] ERROR IN ALLOCATING SRB %d \n",
                                               frameP,
-                                              (eNB_flagP) ? "eNB" : "UE",
+                                              (enb_flagP) ? "eNB" : "UE",
                                               enb_mod_idP,
                                               ue_mod_idP,
                                               rb_id);
@@ -148,28 +155,30 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
                               } else {
                                   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] SRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                           frameP,
-                                          (eNB_flagP) ? "eNB" : "UE",
+                                          (enb_flagP) ? "eNB" : "UE",
                                           enb_mod_idP,
                                           ue_mod_idP,
                                           rb_id);
                               }
                               break;
                           case RLC_Config_PR_um_Uni_Directional_UL:
-                              if (rlc_mode == RLC_NONE) {
-                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, rb_id, rb_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                              if (rlc_mode == RLC_MODE_NONE) {
+                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_id, rb_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                                       config_req_rlc_um_asn1(
                                           frameP,
-                                          eNB_flagP,
-                                          RLC_MBMS_NO,
+                                          enb_flagP,
+                                          MBMS_FLAG_NO,
                                           enb_mod_idP,
                                           ue_mod_idP,
-                                          &srb_toaddmod->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_UL.ul_UM_RLC,
+                                          UNUSED_PARAM_MBMS_SESSION_ID,
+                                          UNUSED_PARAM_MBMS_SERVICE_ID,
+                                          &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_UL.ul_UM_RLC,
                                           NULL,
                                           rb_id, SIGNALLING_RADIO_BEARER);
                                   } else {
                                       LOG_E(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] ERROR IN ALLOCATING SRB %d \n",
                                               frameP,
-                                              (eNB_flagP) ? "eNB" : "UE",
+                                              (enb_flagP) ? "eNB" : "UE",
                                               enb_mod_idP,
                                               ue_mod_idP,
                                               rb_id);
@@ -177,28 +186,30 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
                               } else {
                                   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] SRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                           frameP,
-                                          (eNB_flagP) ? "eNB" : "UE",
+                                          (enb_flagP) ? "eNB" : "UE",
                                           enb_mod_idP,
                                           ue_mod_idP,
                                           rb_id);
                               }
                               break;
                           case RLC_Config_PR_um_Uni_Directional_DL:
-                              if (rlc_mode == RLC_NONE) {
-                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, rb_id, rb_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                              if (rlc_mode == RLC_MODE_NONE) {
+                                  if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_id, rb_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                                       config_req_rlc_um_asn1(
                                           frameP,
-                                          eNB_flagP,
-                                          RLC_MBMS_NO,
+                                          enb_flagP,
+                                          MBMS_FLAG_NO,
                                           enb_mod_idP,
                                           ue_mod_idP,
+                                          UNUSED_PARAM_MBMS_SESSION_ID,
+                                          UNUSED_PARAM_MBMS_SERVICE_ID,
                                           NULL,
-                                          &srb_toaddmod->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_DL.dl_UM_RLC,
+                                          &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_DL.dl_UM_RLC,
                                           rb_id, SIGNALLING_RADIO_BEARER);
                                   } else {
                                       LOG_E(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] ERROR IN ALLOCATING SRB %d \n",
                                               frameP,
-                                              (eNB_flagP) ? "eNB" : "UE",
+                                              (enb_flagP) ? "eNB" : "UE",
                                               enb_mod_idP,
                                               ue_mod_idP,
                                               rb_id);
@@ -206,7 +217,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
                               } else {
                                   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] SRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                           frameP,
-                                          (eNB_flagP) ? "eNB" : "UE",
+                                          (enb_flagP) ? "eNB" : "UE",
                                           enb_mod_idP,
                                           ue_mod_idP,
                                           rb_id);
@@ -215,30 +226,32 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
                           default:
                               LOG_E(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] UNKNOWN RLC CONFIG %d \n",
                                       frameP,
-                                      (eNB_flagP) ? "eNB" : "UE",
+                                      (enb_flagP) ? "eNB" : "UE",
                                       enb_mod_idP,
                                       ue_mod_idP,
-                                      srb_toaddmod->rlc_Config->choice.explicitValue.present);
+                                      srb_toaddmod_p->rlc_Config->choice.explicitValue.present);
                               break;
                       }
                       break;
                   case SRB_ToAddMod__rlc_Config_PR_defaultValue:
 #warning TO DO SRB_ToAddMod__rlc_Config_PR_defaultValue
-                      if (rlc_mode == RLC_NONE) {
-                          rrc_rlc_add_rlc   (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, rb_id, rb_id, RLC_UM);
+                      if (rlc_mode == RLC_MODE_NONE) {
+                          rrc_rlc_add_rlc   (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_id, rb_id, RLC_MODE_UM);
                           config_req_rlc_um_asn1(
                                       frameP,
-                                      eNB_flagP,
-                                      RLC_MBMS_NO,
+                                      enb_flagP,
+                                      MBMS_FLAG_NO,
                                       enb_mod_idP,
                                       ue_mod_idP,
+                                      UNUSED_PARAM_MBMS_SESSION_ID,
+                                      UNUSED_PARAM_MBMS_SERVICE_ID,
                                       NULL, // TO DO DEFAULT CONFIG
                                       NULL, // TO DO DEFAULT CONFIG
                                       rb_id, SIGNALLING_RADIO_BEARER);
                       } else {
                           LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] SRB %d DEFAULT UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                   frameP,
-                                  (eNB_flagP) ? "eNB" : "UE",
+                                  (enb_flagP) ? "eNB" : "UE",
                                   enb_mod_idP,
                                   ue_mod_idP,
                                   rb_id);
@@ -251,114 +264,120 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
   }
   if (drb2add_listP != NULL) {
       for (cnt=0;cnt<drb2add_listP->list.count;cnt++) {
-          drb_toaddmod = drb2add_listP->list.array[cnt];
+          drb_toaddmod_p = drb2add_listP->list.array[cnt];
 
-          drb_id = *drb_toaddmod->logicalChannelIdentity;//drb_toaddmod->drb_Identity;
+          drb_id = *drb_toaddmod_p->logicalChannelIdentity;//drb_toaddmod_p->drb_Identity;
           lc_id  = drb_id;
-          if (eNB_flagP) {
+          if (enb_flagP) {
               rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][drb_id].mode;
           } else {
               rlc_mode = rlc_array_ue[ue_mod_idP][drb_id].mode;
           }
-          LOG_D(RLC, "Adding DRB %d, rb_id %d\n",*drb_toaddmod->logicalChannelIdentity,drb_id);
+          LOG_D(RLC, "Adding DRB %d, rb_id %d\n",*drb_toaddmod_p->logicalChannelIdentity,drb_id);
           
 
-          if (drb_toaddmod->rlc_Config) {
+          if (drb_toaddmod_p->rlc_Config) {
 
-              switch (drb_toaddmod->rlc_Config->present) {
+              switch (drb_toaddmod_p->rlc_Config->present) {
                   case RLC_Config_PR_NOTHING:
                       break;
                   case RLC_Config_PR_am:
-                      if (rlc_mode == RLC_NONE) {
-                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, drb_id, lc_id, RLC_AM) == RLC_OP_STATUS_OK) {
+                      if (rlc_mode == RLC_MODE_NONE) {
+                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, drb_id, lc_id, RLC_MODE_AM) == RLC_OP_STATUS_OK) {
                               config_req_rlc_am_asn1 (
                                             frameP,
-                                            eNB_flagP,
+                                            enb_flagP,
                                             enb_mod_idP,
                                             ue_mod_idP,
-                                            &drb_toaddmod->rlc_Config->choice.am,
+                                            &drb_toaddmod_p->rlc_Config->choice.am,
                                             drb_id,
                                             RADIO_ACCESS_BEARER);
                           }
                       } else {
                           LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] DRB %d AM ALREADY CONFIGURED, TO DO MODIFY \n",
                                   frameP,
-                                  (eNB_flagP) ? "eNB" : "UE",
+                                  (enb_flagP) ? "eNB" : "UE",
                                   enb_mod_idP,
                                   ue_mod_idP,
                                   drb_id);
                       }
                       break;
                   case RLC_Config_PR_um_Bi_Directional:
-                      if (rlc_mode == RLC_NONE) {
-                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, drb_id, lc_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                      if (rlc_mode == RLC_MODE_NONE) {
+                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, drb_id, lc_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                               config_req_rlc_um_asn1(
                                   frameP,
-                                  eNB_flagP,
-                                  RLC_MBMS_NO,
+                                  enb_flagP,
+                                  MBMS_FLAG_NO,
                                   enb_mod_idP,
                                   ue_mod_idP,
-                                  &drb_toaddmod->rlc_Config->choice.um_Bi_Directional.ul_UM_RLC,
-                                  &drb_toaddmod->rlc_Config->choice.um_Bi_Directional.dl_UM_RLC,
+                                  UNUSED_PARAM_MBMS_SESSION_ID,
+                                  UNUSED_PARAM_MBMS_SERVICE_ID,
+                                  &drb_toaddmod_p->rlc_Config->choice.um_Bi_Directional.ul_UM_RLC,
+                                  &drb_toaddmod_p->rlc_Config->choice.um_Bi_Directional.dl_UM_RLC,
                                   drb_id, RADIO_ACCESS_BEARER);
                           }
                       } else {
                           LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] DRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                   frameP,
-                                  (eNB_flagP) ? "eNB" : "UE",
+                                  (enb_flagP) ? "eNB" : "UE",
                                   enb_mod_idP,
                                   ue_mod_idP,
                                   drb_id);
                       }
                       break;
                   case RLC_Config_PR_um_Uni_Directional_UL:
-                      if (rlc_mode == RLC_NONE) {
-                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, drb_id, lc_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                      if (rlc_mode == RLC_MODE_NONE) {
+                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, drb_id, lc_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                               config_req_rlc_um_asn1(
                                   frameP,
-                                  eNB_flagP,
-                                  RLC_MBMS_NO,
+                                  enb_flagP,
+                                  MBMS_FLAG_NO,
                                   enb_mod_idP,
                                   ue_mod_idP,
-                                  &drb_toaddmod->rlc_Config->choice.um_Uni_Directional_UL.ul_UM_RLC,
+                                  UNUSED_PARAM_MBMS_SESSION_ID,
+                                  UNUSED_PARAM_MBMS_SERVICE_ID,
+                                  &drb_toaddmod_p->rlc_Config->choice.um_Uni_Directional_UL.ul_UM_RLC,
                                   NULL,
                                   drb_id, RADIO_ACCESS_BEARER);
                           }
                       } else {
                           LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] DRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                   frameP,
-                                  (eNB_flagP) ? "eNB" : "UE",
+                                  (enb_flagP) ? "eNB" : "UE",
                                   enb_mod_idP,
                                   ue_mod_idP,
                                   drb_id);
                       }
                       break;
                   case RLC_Config_PR_um_Uni_Directional_DL:
-                      if (rlc_mode == RLC_NONE) {
-                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, drb_id, lc_id, RLC_UM) == RLC_OP_STATUS_OK) {
+                      if (rlc_mode == RLC_MODE_NONE) {
+                          if (rrc_rlc_add_rlc (enb_mod_idP, ue_mod_idP, frameP, enb_flagP, drb_id, lc_id, RLC_MODE_UM) == RLC_OP_STATUS_OK) {
                               config_req_rlc_um_asn1(
                                   frameP,
-                                  eNB_flagP,
-                                  RLC_MBMS_NO,
+                                  enb_flagP,
+                                  MBMS_FLAG_NO,
                                   enb_mod_idP,
                                   ue_mod_idP,
+                                  UNUSED_PARAM_MBMS_SESSION_ID,
+                                  UNUSED_PARAM_MBMS_SERVICE_ID,
                                   NULL,
-                                  &drb_toaddmod->rlc_Config->choice.um_Uni_Directional_DL.dl_UM_RLC,
+                                  &drb_toaddmod_p->rlc_Config->choice.um_Uni_Directional_DL.dl_UM_RLC,
                                   drb_id, RADIO_ACCESS_BEARER);
                           }
                       } else {
                           LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] DRB %d UM ALREADY CONFIGURED, TO DO MODIFY \n",
                                   frameP,
-                                  (eNB_flagP) ? "eNB" : "UE",
+                                  (enb_flagP) ? "eNB" : "UE",
                                   enb_mod_idP,
                                   ue_mod_idP,
                                   drb_id);
                       }
                       break;
                   default:
-                      LOG_W(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u][RB %u] unknown drb_toaddmod->rlc_Config->present \n",
+                      LOG_W(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u][RB %u] unknown drb_toaddmod_p->rlc_Config->present \n",
                               frameP,
-                              (eNB_flagP) ? "eNB" : "UE",
+                              (enb_flagP) ? "eNB" : "UE",
                               enb_mod_idP,
                               ue_mod_idP,
                               drb_id);
@@ -369,69 +388,52 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
   if (drb2release_listP != NULL) {
     for (cnt=0;cnt<drb2release_listP->list.count;cnt++) {
       pdrb_id = drb2release_listP->list.array[cnt];
-      rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, *pdrb_id);
+      rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, *pdrb_id);
     }
   }
 
-#ifdef Rel10
-  if (pmch_info_listP != NULL) {
-
-      LOG_I(RLC,"[%s %d] Config RLC instance for MBMS\n", (eNB_flagP) ? "eNB" : "UE", (eNB_flagP) ? module_idP : module_idP - NB_eNB_INST);
-
-      for (cnt=0;cnt<pmch_info_listP->list.count;cnt++) {
-          pmch_info_r9 = pmch_info_listP->list.array[cnt];
-      
-          for (cnt2=0;cnt2<pmch_info_r9->mbms_SessionInfoList_r9.list.count;cnt2++) {
-              mbms_session = pmch_info_r9->mbms_SessionInfoList_r9.list.array[cnt2];
-
-              if (mbms_session->logicalChannelIdentity_r9 > 0) {
-
-                  //  lc_id = (NUMBER_OF_UE_MAX*NB_RB_MAX) + mbms_session->logicalChannelIdentity_r9;
-                  //   test this one and tell Lionel
-                  if (eNB_flagP) {
-                      /* SR: (maxDRB = 11 + 3) * 16 = 224... */
-                      lc_id = mbms_session->logicalChannelIdentity_r9 + (maxDRB + 3) * MAX_MOBILES_PER_RG;
-                  } else {
-                      lc_id = mbms_session->logicalChannelIdentity_r9 + (maxDRB + 3);
-                  }
+#if defined(Rel10)
 
-                  /*
-                  if (mbms_session->sessionId_r9 != NULL) {
-                      mbms_session_id = mbms_session->sessionId_r9->buf[0];
-                  } else {
-                     mbms_session_id = mbms_session->logicalChannelIdentity_r9;
-                  }
-                  */
-                  mbms_service_id = mbms_session->tmgi_r9.serviceId_r9.buf[2];// can use the pmch_index, here is the value 'cnt'
-                  rb_id = (mbms_service_id * maxSessionPerPMCH) + lc_id;
+  if (pmch_InfoList_r9_pP != NULL) {
+      for (i=0;i<pmch_InfoList_r9_pP->list.count;i++) {
+          mbms_SessionInfoList_r9_p = &(pmch_InfoList_r9_pP->list.array[i]->mbms_SessionInfoList_r9);
+          for (j=0;j<mbms_SessionInfoList_r9_p->list.count;j++) {
+              MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
+              mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
+              lc_id           = mbms_session_id;
+              mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
+              mch_id          = mbms_service_id;
 
-                  if (rlc[module_idP].m_rlc_pointer[rb_id].rlc_type == RLC_NONE) {
-                      rlc_status = rrc_rlc_add_rlc (module_idP, frameP, rb_id, lc_id, RLC_UM);
-                      if (rlc_status != RLC_OP_STATUS_OK ) {
-                        LOG_D(RLC, "[RLC_RRC] COULD NOT ALLOCATE RLC UM INSTANCE\n");
-                        continue;//? return rlc_status;
-                      }
-                  } else if (rlc[module_idP].m_rlc_pointer[rb_id].rlc_type != RLC_UM) {
-                      LOG_E(RLC, "[RLC_RRC] MBMS ERROR IN CONFIG, RLC FOUND ALREADY CONFIGURED FOR MBMS BEARER IS NOT UM\n");
-                      continue;
-                  }
-                  dl_um_rlc.sn_FieldLength = SN_FieldLength_size5;
-                  dl_um_rlc.t_Reordering = T_Reordering_ms0;
-
-                  config_req_rlc_um_asn1 (
-                        frameP,
-                        eNB_flagP,
-                        RLC_MBMS_YES,
-                        enb_mod_idP,
-                        ue_mod_idP,
-                        NULL,
-                        &dl_um_rlc,
-                        rb_id,
-                        RADIO_ACCESS_BEARER);
+              // can set the mch_id = i
+              if (enb_flagP) {
+                rb_id =  (mbms_service_id * maxSessionPerPMCH ) + mbms_session_id; // 1
+                // NO CHECK
+                /*if (rlc_mbms_array_eNB[enb_mod_idP][mbms_service_id][mbms_session_id].instanciated_instance == enb_mod_idP + 1)
+                  action = ACTION_MBMS_MODIFY;
+                else
+                  action = ACTION_MBMS_ADD;*/
               } else {
-                  LOG_D(RLC, "[RLC_RRC] Invalid LogicalChannelIdentity for MTCH --- Value 0 is reserved for MCCH\n");
-                  lc_id = -1;
+                rb_id =  (mbms_service_id * maxSessionPerPMCH ) + mbms_session_id + (maxDRB + 3); // 15
+                /*if (rlc_mbms_array_ue[ue_mod_idP][mbms_service_id][mbms_session_id].instanciated_instance == ue_mod_idP + 1)
+                  action = ACTION_MBMS_MODIFY;
+                else
+                  action = ACTION_MBMS_ADD;*/
               }
+              dl_um_rlc.sn_FieldLength = SN_FieldLength_size5;
+              dl_um_rlc.t_Reordering   = T_Reordering_ms0;
+
+              config_req_rlc_um_asn1 (
+                    frameP,
+                    enb_flagP,
+                    MBMS_FLAG_YES,
+                    enb_mod_idP,
+                    ue_mod_idP,
+                    mbms_session_id,
+                    mbms_service_id,
+                    NULL,
+                    &dl_um_rlc,
+                    rb_id,
+                    RADIO_ACCESS_BEARER);
           }
       }
   }
@@ -439,15 +441,15 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, module_id_t ue
   
   LOG_D(RLC, "[FRAME %5u][%s][RLC_RRC][MOD %u/%u] CONFIG REQ ASN1 END \n",
          frameP,
-         (eNB_flagP) ? "eNB" : "UE",
-         eNB_flagP,
+         (enb_flagP) ? "eNB" : "UE",
+         enb_flagP,
          enb_mod_idP,
          ue_mod_idP);
   return RLC_OP_STATUS_OK;
 }
 //-----------------------------------------------------------------------------
 rlc_op_status_t
-rb_release_rlc_tm (struct rlc_tm_entity *rlcP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
+rb_release_rlc_tm (rlc_tm_entity_t *rlcP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
 {
 //-----------------------------------------------------------------------------
   rlc_tm_cleanup(rlcP);
@@ -455,7 +457,7 @@ rb_release_rlc_tm (struct rlc_tm_entity *rlcP, module_id_t enb_mod_idP, module_i
 }
 //-----------------------------------------------------------------------------
 rlc_op_status_t
-rb_release_rlc_um (struct rlc_um_entity *rlcP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
+rb_release_rlc_um (rlc_um_entity_t *rlcP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
 {
 //-----------------------------------------------------------------------------
   rlc_um_cleanup(rlcP);
@@ -463,17 +465,17 @@ rb_release_rlc_um (struct rlc_um_entity *rlcP, module_id_t enb_mod_idP, module_i
 }
 //-----------------------------------------------------------------------------
 rlc_op_status_t
-rb_release_rlc_am (struct rlc_am_entity *rlcP, frame_t frameP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
+rb_release_rlc_am (rlc_am_entity_t *rlcP, frame_t frameP, module_id_t enb_mod_idP, module_id_t ue_mod_idP)
 {
 //-----------------------------------------------------------------------------
   rlc_am_cleanup(rlcP,frame);
   return RLC_OP_STATUS_OK;
 }
 //-----------------------------------------------------------------------------
-rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t rb_idP) {
+rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, rb_id_t rb_idP) {
 //-----------------------------------------------------------------------------
     logical_chan_id_t        lcid     = 0;
-    rlc_mode_t       rlc_mode = RLC_NONE;
+    rlc_mode_t       rlc_mode = RLC_MODE_NONE;
     rlc_op_status_t  status;
 
 #ifdef OAI_EMU
@@ -497,10 +499,10 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
 
     AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX);
 
-    if (eNB_flagP) {
+    if (enb_flagP) {
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
         switch (rlc_mode) {
-        case RLC_AM:
+        case RLC_MODE_AM:
             LOG_D(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u] RELEASE RB AM\n",
                     frame,
                     enb_mod_idP,
@@ -511,9 +513,9 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
             status = rb_release_rlc_am(&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am, frame, enb_mod_idP, ue_mod_idP);
             rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am.allocation = 0;
-            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             LOG_D(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u] RELEASE RB TM\n",
                     frame,
                     enb_mod_idP,
@@ -524,9 +526,9 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
             status = rb_release_rlc_tm(&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm, enb_mod_idP, ue_mod_idP);
             rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm.allocation = 0;
-            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             LOG_D(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u] RELEASE RB UM\n",
                     frame,
                     enb_mod_idP,
@@ -537,7 +539,7 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
              status = rb_release_rlc_um(&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um, enb_mod_idP, ue_mod_idP);
             rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um.allocation = 0;
-            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
         default:
             LOG_E(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u] RELEASE RB mode %d\n",
@@ -552,7 +554,7 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
     } else {
         rlc_mode = rlc_array_ue[ue_mod_idP][rb_idP].mode;
         switch (rlc_mode) {
-        case RLC_AM:
+        case RLC_MODE_AM:
             LOG_D(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] RELEASE RB AM\n",
                     frame,
                     enb_mod_idP,
@@ -563,9 +565,9 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_ue[ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
             status = rb_release_rlc_am(&rlc_array_ue[ue_mod_idP][rb_idP].rlc.am, frame, enb_mod_idP, ue_mod_idP);
             rlc_array_ue[ue_mod_idP][rb_idP].rlc.am.allocation = 0;
-            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             LOG_D(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] RELEASE RB TM\n",
                     frame,
                     enb_mod_idP,
@@ -576,9 +578,9 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_ue[ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
             status = rb_release_rlc_tm(&rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm, enb_mod_idP, ue_mod_idP);
             rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm.allocation = 0;
-            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             LOG_D(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] RELEASE RB UM\n",
                     frame,
                     enb_mod_idP,
@@ -589,7 +591,7 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
             lcid2rbid_ue[ue_mod_idP][lcid] = RLC_RB_UNALLOCATED;
             status = rb_release_rlc_um(&rlc_array_ue[ue_mod_idP][rb_idP].rlc.um, enb_mod_idP, ue_mod_idP);
             rlc_array_ue[ue_mod_idP][rb_idP].rlc.um.allocation = 0;
-            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_NONE;
+            rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_NONE;
             break;
         default:
             LOG_E(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] RELEASE RB mode %d\n",
@@ -605,9 +607,9 @@ rlc_op_status_t rrc_rlc_remove_rlc   (module_id_t enb_mod_idP, module_id_t ue_mo
     return status;
 }
 //-----------------------------------------------------------------------------
-rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t rb_idP, logical_chan_id_t chan_idP, rlc_mode_t rlc_modeP) {
+rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, rb_id_t rb_idP, logical_chan_id_t chan_idP, rlc_mode_t rlc_modeP) {
 //-----------------------------------------------------------------------------
-    rlc_mode_t       rlc_mode = RLC_NONE;
+    rlc_mode_t       rlc_mode = RLC_MODE_NONE;
     unsigned int     allocation;
     
 #ifdef OAI_EMU
@@ -631,9 +633,9 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
     AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX);
     AssertFatal (chan_idP < RLC_MAX_LC, "LC id is too high (%u/%d)!\n", chan_idP, RLC_MAX_LC);
 
-    if (eNB_flagP) {
+    if (enb_flagP) {
         rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode;
-        if (rlc_mode != RLC_NONE) {
+        if (rlc_mode != RLC_MODE_NONE) {
             LOG_E(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB RB IS ALREADY ALLOCATED\n",
                     frame,
                     enb_mod_idP,
@@ -645,11 +647,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
         AssertFatal (lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][chan_idP] == RLC_RB_UNALLOCATED, "Bad LC RB %u mapping in RLC layer, channel id %u already configured!\n", rb_idP, chan_idP);
         lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][chan_idP] = rb_idP;
         switch (rlc_modeP) {
-        case RLC_AM:
+        case RLC_MODE_AM:
             allocation = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am.allocation;
             if (!(allocation)) {
                 rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.am.allocation = 1;
-                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_AM;
+                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_AM;
                 LOG_I(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB AM\n",
                         frame,
                         enb_mod_idP,
@@ -666,11 +668,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
                 return RLC_OP_STATUS_BAD_PARAMETER;
             }
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             allocation = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm.allocation;
             if (!(allocation)) {
                 rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.tm.allocation = 1;
-                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_TM;
+                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_TM;
                 LOG_I(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB TM\n",
                         frame,
                         enb_mod_idP,
@@ -687,11 +689,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
                 return RLC_OP_STATUS_BAD_PARAMETER;
             }
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             allocation = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um.allocation;
             if (!(allocation)) {
                 rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].rlc.um.allocation = 1;
-                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_UM;
+                rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_idP].mode = RLC_MODE_UM;
                 LOG_I(RLC, "[Frame %05u][eNB][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB UM\n",
                         frame,
                         enb_mod_idP,
@@ -720,7 +722,7 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
         }
     } else {
         rlc_mode = rlc_array_ue[ue_mod_idP][rb_idP].mode;
-        if (rlc_mode != RLC_NONE) {
+        if (rlc_mode != RLC_MODE_NONE) {
             LOG_E(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB RB IS ALREADY ALLOCATED\n",
                     frame,
                     enb_mod_idP,
@@ -732,11 +734,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
         AssertFatal (lcid2rbid_ue[ue_mod_idP][chan_idP] == RLC_RB_UNALLOCATED, "Bad LC RB %u mapping in RLC layer, channel id %u already configured!\n", rb_idP, chan_idP);
         lcid2rbid_ue[ue_mod_idP][chan_idP] = rb_idP;
         switch (rlc_modeP) {
-        case RLC_AM:
+        case RLC_MODE_AM:
             allocation = rlc_array_ue[ue_mod_idP][rb_idP].rlc.am.allocation;
             if (!(allocation)) {
                 rlc_array_ue[ue_mod_idP][rb_idP].rlc.am.allocation = 1;
-                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_AM;
+                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_AM;
                 LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB AM\n",
                         frame,
                         enb_mod_idP,
@@ -753,11 +755,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
                 return RLC_OP_STATUS_BAD_PARAMETER;
             }
             break;
-        case RLC_TM:
+        case RLC_MODE_TM:
             allocation = rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm.allocation;
             if (!(allocation)) {
                 rlc_array_ue[ue_mod_idP][rb_idP].rlc.tm.allocation = 1;
-                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_TM;
+                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_TM;
                 LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB TM\n",
                         frame,
                         enb_mod_idP,
@@ -774,11 +776,11 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
                 return RLC_OP_STATUS_BAD_PARAMETER;
             }
             break;
-        case RLC_UM:
+        case RLC_MODE_UM:
             allocation = rlc_array_ue[ue_mod_idP][rb_idP].rlc.um.allocation;
             if (!(allocation)) {
                 rlc_array_ue[ue_mod_idP][rb_idP].rlc.um.allocation = 1;
-                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_UM;
+                rlc_array_ue[ue_mod_idP][rb_idP].mode = RLC_MODE_UM;
                 LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u][LCH Id %d] ADD RB UM\n",
                         frame,
                         enb_mod_idP,
@@ -809,13 +811,13 @@ rlc_op_status_t rrc_rlc_add_rlc   (module_id_t enb_mod_idP, module_id_t ue_mod_i
     return RLC_OP_STATUS_OK;
 }
 //-----------------------------------------------------------------------------
-rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, config_action_t actionP, rb_id_t rb_idP, rb_type_t rb_typeP, rlc_info_t rlc_infoP) {
+rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, config_action_t actionP, rb_id_t rb_idP, rb_type_t rb_typeP, rlc_info_t rlc_infoP) {
 //-----------------------------------------------------------------------------
     rlc_op_status_t status;
 
     LOG_D(RLC, "[FRAME %05u][%s][RLC][MOD %u/%u] CONFIG_REQ for Rab %u\n",
             frame,
-            (eNB_flagP) ? "eNB" : "UE",
+            (enb_flagP) ? "eNB" : "UE",
             enb_mod_idP,
             ue_mod_idP,
             rb_idP);
@@ -844,12 +846,12 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
     switch (actionP) {
 
         case ACTION_ADD:
-            if ((status = rrc_rlc_add_rlc(enb_mod_idP, ue_mod_idP, frame, eNB_flagP, rb_idP, rb_idP, rlc_infoP.rlc_mode)) != RLC_OP_STATUS_OK) {
+            if ((status = rrc_rlc_add_rlc(enb_mod_idP, ue_mod_idP, frame, enb_flagP, rb_idP, rb_idP, rlc_infoP.rlc_mode)) != RLC_OP_STATUS_OK) {
               return status;
             }
         case ACTION_MODIFY:
             switch (rlc_infoP.rlc_mode) {
-                case RLC_AM:
+                case RLC_MODE_AM:
                     LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB AM\n",
                             frame,
                             enb_mod_idP,
@@ -858,14 +860,14 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
 
                     config_req_rlc_am(
                       frame,
-                      eNB_flagP,
+                      enb_flagP,
                       enb_mod_idP,
                       ue_mod_idP,
                       &rlc_infoP.rlc.rlc_am_info,
                       rb_idP,
                       rb_typeP);
                     break;
-                case RLC_UM:
+                case RLC_MODE_UM:
                     LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB UM\n",
                             frame,
                             enb_mod_idP,
@@ -873,14 +875,14 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
                             rb_idP);
                     config_req_rlc_um(
                       frame,
-                      eNB_flagP,
+                      enb_flagP,
                       enb_mod_idP,
                       ue_mod_idP,
                       &rlc_infoP.rlc.rlc_um_info,
                       rb_idP,
                       rb_typeP);
                     break;
-                case RLC_TM:
+                case RLC_MODE_TM:
                     LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB TM\n",
                             frame,
                             enb_mod_idP,
@@ -888,7 +890,7 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
                             rb_idP);
                     config_req_rlc_tm(
                       frame,
-                      eNB_flagP,
+                      enb_flagP,
                       enb_mod_idP,
                       ue_mod_idP,
                       &rlc_infoP.rlc.rlc_tm_info,
@@ -901,7 +903,7 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
             break;
 
         case ACTION_REMOVE:
-            return rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, rb_idP, frame, eNB_flagP);
+            return rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, rb_idP, frame, enb_flagP);
             break;
         default:
             return RLC_OP_STATUS_BAD_PARAMETER;
@@ -910,14 +912,14 @@ rlc_op_status_t rrc_rlc_config_req   (module_id_t enb_mod_idP, module_id_t ue_mo
     return RLC_OP_STATUS_OK;
 }
 //-----------------------------------------------------------------------------
-rlc_op_status_t rrc_rlc_data_req     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP) {
+rlc_op_status_t rrc_rlc_data_req     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, MBMS_flag_t MBMS_flagP, rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP) {
 //-----------------------------------------------------------------------------
   mem_block_t*   sdu;
 
   sdu = get_free_mem_block(sdu_sizeP);
   if (sdu != NULL) {
     memcpy (sdu->data, sduP, sdu_sizeP);
-    return rlc_data_req(enb_mod_idP, ue_mod_idP, frame, eNB_flagP, MBMS_flagP, rb_idP, muiP, confirmP, sdu_sizeP, sdu);
+    return rlc_data_req(enb_mod_idP, ue_mod_idP, frame, enb_flagP, MBMS_flagP, rb_idP, muiP, confirmP, sdu_sizeP, sdu);
   } else {
     return RLC_OP_STATUS_INTERNAL_ERROR;
   }
diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c
index aca519ed397a972f8f0fac0190f15b7013c19589..9f8e53df80008cc1e7c7f2c9200a041401d233c5 100644
--- a/openair2/LAYER2/openair2_proc.c
+++ b/openair2/LAYER2/openair2_proc.c
@@ -55,7 +55,7 @@
 #include "LAYER2/RLC/rlc.h"
 #include "LAYER2/MAC/defs.h"
 #include "LAYER2/MAC/extern.h"
-#include "LAYER2/PDCP/pdcp.h"
+#include "LAYER2/PDCP_v10.1.0/pdcp.h"
 #include "UTIL/LOG/log.h"
 
 static mapping rrc_status_names[] = {
diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h
index 5414422dfaf982dbdd0a9efe980e6d1627164060..bb95d5c6b6402bb5927102184d881b8c227bfc38 100755
--- a/openair2/PHY_INTERFACE/defs.h
+++ b/openair2/PHY_INTERFACE/defs.h
@@ -69,34 +69,34 @@ typedef struct
 
     // eNB functions
     /// Invoke dlsch/ulsch scheduling procedure for new subframe
-    void (*eNB_dlsch_ulsch_scheduler)(u8 Mod_id, u8 cooperation_flag, u32 frame, u8 subframe);//, int calibration_flag);
+    void (*eNB_dlsch_ulsch_scheduler)(u8 Mod_id, u8 cooperation_flag, frame_t frameP, u8 subframe);//, int calibration_flag);
 
     /// Fill random access response sdu, passing timing advance
-    u16 (*fill_rar)(u8 Mod_id,u32 frame,u8 *dlsch_buffer,u16 N_RB_UL, u8 input_buffer_length);
+    u16 (*fill_rar)(u8 Mod_id,frame_t frameP,u8 *dlsch_buffer,u16 N_RB_UL, u8 input_buffer_length);
 
     /// Terminate the RA procedure upon reception of l3msg on ulsch
-    void (*terminate_ra_proc)(u8 Mod_id,u32 frame,u16 UE_id, u8 *l3msg, u16 l3msg_len);
+    void (*terminate_ra_proc)(u8 Mod_id,frame_t frameP,u16 UE_id, u8 *l3msg, u16 l3msg_len);
 
     /// Initiate the RA procedure upon reception (hypothetical) of a valid preamble
-    void (*initiate_ra_proc)(u8 Mod_id,u32 frame,u16 preamble,s16 timing_offset,u8 sect_id,u8 subframe,u8 f_id);
+    void (*initiate_ra_proc)(u8 Mod_id,frame_t frameP,u16 preamble,s16 timing_offset,u8 sect_id,u8 subframe,u8 f_id);
 
     /// cancel an ongoing RA procedure 
-    void (*cancel_ra_proc)(u8 Mod_id,u32 frame,u16 preamble);
+    void (*cancel_ra_proc)(u8 Mod_id,frame_t frameP,u16 preamble);
 
     /// Get DCI for current subframe from MAC
-    DCI_PDU* (*get_dci_sdu)(u8 Mod_id,u32 frame,u8 subframe);
+    DCI_PDU* (*get_dci_sdu)(u8 Mod_id,frame_t frameP,u8 subframe);
 
     /// Get DLSCH sdu for particular RNTI and Transport block index
-    u8* (*get_dlsch_sdu)(u8 Mod_id,u32 frame,u16 rnti,u8 TB_index);
+    u8* (*get_dlsch_sdu)(u8 Mod_id,frame_t frameP,u16 rnti,u8 TB_index);
 
     /// Send ULSCH sdu to MAC for given rnti
-    void (*rx_sdu)(u8 Mod_id,u32 frame,u16 rnti, u8 *sdu,u16 sdu_len);
+    void (*rx_sdu)(u8 Mod_id,frame_t frameP,u16 rnti, u8 *sdu,u16 sdu_len);
 
     /// Indicate failure to synch to external source
-    void (*mrbch_phy_sync_failure) (u8 Mod_id,u32 frame, u8 free_eNB_index);
+    void (*mrbch_phy_sync_failure) (u8 Mod_id,frame_t frameP, u8 free_eNB_index);
 
     /// Indicate Scheduling Request from UE
-    void (*SR_indication)(u8 Mod_id,u32 frame,u16 rnti,u8 subframe);
+    void (*SR_indication)(u8 Mod_id,frame_t frameP,u16 rnti,u8 subframe);
 
     /// Configure Common PHY parameters from SIB1
     void (*phy_config_sib1_eNB)(u8 Mod_id,
@@ -124,7 +124,7 @@ typedef struct
 
 #ifdef Rel10
     /// Get MCH sdu and corresponding MCS for particular MBSFN subframe
-    MCH_PDU* (*get_mch_sdu)(uint8_t Mod_id,uint32_t frame,uint32_t subframe);
+    MCH_PDU* (*get_mch_sdu)(uint8_t Mod_id,frame_t frameP,uint32_t subframe);
 #endif
     // configure the cba rnti at the physical layer 
     void (*phy_config_cba_rnti)(u8 Mod_id,u8 eNB_flag, u8 index, u16 cba_rnti, u8 cba_group_id, u8 num_active_cba_groups);
@@ -135,40 +135,40 @@ typedef struct
     void (*phy_reset_ue)(u8 Mod_id,u8 eNB_index);
     
     /// Indicate loss of synchronization of PBCH for this eNB to MAC layer
-    void (*out_of_sync_ind)(u8 Mod_id,u32 frame,u16 eNB_index);
+    void (*out_of_sync_ind)(u8 Mod_id,frame_t frameP,u16 eNB_index);
 
     ///  Send a received SI sdu
-    void (*ue_decode_si)(u8 Mod_id,u32 frame, u8 CH_index, void *pdu, u16 len);
+    void (*ue_decode_si)(u8 Mod_id,frame_t frameP, u8 CH_index, void *pdu, u16 len);
 
     /// Send a received DLSCH sdu to MAC
-    void (*ue_send_sdu)(u8 Mod_id,u32 frame,u8 *sdu,u16 sdu_len,u8 CH_index);
+    void (*ue_send_sdu)(u8 Mod_id,frame_t frameP,u8 *sdu,u16 sdu_len,u8 CH_index);
 
 #ifdef Rel10
     /// Send a received MCH sdu to MAC
-    void (*ue_send_mch_sdu)(u8 Mod_id,u32 frame,u8 *sdu,u16 sdu_len,u8 eNB_index,u8 sync_area);
+    void (*ue_send_mch_sdu)(u8 Mod_id,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eNB_index,u8 sync_area);
 
     /// Function to check if UE PHY needs to decode MCH for MAC
     /// get the sync area id, and teturn MCS value if need to decode, otherwise -1
-    int (*ue_query_mch)(uint8_t Mod_id,uint32_t frame,uint32_t subframe,uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active);
+    int (*ue_query_mch)(uint8_t Mod_id,frame_t frameP,uint32_t subframe,uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active);
 #endif
 
   /// Retrieve ULSCH sdu from MAC
-    void (*ue_get_sdu)(u8 Mod_id,u32 frame,u8 subframe, u8 CH_index,u8 *ulsch_buffer,u16 buflen,u8 *access_mode);
+    void (*ue_get_sdu)(u8 Mod_id,frame_t frameP,u8 subframe, u8 CH_index,u8 *ulsch_buffer,u16 buflen,u8 *access_mode);
 
     /// Retrieve RRCConnectionReq from MAC
-    PRACH_RESOURCES_t* (*ue_get_rach)(u8 Mod_id,u32 frame,u8 Msg3_flag,u8 subframe);
+    PRACH_RESOURCES_t* (*ue_get_rach)(u8 Mod_id,frame_t frameP,u8 Msg3_flag,u8 subframe);
 
     /// Process Random-Access Response
-    u16 (*ue_process_rar)(u8 Mod_id,u32 frame,u8 *dlsch_buffer,u16 *t_crnti,u8 preamble_index);
+    u16 (*ue_process_rar)(u8 Mod_id,frame_t frameP,u8 *dlsch_buffer,u16 *t_crnti,u8 preamble_index);
 
     /// Get SR payload (0,1) from UE MAC
-    u32 (*ue_get_SR)(u8 Mod_id,u32 frame,u8 eNB_id,u16 rnti,u8 subframe);
+    u32 (*ue_get_SR)(u8 Mod_id,frame_t frameP,u8 eNB_id,u16 rnti,u8 subframe);
 
     /// Indicate synchronization with valid PBCH
-    void (*dl_phy_sync_success) (u8 Mod_id,u32 frame, u8 CH_index,u8 first_sync);
+    void (*dl_phy_sync_success) (u8 Mod_id,frame_t frameP, u8 CH_index,u8 first_sync);
 
     /// Only calls the PDCP for now
-    UE_L2_STATE_t (*ue_scheduler)(u8 Mod_id, u32 frame,u8 subframe, lte_subframe_t direction,u8 eNB_id);
+    UE_L2_STATE_t (*ue_scheduler)(u8 Mod_id, frame_t frameP,u8 subframe, lte_subframe_t direction,u8 eNB_id);
 
     /// PHY-Config-Dedicated UE
     void (*phy_config_dedicated_ue)(u8 Mod_id,u8 CH_index,
@@ -205,10 +205,10 @@ typedef struct
     void (*ra_succeeded)(u8 Mod_id,u8 eNB_index);
 
     /// Function to indicate the transmission of msg1/rach to MAC
-    void (*Msg1_transmitted)(u8 Mod_id,u32 frame,u8 eNB_id);
+    void (*Msg1_transmitted)(u8 Mod_id,frame_t frameP,u8 eNB_id);
 
     /// Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer
-    void (*Msg3_transmitted)(u8 Mod_id,u32 frame,u8 eNB_id);
+    void (*Msg3_transmitted)(u8 Mod_id,frame_t frameP,u8 eNB_id);
 
     /// Function to pass inter-cell measurement parameters to PHY (cell Ids)
     void (*phy_config_meas_ue)(u8 Mod_id,u8 eNB_index,u8 n_adj_cells,u32 *adj_cell_id);
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
index 12d1fa4d2c3541957554fd621956e7a768ade168..034faa01986a685fe89399388317f18eda2e883b 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
@@ -89,122 +89,72 @@
 /********************************************************************************************************************/
 s8 mac_rrc_data_req(module_id_t module_idP, frame_t frameP, rb_id_t srb_idP, u8 nb_tbP,u8 *buffer_pP, eNB_flag_t eNB_flagP, u8 eNB_indexP, u8 mbsfn_sync_areaP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  return(rrc_L2_data_req_rx(module_idP,srb_idP,nb_tbP,buffer_pP,eNB_indexP));
-#else 
   return(mac_rrc_lite_data_req(module_idP,frameP,srb_idP,nb_tbP,buffer_pP,eNB_flagP,eNB_indexP,mbsfn_sync_areaP));
-#endif //CELLULAR
 }   
 
 /********************************************************************************************************************/
 s8 mac_rrc_data_ind(module_id_t module_idP, frame_t frameP, rb_id_t srb_idP, u8 *sduP, sdu_size_t sdu_lenP, eNB_flag_t eNB_flagP, u8 eNB_indexP,u8 mbsfn_sync_area){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  return(rrc_L2_mac_data_ind_rx(module_idP, Srb_id, Sdu, Sdu_len, eNB_indexP));
-#else 
   return(mac_rrc_lite_data_ind(module_idP,frameP,srb_idP,sduP,sdu_lenP,eNB_flagP,eNB_indexP,mbsfn_sync_area));
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 void rlcrrc_data_ind(module_id_t enb_instP, module_id_t ue_instP, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t srb_idP, sdu_size_t sdu_lenP,u8 *buffer_pP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_rlc_data_ind_rx(module_idP,Srb_id, sdu_lenP, buffer_pP);
-#else  // now this is called from PDCP
-  //rlcrrc_lite_data_ind(module_idP,frameP,eNB_flag,Srb_id,Sdu_size,Buffer);
   rrc_lite_data_ind(enb_instP, ue_instP,frameP,eNB_flagP,srb_idP,sdu_lenP,buffer_pP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 u8 pdcp_rrc_data_req(module_id_t enb_instP, module_id_t ue_instP, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t rb_idP, mui_t muiP, boolean_t confirmP,
       sdu_size_t sdu_buffer_sizeP, u8* sdu_buffer_pP, u8 modeP) {
   /********************************************************************************************************************/
-#ifdef CELLULAR
-  return pdcp_data_req( module_id, frameP, eNB_flag, rb_id, muiP, confirmP, sdu_buffer_sizeP, sdu_buffer_pP, modeP);
-#else
   return rrc_lite_data_req (enb_instP, ue_instP, frameP, eNB_flagP, rb_idP, muiP, confirmP, sdu_buffer_sizeP, sdu_buffer_pP, modeP);
-#endif
 }
 
 /********************************************************************************************************************/
 void pdcp_rrc_data_ind(module_id_t enb_instP, module_id_t ue_instP, frame_t frameP, eNB_flag_t eNB_flagP, rb_id_t srb_idP, sdu_size_t sdu_sizeP,u8 *buffer_pP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_rlc_data_ind_rx(module_idP,srb_idP, sdu_sizeP, buffer_pP);
-#else  // now this is called from PDCP
-  //rlcrrc_lite_data_ind(module_idP,frameP,eNB_flag,Srb_id,Sdu_size,Buffer);
   rrc_lite_data_ind(enb_instP, ue_instP,frameP,eNB_flagP,srb_idP,sdu_sizeP,buffer_pP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 void mac_rrc_meas_ind(module_id_t module_idP,MAC_MEAS_REQ_ENTRY *Meas_entry_pP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_mac_meas_ind_rx ();
-#else
   //  mac_rrc_meas_ind(module_idP,Meas_entry_pP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 void mac_sync_ind(module_id_t module_idP,u8 Status){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_sync_ind_rx(module_idP);
-#else 
   mac_lite_sync_ind(module_idP,Status);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 void mac_in_sync_ind(module_id_t module_idP,frame_t frameP, u16 eNB_indexP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_sync_ind_rx(module_idP);
-#else
   rrc_lite_in_sync_ind(module_idP,frameP,eNB_indexP);
-#endif
 }
 
 /********************************************************************************************************************/
 void mac_out_of_sync_ind(module_id_t module_idP,frame_t frameP, u16 eNB_indexP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  rrc_L2_out_sync_ind_rx();
-#else 
   rrc_lite_out_of_sync_ind(module_idP,frameP,eNB_indexP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 int mac_get_rrc_status(module_id_t module_idP,eNB_flag_t eNB_flagP,u8 indexP) {
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  return (rrc_L2_get_rrc_status(module_idP,eNB_flagP,indexP));
-#else 
   return mac_get_rrc_lite_status(module_idP, eNB_flagP, indexP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 char openair_rrc_ue_init(module_id_t module_idP, unsigned char eNB_indexP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
-  return (rrc_L2_ue_init(module_idP,eNB_indexP));
-#else 
   return openair_rrc_lite_ue_init(module_idP, eNB_indexP);
-#endif //CELLULAR
 }
 
 /********************************************************************************************************************/
 char openair_rrc_eNB_init(module_id_t module_idP){
 /********************************************************************************************************************/
-#ifdef CELLULAR
- return( rrc_L2_eNB_init(module_idP));
-#else 
   return openair_rrc_lite_eNB_init(module_idP);
-#endif //CELLULAR
 }
diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c
index 7d19f4f25e9a8b1511ab891edeca503eb17b752a..310cbf90d66f55628ca3bda563a70ce27c5ca887 100644
--- a/openair2/RRC/LITE/rrc_common.c
+++ b/openair2/RRC/LITE/rrc_common.c
@@ -123,13 +123,13 @@ int rrc_init_global_param(void) {
   DTCH_UL_LCHAN_DESC.max_transport_blocks = 20;
   DTCH_UL_LCHAN_DESC.Delay_class = 1;
 
-  Rlc_info_um.rlc_mode = RLC_UM;
+  Rlc_info_um.rlc_mode = RLC_MODE_UM;
   Rlc_info_um.rlc.rlc_um_info.timer_reordering = 5;
   Rlc_info_um.rlc.rlc_um_info.sn_field_length = 10;
   Rlc_info_um.rlc.rlc_um_info.is_mXch = 0;
   //Rlc_info_um.rlc.rlc_um_info.sdu_discard_mode=16;
 
-  Rlc_info_am_config.rlc_mode = RLC_AM;
+  Rlc_info_am_config.rlc_mode = RLC_MODE_AM;
   Rlc_info_am_config.rlc.rlc_am_info.max_retx_threshold = 50;
   Rlc_info_am_config.rlc.rlc_am_info.poll_pdu = 8;
   Rlc_info_am_config.rlc.rlc_am_info.poll_byte = 1000;
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 5d499b32bee19bb0f997634558b94f64946c8da7..d604e4324f37b62e08b294eef427e88421b8a953 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -2486,7 +2486,7 @@ char openair_rrc_lite_eNB_init (module_id_t Mod_id)
 }
 char openair_rrc_lite_eNB_configuration (u8 Mod_id, RrcConfigurationReq *configuration)
 #else
-char openair_rrc_lite_eNB_init (u8 Mod_id)
+char openair_rrc_lite_eNB_init (module_id_t Mod_id)
 #endif
 {
   /*-----------------------------------------------------------------------------*/
@@ -2599,11 +2599,9 @@ int rrc_eNB_decode_ccch (module_id_t Mod_id, frame_t frameP, SRB_INFO * Srb_info
 {
   /*------------------------------------------------------------------------------*/
 
-  u16 Idx, UE_index;
-
-  asn_dec_rval_t dec_rval;
-  //UL_CCCH_Message_t ulccchmsg;
-  UL_CCCH_Message_t *ul_ccch_msg = NULL;        //&ulccchmsg;
+  u16                            Idx, UE_index;
+  asn_dec_rval_t                 dec_rval;
+  UL_CCCH_Message_t             *ul_ccch_msg = NULL;
   RRCConnectionRequest_r8_IEs_t *rrcConnectionRequest;
   int i, rval;
 
diff --git a/targets/SIMU/PROC/Process.c b/targets/SIMU/PROC/Process.c
index 7638ccca8e58b719415ef60a6e329db4e97f4082..cafa10792aa8eecca3a6b7f0cd4f014a8cd4b742 100644
--- a/targets/SIMU/PROC/Process.c
+++ b/targets/SIMU/PROC/Process.c
@@ -34,429 +34,430 @@
 
 //#define DEBUG_SIM
 void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
-		node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
+    node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
 
-if(node_id<MAX_eNB)
-	eNB_Inst(node_id,port,r_re0,r_im0,r_re,r_im,s_re,s_im,enb_data,abstraction_flag,frame_parms);
-else
-	UE_Inst(node_id,port,r_re0,r_im0,r_re,r_im,s_re,s_im,ue_data,abstraction_flag,frame_parms);
+  if(node_id<MAX_eNB)
+    eNB_Inst(node_id,port,r_re0,r_im0,r_re,r_im,s_re,s_im,enb_data,abstraction_flag,frame_parms);
+  else
+    UE_Inst(node_id,port,r_re0,r_im0,r_re,r_im,s_re,s_im,ue_data,abstraction_flag,frame_parms);
 
 
 }
 void UE_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
-		node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
-
-
-	 int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
-	 lte_subframe_t direction;
-	 printf("UE [ %d ] Starts \n",node_id-MAX_eNB);
-//	 init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
-	 init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
-	 mmap_ue(node_id,&PHY_vars_UE_g[0]->lte_ue_common_vars.txdata,&PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata,frame_parms);
-
-	// Interface_init(port,node_id);
-	 char p_input[FILENAMEMAX];
-	 int fd_pipe;
-	 int fd_channel;
-	 mkfifo("/tmp/channel", 0666);
-	 fd_channel=open("/tmp/channel",O_RDWR,0);
-	 sprintf(p_input,"/tmp/pipe_%d",node_id);
-	 mkfifo(p_input, 0666);
-	 fd_pipe=open(p_input,O_RDWR,0);
-	// IntInitAll();
-	 mac_xface->frame=0;
-	 while(1){
-		 // wait_4slot(&slot,&mac_xface->frame);
-		 read(fd_pipe,&slot,sizeof(slot));
-
-	    last_slot = (slot - 1)%20;
-	    if (last_slot <0)
-	    	last_slot+=20;
-	    next_slot = (slot + 1)%20;
-
-	    direction = subframe_select(frame_parms,next_slot>>1);
-		#ifdef DEBUG_SIM
-			printf("\n\n[SIM] EMU PHY procedures UE %d for frame %d, slot %d (subframe %d)\n",
-	    		UE_id,mac_xface->frame, slot, (next_slot >> 1));
-		#endif
-	    if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) {
-	    	if ((mac_xface->frame)>0) {
-	    		phy_procedures_UE_lte ((last_slot),(next_slot), PHY_vars_UE_g[UE_id], 0, abstraction_flag);
-	    	}
-	    }
-	    else {
-	    	if (((mac_xface->frame)>0) && ((last_slot) == (SLOTS_PER_FRAME-1))) {
-	    		initial_sync(PHY_vars_UE_g[UE_id]);
-	    	}
-	    }
-
-
-		if( direction == SF_UL || (direction == SF_S && next_slot%2!=0)){
-			  do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms);
-		  }
-
-           write(fd_channel,&node_id,sizeof(node_id));
-	     //  send_exec_complete(CHANNEL_PORT);
-           if(slot==19)
-        	   (mac_xface->frame)++;
-
-	     }
+    node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
+
+
+  int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
+  lte_subframe_t direction;
+  printf("UE [ %d ] Starts \n",node_id-MAX_eNB);
+  //	 init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
+  init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
+  mmap_ue(node_id,&PHY_vars_UE_g[0]->lte_ue_common_vars.txdata,&PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata,frame_parms);
+
+  // Interface_init(port,node_id);
+  char p_input[FILENAMEMAX];
+  int fd_pipe;
+  int fd_channel;
+  mkfifo("/tmp/channel", 0666);
+  fd_channel=open("/tmp/channel",O_RDWR,0);
+  sprintf(p_input,"/tmp/pipe_%d",node_id);
+  mkfifo(p_input, 0666);
+  fd_pipe=open(p_input,O_RDWR,0);
+  // IntInitAll();
+  mac_xface->frame=0;
+  while(1){
+      // wait_4slot(&slot,&mac_xface->frame);
+      read(fd_pipe,&slot,sizeof(slot));
+
+      last_slot = (slot - 1)%20;
+      if (last_slot <0)
+        last_slot+=20;
+      next_slot = (slot + 1)%20;
+
+      direction = subframe_select(frame_parms,next_slot>>1);
+#ifdef DEBUG_SIM
+      printf("\n\n[SIM] EMU PHY procedures UE %d for frame %d, slot %d (subframe %d)\n",
+          UE_id,mac_xface->frame, slot, (next_slot >> 1));
+#endif
+      if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) {
+          if ((mac_xface->frame)>0) {
+              phy_procedures_UE_lte ((last_slot),(next_slot), PHY_vars_UE_g[UE_id], 0, abstraction_flag);
+          }
+      }
+      else {
+          if (((mac_xface->frame)>0) && ((last_slot) == (SLOTS_PER_FRAME-1))) {
+              initial_sync(PHY_vars_UE_g[UE_id]);
+          }
+      }
+
+
+      if( direction == SF_UL || (direction == SF_S && next_slot%2!=0)){
+          do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms);
+      }
+
+      write(fd_channel,&node_id,sizeof(node_id));
+      //  send_exec_complete(CHANNEL_PORT);
+      if(slot==19)
+        (mac_xface->frame)++;
+
+  }
 
 }
 
 void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
-		node_desc_t *enb_data[NUMBER_OF_eNB_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
-	int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
-	lte_subframe_t direction;
-	 printf("eNB [ %d ] Starts \n",node_id);
-
-	// init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
-	  init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
-	  mmap_enb(node_id,PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata,PHY_vars_eNB_g[0]->lte_eNB_common_vars.rxdata,frame_parms);
-
-	// Interface_init(port,node_id);
-	// IntInitAll();
-	 char p_input[FILENAMEMAX];
-	 int fd_pipe;
-	 int fd_channel;
-	 mkfifo("/tmp/channel", 0666);
-	 fd_channel=open("/tmp/channel",O_RDWR,0);
-	 sprintf(p_input,"/tmp/pipe_%d",node_id);
-	 mkfifo(p_input, 0666);
-	 fd_pipe=open(p_input, O_RDWR,0);
-	 mac_xface->frame=0;
-
-	  while(1){
-	     // wait_4slot(&slot,&mac_xface->frame);
-		  read(fd_pipe,&slot,sizeof(slot));
-
-		  last_slot = (slot - 1)%20;
-	      if (last_slot <0)
-	    	  last_slot+=20;
-	      next_slot = (slot + 1)%20;
-	      direction = subframe_select(frame_parms,next_slot>>1);
-	#ifdef DEBUG_SIM
-	  	printf
-	  	  ("\n\n [SIM]EMU PHY procedures eNB %d for frame %d, slot %d (subframe %d) (rxdataF_ext %p) Nid_cell %d\n",
-	  	   eNB_id, mac_xface->frame, slot, next_slot >> 1,
-	  	   PHY_vars_eNB_g[0]->lte_eNB_ulsch_vars[0]->rxdataF_ext, PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell);
-	#endif
-			phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag);
-
-			if( direction == SF_DL || (direction == SF_S && next_slot%2==0)){
-				  do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0],
-				  	        			  PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0],
-				  	        			  next_slot,
-				  	        			  &PHY_vars_eNB_g[eNB_id]->lte_frame_parms);
-			  }
-
-	           write(fd_channel,&node_id,sizeof(node_id));
-	      //  send_exec_complete(CHANNEL_PORT);
-	           if(slot==19)
-	           	(mac_xface->frame)++;
-	      }
+    node_desc_t *enb_data[NUMBER_OF_eNB_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
+  int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
+  lte_subframe_t direction;
+  printf("eNB [ %d ] Starts \n",node_id);
+
+  // init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
+  init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
+  mmap_enb(node_id,PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata,PHY_vars_eNB_g[0]->lte_eNB_common_vars.rxdata,frame_parms);
+
+  // Interface_init(port,node_id);
+  // IntInitAll();
+  char p_input[FILENAMEMAX];
+  int fd_pipe;
+  int fd_channel;
+
+  mkfifo("/tmp/channel", 0666);
+  fd_channel=open("/tmp/channel",O_RDWR,0);
+  sprintf(p_input,"/tmp/pipe_%d",node_id);
+  mkfifo(p_input, 0666);
+  fd_pipe=open(p_input, O_RDWR,0);
+  mac_xface->frame=0;
+
+  while(1){
+      // wait_4slot(&slot,&mac_xface->frame);
+      read(fd_pipe,&slot,sizeof(slot));
+
+      last_slot = (slot - 1)%20;
+      if (last_slot <0)
+        last_slot+=20;
+      next_slot = (slot + 1)%20;
+      direction = subframe_select(frame_parms,next_slot>>1);
+#ifdef DEBUG_SIM
+      printf
+      ("\n\n [SIM]EMU PHY procedures eNB %d for frame %d, slot %d (subframe %d) (rxdataF_ext %p) Nid_cell %d\n",
+          eNB_id, mac_xface->frame, slot, next_slot >> 1,
+          PHY_vars_eNB_g[0]->lte_eNB_ulsch_vars[0]->rxdataF_ext, PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell);
+#endif
+      phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag);
+
+      if( direction == SF_DL || (direction == SF_S && next_slot%2==0)){
+          do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0],
+              PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0],
+              next_slot,
+              &PHY_vars_eNB_g[eNB_id]->lte_frame_parms);
+      }
+
+      write(fd_channel,&node_id,sizeof(node_id));
+      //  send_exec_complete(CHANNEL_PORT);
+      if(slot==19)
+        (mac_xface->frame)++;
+  }
 
 }
 
 void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
-double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
-channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
-
-	// Interface_init(port,node_id);
-	// IntInitAll();
-	 mkfifo("/tmp/channel", 0666);
-	 fd_channel=open("/tmp/channel", O_RDWR ,0);
-
-	int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
-	lte_subframe_t direction;
-	char in_buffer[100];
-
-	  int ci,ji=0;
-	  for(ci=0;ci<NB_eNB_INST;ci++)
-	  {
-	  mmap_enb(ji,tx[ci],rx[ci],frame_parms);
-	  init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
-	 // init_mmap_channel(ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
-	  sprintf(in_buffer, "/tmp/pipe_%d",ji);
-	  mkfifo(in_buffer, 0666);
-	  fd_NB[ci]=open(in_buffer, O_RDWR ,0);
-	  ji++;
-	  }
-	  ji=0;
-	  for(ci=NB_eNB_INST;ci<(NB_eNB_INST+NB_UE_INST);ci++)
-	  {
-	  mmap_enb(MAX_eNB+ji,tx[ci],rx[ci],frame_parms);
-	  init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
-	  //  init_mmap_channel(MAX_eNB+ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
-	  sprintf(in_buffer, "/tmp/pipe_%d",MAX_eNB+ji);
-	  mkfifo(in_buffer, 0666);
-
-	  fd_NB[ci]=open(in_buffer, O_RDWR ,0);
-	  ji++;
-	  }
-
-	  for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
-	  for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
-	  init_rre(frame_parms,&(r_re0_u[eNB_id][UE_id]),&(r_im0_u[eNB_id][UE_id]));
-	  init_rre(frame_parms,&(r_re0_d[UE_id][eNB_id]),&(r_im0_d[UE_id][eNB_id]));
-	  }
-	  }
-
-	  for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
-		  for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
-			  e2u_t[eNB_id][UE_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
-		  }
-	  }
-
-	 for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
-		 for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
-			 u2e_t[UE_id][eNB_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
-		 }
-	 }
-
-	 pthread_t cthr_u[NB_eNB_INST][NB_UE_INST];
-	 pthread_t cthr_d[NB_UE_INST][NB_eNB_INST];
-
-
-	 pthread_mutex_init(&downlink_mutex_channel,NULL);
-	 pthread_mutex_init(&uplink_mutex_channel,NULL);
-	 pthread_mutex_init(&exclusive,NULL);
-
-	    if (pthread_cond_init (&downlink_cond_channel, NULL)) exit(1);
-	    if (pthread_cond_init (&uplink_cond_channel, NULL)) exit(1);
-	 	if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1);
-	 	if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1);
-
-	     NUM_THREAD_DOWNLINK=0;
-	    for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-	  	  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-	  		  u2e_t[UE_id][eNB_id]->thread_id=NUM_THREAD_DOWNLINK;
-	  		  u2e_t[UE_id][eNB_id]->eNB_id=eNB_id;
-	  		  u2e_t[UE_id][eNB_id]->UE_id=UE_id;
-	  		  u2e_t[UE_id][eNB_id]->r_re0=r_re0_d[UE_id][eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->r_im0=r_im0_d[UE_id][eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->r_re=r_re[NB_eNB_INST+UE_id];
-	  		  u2e_t[UE_id][eNB_id]->r_im=r_im[NB_eNB_INST+UE_id];
-	  		  u2e_t[UE_id][eNB_id]->s_im=s_im[eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->s_re=s_re[eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
-	  		  u2e_t[UE_id][eNB_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->enb_data=enb_data[eNB_id];
-	  		  u2e_t[UE_id][eNB_id]->ue_data=ue_data[UE_id];
-	  		  u2e_t[UE_id][eNB_id]->next_slot=&next_slot;
-	  		  u2e_t[UE_id][eNB_id]->abstraction_flag=&abstraction_flag;
-	  		  u2e_t[UE_id][eNB_id]->frame_parms=frame_parms;
-	  		  u2e_t[UE_id][eNB_id]->tx_data[3]=tx[eNB_id][3];
-	  		  u2e_t[UE_id][eNB_id]->rx_data[3]=rx[NB_eNB_INST+UE_id][3];
-			  if(pthread_cond_init (&downlink_cond[eNB_id][UE_id], NULL)) exit(1);
-			  if(pthread_mutex_lock(&downlink_mutex[eNB_id][UE_id])) exit(1);
-			  pthread_create (&cthr_d[UE_id][eNB_id], NULL, do_DL_sig_channel_T,(void*)(u2e_t[UE_id][eNB_id]));
-			  NUM_THREAD_DOWNLINK++;
-	  	  }
-	    }
-
-	     NUM_THREAD_UPLINK=0;
-	  	  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-	  	    for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-	  	    	e2u_t[eNB_id][UE_id]->thread_id=NUM_THREAD_UPLINK;
-	  	    	e2u_t[eNB_id][UE_id]->eNB_id=eNB_id;
-	  	    	e2u_t[eNB_id][UE_id]->UE_id=UE_id;
-	  	    	e2u_t[eNB_id][UE_id]->r_re=r_re[eNB_id];
-	  	    	e2u_t[eNB_id][UE_id]->r_im=r_im[eNB_id];
-	  	    	e2u_t[eNB_id][UE_id]->r_re0=r_re0_u[eNB_id][UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->r_im0=r_im0_u[eNB_id][UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->s_im=s_im[NB_eNB_INST+UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->s_re=s_re[NB_eNB_INST+UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
-	  	    	e2u_t[eNB_id][UE_id]->enb_data=enb_data[eNB_id];
-	  	    	e2u_t[eNB_id][UE_id]->ue_data=ue_data[UE_id];
-	  	    	e2u_t[eNB_id][UE_id]->next_slot=&next_slot;
-	  	    	e2u_t[eNB_id][UE_id]->abstraction_flag=&abstraction_flag;
-	  	    	e2u_t[eNB_id][UE_id]->frame_parms=frame_parms;
-	  	    	e2u_t[eNB_id][UE_id]->tx_data[3]=tx[NB_eNB_INST+UE_id][3];
-	  	    	e2u_t[eNB_id][UE_id]->rx_data[3]=rx[eNB_id][3];
-	  	    	if(pthread_cond_init (&uplink_cond[UE_id][eNB_id], NULL)) exit(1);
-	  	    	if(pthread_mutex_lock(&uplink_mutex[UE_id][eNB_id])) exit(1);
-	  	    	pthread_create (&cthr_u[eNB_id][UE_id], NULL, do_UL_sig_channel_T,(void*)e2u_t[eNB_id][UE_id]);
-	  	    	NUM_THREAD_UPLINK++;
-       }
-          }
+    double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
+    channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
+
+  // Interface_init(port,node_id);
+  // IntInitAll();
+  mkfifo("/tmp/channel", 0666);
+  fd_channel=open("/tmp/channel", O_RDWR ,0);
+
+  int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
+  lte_subframe_t direction;
+  char in_buffer[100];
+
+  int ci,ji=0;
+  for(ci=0;ci<NB_eNB_INST;ci++)
+    {
+      mmap_enb(ji,tx[ci],rx[ci],frame_parms);
+      init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
+      // init_mmap_channel(ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
+      sprintf(in_buffer, "/tmp/pipe_%d",ji);
+      mkfifo(in_buffer, 0666);
+      fd_NB[ci]=open(in_buffer, O_RDWR ,0);
+      ji++;
+    }
+  ji=0;
+  for(ci=NB_eNB_INST;ci<(NB_eNB_INST+NB_UE_INST);ci++)
+    {
+      mmap_enb(MAX_eNB+ji,tx[ci],rx[ci],frame_parms);
+      init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
+      //  init_mmap_channel(MAX_eNB+ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
+      sprintf(in_buffer, "/tmp/pipe_%d",MAX_eNB+ji);
+      mkfifo(in_buffer, 0666);
+
+      fd_NB[ci]=open(in_buffer, O_RDWR ,0);
+      ji++;
+    }
+
+  for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
+      for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
+          init_rre(frame_parms,&(r_re0_u[eNB_id][UE_id]),&(r_im0_u[eNB_id][UE_id]));
+          init_rre(frame_parms,&(r_re0_d[UE_id][eNB_id]),&(r_im0_d[UE_id][eNB_id]));
+      }
+  }
+
+  for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
+      for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
+          e2u_t[eNB_id][UE_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
+      }
+  }
+
+  for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
+      for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
+          u2e_t[UE_id][eNB_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
+      }
+  }
+
+  pthread_t cthr_u[NB_eNB_INST][NB_UE_INST];
+  pthread_t cthr_d[NB_UE_INST][NB_eNB_INST];
+
+
+  pthread_mutex_init(&downlink_mutex_channel,NULL);
+  pthread_mutex_init(&uplink_mutex_channel,NULL);
+  pthread_mutex_init(&exclusive,NULL);
+
+  if (pthread_cond_init (&downlink_cond_channel, NULL)) exit(1);
+  if (pthread_cond_init (&uplink_cond_channel, NULL)) exit(1);
+  if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1);
+  if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1);
+
+  NUM_THREAD_DOWNLINK=0;
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+      for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+          u2e_t[UE_id][eNB_id]->thread_id=NUM_THREAD_DOWNLINK;
+          u2e_t[UE_id][eNB_id]->eNB_id=eNB_id;
+          u2e_t[UE_id][eNB_id]->UE_id=UE_id;
+          u2e_t[UE_id][eNB_id]->r_re0=r_re0_d[UE_id][eNB_id];
+          u2e_t[UE_id][eNB_id]->r_im0=r_im0_d[UE_id][eNB_id];
+          u2e_t[UE_id][eNB_id]->r_re=r_re[NB_eNB_INST+UE_id];
+          u2e_t[UE_id][eNB_id]->r_im=r_im[NB_eNB_INST+UE_id];
+          u2e_t[UE_id][eNB_id]->s_im=s_im[eNB_id];
+          u2e_t[UE_id][eNB_id]->s_re=s_re[eNB_id];
+          u2e_t[UE_id][eNB_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
+          u2e_t[UE_id][eNB_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
+          u2e_t[UE_id][eNB_id]->enb_data=enb_data[eNB_id];
+          u2e_t[UE_id][eNB_id]->ue_data=ue_data[UE_id];
+          u2e_t[UE_id][eNB_id]->next_slot=&next_slot;
+          u2e_t[UE_id][eNB_id]->abstraction_flag=&abstraction_flag;
+          u2e_t[UE_id][eNB_id]->frame_parms=frame_parms;
+          u2e_t[UE_id][eNB_id]->tx_data[3]=tx[eNB_id][3];
+          u2e_t[UE_id][eNB_id]->rx_data[3]=rx[NB_eNB_INST+UE_id][3];
+          if(pthread_cond_init (&downlink_cond[eNB_id][UE_id], NULL)) exit(1);
+          if(pthread_mutex_lock(&downlink_mutex[eNB_id][UE_id])) exit(1);
+          pthread_create (&cthr_d[UE_id][eNB_id], NULL, do_DL_sig_channel_T,(void*)(u2e_t[UE_id][eNB_id]));
+          NUM_THREAD_DOWNLINK++;
+      }
+  }
+
+  NUM_THREAD_UPLINK=0;
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+          e2u_t[eNB_id][UE_id]->thread_id=NUM_THREAD_UPLINK;
+          e2u_t[eNB_id][UE_id]->eNB_id=eNB_id;
+          e2u_t[eNB_id][UE_id]->UE_id=UE_id;
+          e2u_t[eNB_id][UE_id]->r_re=r_re[eNB_id];
+          e2u_t[eNB_id][UE_id]->r_im=r_im[eNB_id];
+          e2u_t[eNB_id][UE_id]->r_re0=r_re0_u[eNB_id][UE_id];
+          e2u_t[eNB_id][UE_id]->r_im0=r_im0_u[eNB_id][UE_id];
+          e2u_t[eNB_id][UE_id]->s_im=s_im[NB_eNB_INST+UE_id];
+          e2u_t[eNB_id][UE_id]->s_re=s_re[NB_eNB_INST+UE_id];
+          e2u_t[eNB_id][UE_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
+          e2u_t[eNB_id][UE_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
+          e2u_t[eNB_id][UE_id]->enb_data=enb_data[eNB_id];
+          e2u_t[eNB_id][UE_id]->ue_data=ue_data[UE_id];
+          e2u_t[eNB_id][UE_id]->next_slot=&next_slot;
+          e2u_t[eNB_id][UE_id]->abstraction_flag=&abstraction_flag;
+          e2u_t[eNB_id][UE_id]->frame_parms=frame_parms;
+          e2u_t[eNB_id][UE_id]->tx_data[3]=tx[NB_eNB_INST+UE_id][3];
+          e2u_t[eNB_id][UE_id]->rx_data[3]=rx[eNB_id][3];
+          if(pthread_cond_init (&uplink_cond[UE_id][eNB_id], NULL)) exit(1);
+          if(pthread_mutex_lock(&uplink_mutex[UE_id][eNB_id])) exit(1);
+          pthread_create (&cthr_u[eNB_id][UE_id], NULL, do_UL_sig_channel_T,(void*)e2u_t[eNB_id][UE_id]);
+          NUM_THREAD_UPLINK++;
+      }
+  }
 }
 
 void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
-double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
-channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
-
-	  int count=0;
-	  int next_slot,last_slot,UE_id=0,eNB_id=0;
-	  lte_subframe_t direction;
-	  s32 **txdata,**rxdata;
-	  double tx_pwr, rx_pwr;
-  	  s32 rx_pwr2;
-  	  u32 i;
-  	  u32 slot_offset;
-
-  	  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-  		  write(fd_NB[eNB_id],&slot,sizeof(slot));
-  		  count++;
-	    //send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
-	  }
-
-
-  	while(count--){
-  		 int dummy=1;
-  		 read(fd_channel,&dummy,sizeof(dummy));
-  		//wait_4Msg();
-  	}
-
-
-
-
- 	   for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
- 		   frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms;
- 		   slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
- 		   txdata =tx[eNB_id][0];
- 		   tx_pwr = dac_fixed_gain(s_re[eNB_id],
-					s_im[eNB_id],
-					txdata,
-					slot_offset,
-					frame_parms->nb_antennas_tx,
-					frame_parms->samples_per_tti>>1,
-					14,
-					40);
-		printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),nslot,nslot>>1);
- 	   }
-
-       _COT=0;
-       for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-    	   for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-    		   if(pthread_cond_signal(&downlink_cond[eNB_id][UE_id])) exit(1);
-    		   if(pthread_mutex_unlock(&downlink_mutex[eNB_id][UE_id])) exit(1);
-    	   }
-       }
-
-  	   if(pthread_cond_wait(&downlink_cond_channel, &downlink_mutex_channel)) exit(1);
-
-  	   for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-  		   Clean_Param(r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],frame_parms);
-  		   for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-  			 Channel_Out(SF_DL,eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],r_re0_d[UE_id][eNB_id],r_im0_d[UE_id][eNB_id],frame_parms);
-  		 	 //  adc_channel(eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id]);
-
-  		   }
-  	   }
-
-  	   count=0;
-  	   for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
-  		   if (mac_xface->frame >= (UE_id * 10)) {
-  			   write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
-  			   //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
-  			   count++;
-  		   }
-
-  	   while(count--){
-  		   int dummy=1;
-  		   read(fd_channel,&dummy,sizeof(dummy));
-  		   //wait_4Msg();
-  	   }
+    double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
+    channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
+
+  int count=0;
+  int next_slot,last_slot,UE_id=0,eNB_id=0;
+  lte_subframe_t direction;
+  s32 **txdata,**rxdata;
+  double tx_pwr, rx_pwr;
+  s32 rx_pwr2;
+  u32 i;
+  u32 slot_offset;
+
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      write(fd_NB[eNB_id],&slot,sizeof(slot));
+      count++;
+      //send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
+  }
+
+
+  while(count--){
+      int dummy=1;
+      read(fd_channel,&dummy,sizeof(dummy));
+      //wait_4Msg();
+  }
+
+
+
+
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms;
+      slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
+      txdata =tx[eNB_id][0];
+      tx_pwr = dac_fixed_gain(s_re[eNB_id],
+          s_im[eNB_id],
+          txdata,
+          slot_offset,
+          frame_parms->nb_antennas_tx,
+          frame_parms->samples_per_tti>>1,
+          14,
+          40);
+      printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),nslot,nslot>>1);
+  }
+
+  _COT=0;
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+      for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+          if(pthread_cond_signal(&downlink_cond[eNB_id][UE_id])) exit(1);
+          if(pthread_mutex_unlock(&downlink_mutex[eNB_id][UE_id])) exit(1);
+      }
+  }
+
+  if(pthread_cond_wait(&downlink_cond_channel, &downlink_mutex_channel)) exit(1);
+
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+      Clean_Param(r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],frame_parms);
+      for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+          Channel_Out(SF_DL,eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],r_re0_d[UE_id][eNB_id],r_im0_d[UE_id][eNB_id],frame_parms);
+          //  adc_channel(eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id]);
+
+      }
+  }
+
+  count=0;
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
+    if (mac_xface->frame >= (UE_id * 10)) {
+        write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
+        //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
+        count++;
+    }
+
+  while(count--){
+      int dummy=1;
+      read(fd_channel,&dummy,sizeof(dummy));
+      //wait_4Msg();
+  }
 
 }
 
 
 void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
-double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
-channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
-	  int count=0;
-	  int next_slot,last_slot,UE_id=0,eNB_id=0;
-	  lte_subframe_t direction;
-	  s32 **txdata,**rxdata;
-	  double tx_pwr, rx_pwr;
-  	  s32 rx_pwr2;
-  	  u32 i;
-  	  u32 slot_offset;
-
-	  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
-		  if (mac_xface->frame >= (UE_id * 10)) {
-			  write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
-			  //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
-			  count++;
-		  }
-
-	  while(count--){
-		  int dummy=1;
-		  read(fd_channel,&dummy,sizeof(dummy));
-		  //wait_4Msg();
-	  }
-
-
-
-		for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-			frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms;
-			slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
-	  		txdata =tx[NB_eNB_INST+UE_id][0]; //PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata;
-	  		tx_pwr = dac_fixed_gain(s_re[NB_eNB_INST+UE_id],
-	  					s_im[NB_eNB_INST+UE_id],
-	  					txdata,
-	  					slot_offset,
-	  					frame_parms->nb_antennas_tx,
-	  					frame_parms->samples_per_tti>>1,
-	  					14,
-	  					18);
-	  		printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(tx_pwr),nslot,nslot>>1);
-	  		rx_pwr = signal_energy_fp(s_re[NB_eNB_INST+UE_id],s_im[NB_eNB_INST+UE_id],frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
-	  		printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),nslot,nslot>>1);
-		}
-
-	  _COT_U=0;
-
-	  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-		  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-			  if ( pthread_cond_signal(&uplink_cond[UE_id][eNB_id])) exit(1);
-			  if ( pthread_mutex_unlock(&uplink_mutex[UE_id][eNB_id])) exit(1);
-		  }}
-	  if ( pthread_cond_wait(&uplink_cond_channel, &uplink_mutex_channel)) exit(1);
-
-	  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-		  Clean_Param(r_re[eNB_id],r_im[eNB_id],frame_parms);
-		  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
-			  Channel_Out(SF_UL,eNB_id,UE_id,r_re[eNB_id],r_im[eNB_id],r_re0_u[eNB_id][UE_id],r_im0_u[eNB_id][UE_id],frame_parms);	printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),next_slot,next_slot>>1);
-		  }
-	  }
-
-
-	  count=0;
-		for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
-	  	  write(fd_NB[eNB_id],&slot,sizeof(slot));
-	  //	send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
-	  	  count++;
-		}
-
-	  	while(count--){
-	   int dummy=1;
-	   read(fd_channel,&dummy,sizeof(dummy));
-	  //	wait_4Msg();
-	  	}
+    double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
+    channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
+  int count=0;
+  int next_slot,last_slot,UE_id=0,eNB_id=0;
+  lte_subframe_t direction;
+  s32 **txdata,**rxdata;
+  double tx_pwr, rx_pwr;
+  s32 rx_pwr2;
+  u32 i;
+  u32 slot_offset;
+
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
+    if (mac_xface->frame >= (UE_id * 10)) {
+        write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
+        //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
+        count++;
+    }
+
+  while(count--){
+      int dummy=1;
+      read(fd_channel,&dummy,sizeof(dummy));
+      //wait_4Msg();
+  }
+
+
+
+  for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+      frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms;
+      slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
+      txdata =tx[NB_eNB_INST+UE_id][0]; //PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata;
+      tx_pwr = dac_fixed_gain(s_re[NB_eNB_INST+UE_id],
+          s_im[NB_eNB_INST+UE_id],
+          txdata,
+          slot_offset,
+          frame_parms->nb_antennas_tx,
+          frame_parms->samples_per_tti>>1,
+          14,
+          18);
+      printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(tx_pwr),nslot,nslot>>1);
+      rx_pwr = signal_energy_fp(s_re[NB_eNB_INST+UE_id],s_im[NB_eNB_INST+UE_id],frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
+      printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),nslot,nslot>>1);
+  }
+
+  _COT_U=0;
+
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+          if ( pthread_cond_signal(&uplink_cond[UE_id][eNB_id])) exit(1);
+          if ( pthread_mutex_unlock(&uplink_mutex[UE_id][eNB_id])) exit(1);
+      }}
+  if ( pthread_cond_wait(&uplink_cond_channel, &uplink_mutex_channel)) exit(1);
+
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      Clean_Param(r_re[eNB_id],r_im[eNB_id],frame_parms);
+      for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
+          Channel_Out(SF_UL,eNB_id,UE_id,r_re[eNB_id],r_im[eNB_id],r_re0_u[eNB_id][UE_id],r_im0_u[eNB_id][UE_id],frame_parms);	printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),next_slot,next_slot>>1);
+      }
+  }
+
+
+  count=0;
+  for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
+      write(fd_NB[eNB_id],&slot,sizeof(slot));
+      //	send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
+      count++;
+  }
+
+  while(count--){
+      int dummy=1;
+      read(fd_channel,&dummy,sizeof(dummy));
+      //	wait_4Msg();
+  }
 
 }
 
 void Channel_Func(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
-double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
-channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
-		int last_slot;
-		lte_subframe_t direction;
-
-		last_slot = (slot - 1)%20;
-		if (last_slot <0)
-		last_slot+=20;
-		nslot = (slot + 1)%20;
-
-		direction = subframe_select(frame_parms,nslot>>1);
-
-		if( direction == SF_DL || (direction == SF_S && nslot%2==0)){
-			Channel_DL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
-		}
-		else{
-			Channel_UL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
-		}
+    double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
+    channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
+  int last_slot;
+  lte_subframe_t direction;
+
+  last_slot = (slot - 1)%20;
+  if (last_slot <0)
+    last_slot+=20;
+  nslot = (slot + 1)%20;
+
+  direction = subframe_select(frame_parms,nslot>>1);
+
+  if( direction == SF_DL || (direction == SF_S && nslot%2==0)){
+      Channel_DL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
+  }
+  else{
+      Channel_UL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
+  }
 }
diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile
index 03b86385f00886d6607d63426bb2da201020f102..aefc4350682299702b83d29c591deea4dd2cc550 100644
--- a/targets/SIMU/USER/Makefile
+++ b/targets/SIMU/USER/Makefile
@@ -17,7 +17,7 @@ CPUFLAGS += $(shell if grep --silent ssse3 /proc/cpuinfo ; then echo "-mssse3" ;
 CPUFLAGS += $(shell if grep --silent -w sse4 /proc/cpuinfo ; then echo "-msse4" ; else echo ""; fi)
 linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi)
 
-CFLAGS += -g -ggdb
+CFLAGS += -g -ggdb -Wstrict-prototypes -Wpointer-sign
 CFLAGS += -DUSER_MODE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 $(CPUFLAGS) -I/usr/include/X11 #-Wno-packed-bitfield-compat
 
 # Check if GCC version is greater or equal to 4.4
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index 7262342d8ffa05230143a6e9c4da38aa9e531db2..d7d9397495a69ea2234e2308bfc06c3c755f8811 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -1067,7 +1067,6 @@ int main(int argc, char **argv) {
   init_omv ();
 #endif
   //Before this call, NB_UE_INST and NB_eNB_INST are not set correctly
-
   check_and_adjust_params ();
 
   set_seed = oai_emulation.emulation_config.seed.value;
diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c
index e20a0347183b44470ab1666d25b74aa2a75227cb..80c8b44953d959dd04eba9abfb7d8452641b2b3e 100644
--- a/targets/SIMU/USER/oaisim_functions.c
+++ b/targets/SIMU/USER/oaisim_functions.c
@@ -118,8 +118,10 @@ extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX];
 extern channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX];
 
 extern mapping small_scale_names[];
-extern pdcp_mbms_t pdcp_mbms_array[MAX_MODULES][16*29];
-//extern int eMBMS_active;
+#if defined(Rel10)
+extern pdcp_mbms_t pdcp_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];
+extern pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];
+#endif
 
 extern void help (void);
 
@@ -751,7 +753,7 @@ void init_seed(u8 set_seed) {
 }
 
 void init_openair1() {
-  s32 UE_id, eNB_id;
+  module_id_t UE_id, eNB_id;
 #if defined(ENABLE_RAL)
   int list_index;
 #endif
@@ -821,16 +823,16 @@ void init_openair1() {
 
 void init_openair2() {
 #ifdef OPENAIR2
-  s32 i;
-  s32 UE_id;
+  module_id_t enb_id;
+  module_id_t UE_id;
 
   l2_init (&PHY_vars_eNB_g[0]->lte_frame_parms,
       oai_emulation.info.eMBMS_active_state,
       oai_emulation.info.cba_group_active,
       oai_emulation.info.handover_active);
 
-  for (i = 0; i < NB_eNB_INST; i++)
-    mac_xface->mrbch_phy_sync_failure (i, 0, i);
+  for (enb_id = 0; enb_id < NB_eNB_INST; enb_id++)
+    mac_xface->mrbch_phy_sync_failure (enb_id, 0, enb_id);
 
   if (abstraction_flag == 1) {
       for (UE_id = 0; UE_id < NB_UE_INST; UE_id++)
@@ -843,7 +845,7 @@ void init_openair2() {
 }
 
 void init_ocm() {
-  s32 UE_id, eNB_id;
+  module_id_t UE_id, eNB_id;
   /* Added for PHY abstraction */
   LOG_I(OCM,"Running with frame_type %d, Nid_cell %d, N_RB_DL %d, EP %d, mode %d, target dl_mcs %d, rate adaptation %d, nframes %d, abstraction %d, channel %s\n", oai_emulation.info.frame_type, Nid_cell, oai_emulation.info.N_RB_DL, oai_emulation.info.extended_prefix_flag, oai_emulation.info.transmission_mode,target_dl_mcs,rate_adaptation_flag,oai_emulation.info.n_frames,abstraction_flag,oai_emulation.environment_system_config.fading.small_scale.selected_option);
 
@@ -934,7 +936,7 @@ void init_ocm() {
 }
 
 void init_otg_pdcp_buffer() {
-  s32 i;
+  module_id_t i;
   otg_pdcp_buffer = malloc((NB_UE_INST + NB_eNB_INST) * sizeof(Packet_OTG_List));
 
   for (i = 0; i < NB_UE_INST + NB_eNB_INST; i++) {
@@ -944,7 +946,7 @@ void init_otg_pdcp_buffer() {
 }
 
 void update_omg () {
-  s32 UE_id, eNB_id;
+  module_id_t UE_id, eNB_id;
   int new_omg_model;
 
   if ((frame % omg_period) == 0 ) { // call OMG every 10ms
@@ -977,7 +979,7 @@ void update_omg_ocm() {
 }
 
 void update_ocm() {
-  s32 UE_id, eNB_id;
+  module_id_t UE_id, eNB_id;
   for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++)
     enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
   for (UE_id = 0; UE_id < NB_UE_INST; UE_id++)
@@ -1030,7 +1032,7 @@ void update_ocm() {
 }
 
 #ifdef OPENAIR2
-void update_otg_eNB(module_id_t module_idP, unsigned int ctime) {
+void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) {
 #if defined(USER_MODE) && defined(OAI_EMU)
   if (oai_emulation.info.otg_enabled ==1 ) {
 
@@ -1040,23 +1042,23 @@ void update_otg_eNB(module_id_t module_idP, unsigned int ctime) {
       for (dst_id = 0; dst_id < NUMBER_OF_UE_MAX; dst_id++) {
           for_times += 1;
           // generate traffic if the ue is rrc reconfigured state
-          if (mac_get_rrc_status(module_idP, 1/*eNB_flag*/, dst_id) > 2 /*RRC_CONNECTED*/ ) {
+          if (mac_get_rrc_status(enb_module_idP, ENB_FLAG_YES, dst_id) > 2 /*RRC_CONNECTED*/ ) {
 
               for (app_id=0; app_id<MAX_NUM_APPLICATION; app_id++){
                   otg_pkt = malloc (sizeof(Packet_otg_elt));
                   if_times += 1;
 
-                  (otg_pkt->otg_pkt).sdu_buffer = (u8*) packet_gen(module_idP, dst_id + NB_eNB_INST, app_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size));
+                  (otg_pkt->otg_pkt).sdu_buffer = (u8*) packet_gen(enb_module_idP, dst_id + NB_eNB_INST, app_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size));
 
                   if ((otg_pkt->otg_pkt).sdu_buffer != NULL) {
                       otg_times += 1;
                       (otg_pkt->otg_pkt).rb_id = dst_id * NB_RB_MAX + DTCH; // app could be binded to a given DRB
-                      (otg_pkt->otg_pkt).module_id = module_idP;
+                      (otg_pkt->otg_pkt).module_id = enb_module_idP;
                       (otg_pkt->otg_pkt).dst_id = dst_id;
                       (otg_pkt->otg_pkt).is_ue = 0;
                       (otg_pkt->otg_pkt).mode = PDCP_DATA_PDU;
                       //Adding the packet to the OTG-PDCP buffer
-                      pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[module_idP]));
+                      pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP]));
                       LOG_I(EMU, "[eNB %d] ADD pkt to OTG buffer with size %d for dst %d on rb_id %d for app id %d \n",
                           (otg_pkt->otg_pkt).module_id, otg_pkt->otg_pkt.sdu_buffer_size, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id, app_id);
                   } else {
@@ -1064,33 +1066,31 @@ void update_otg_eNB(module_id_t module_idP, unsigned int ctime) {
                       otg_pkt=NULL;
                   }
               }
-              //LOG_T(EMU,"[eNB %d] UE mod id %d is not connected\n", module_id, dst_id);
-              //LOG_I(EMU,"HEAD of otg_pdcp_buffer[%d] is %p\n", module_id, pkt_list_get_head(&(otg_pdcp_buffer[module_id])));
-
           }
       }
 
 #ifdef Rel10
-      int service_id, session_id, rb_id;
+      mbms_service_id_t service_id;
+      mbms_session_id_t session_id;
+      rb_id_t           rb_id;
       // MBSM multicast traffic
       // if (frame >= 50) {// only generate when UE can receive MTCH (need to control this value)
       for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount
           for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH
-              //   LOG_I(OTG,"DUY:frame %d, pdcp_mbms_array[module_id][rb_id].instanciated_instance is %d\n",frame,pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].instanciated_instance);
-              if (pdcp_mbms_array[module_idP][service_id*maxSessionPerPMCH + session_id].instanciated_instance == module_idP + 1){ // this service/session is configured
+              if (pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].instanciated_instance == enb_module_idP + 1){ // this service/session is configured
 
                   otg_pkt = malloc (sizeof(Packet_otg_elt));
                   // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n", service_id, session_id, service_id*maxSessionPerPMCH + session_id);
-                  rb_id = pdcp_mbms_array[module_idP][service_id*maxSessionPerPMCH + session_id].rb_id;
-                  (otg_pkt->otg_pkt).sdu_buffer = (u8*) packet_gen_multicast(module_idP, session_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size));
+                  rb_id = pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].rb_id;
+                  (otg_pkt->otg_pkt).sdu_buffer = (u8*) packet_gen_multicast(enb_module_idP, session_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size));
                   if ((otg_pkt->otg_pkt).sdu_buffer != NULL) {
                       (otg_pkt->otg_pkt).rb_id = rb_id;
-                      (otg_pkt->otg_pkt).module_id = module_idP;
+                      (otg_pkt->otg_pkt).module_id = enb_module_idP;
                       (otg_pkt->otg_pkt).dst_id = session_id;
                       (otg_pkt->otg_pkt).is_ue = 0;
                       //Adding the packet to the OTG-PDCP buffer
                       (otg_pkt->otg_pkt).mode = PDCP_TM;
-                      pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[module_idP]));
+                      pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP]));
                       LOG_I(EMU, "[eNB %d] ADD packet (%p) multicast to OTG buffer for dst %d on rb_id %d\n",
                           (otg_pkt->otg_pkt).module_id, otg_pkt, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id);
                   } else {
@@ -1132,11 +1132,6 @@ void update_otg_eNB(module_id_t module_idP, unsigned int ctime) {
       }
       //    } // end multicast traffic
 #endif
-
-      //LOG_I(EMU, "[eNB %d] update OTG nb_elts = %d \n", module_id, otg_pdcp_buffer[module_idP].nb_elements);
-
-      //free(otg_pkt);
-      //otg_pkt = NULL;
   }
 #else
   if (otg_enabled==1) {
@@ -1159,13 +1154,7 @@ void update_otg_eNB(module_id_t module_idP, unsigned int ctime) {
                   free(otg_pkt);
                   otg_pkt=NULL;
               }
-              /*else {
-    LOG_I(OTG,"nothing generated (src %d, dst %d)\n",src_id, dst_id);
-    }*/
           }
-          /*else {
-  LOG_I(OTG,"rrc_status (src %d, dst %d) = %d\n",src_id, dst_id, mac_get_rrc_status(src_id, eNB_flag, dst_id ));
-  }*/
       }
   }
 #endif