diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 6a50c2d113a6042656da4a1361b253c7132328f1..9787c476a6cde640a0e1e7f653f7bc0f9bfa50db 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -52,7 +52,7 @@ extern uint16_t prach_root_sequence_map4[138];
 uint8_t dmrs1_tab[8] = {0,2,3,4,6,8,9,10};
 
 // FIXME not used anywhere
-void phy_config_mib(LTE_DL_FRAME_PARMS *lte_frame_parms,
+void phy_config_mib(LTE_DL_FRAME_PARMS *frame_parms,
                     uint8_t N_RB_DL,
                     uint8_t Nid_cell,
                     uint8_t Ncp,
@@ -61,14 +61,14 @@ void phy_config_mib(LTE_DL_FRAME_PARMS *lte_frame_parms,
                     PHICH_CONFIG_COMMON *phich_config)
 {
 
-  lte_frame_parms->N_RB_DL                            = N_RB_DL;
-  lte_frame_parms->Nid_cell                           = Nid_cell;
-  lte_frame_parms->nushift                            = Nid_cell%6;
-  lte_frame_parms->Ncp                                = Ncp;
-  lte_frame_parms->frame_type                         = frame_type;
-  lte_frame_parms->nb_antennas_tx_eNB                 = p_eNB;
-  lte_frame_parms->phich_config_common.phich_resource = phich_config->phich_resource;
-  lte_frame_parms->phich_config_common.phich_duration = phich_config->phich_duration;
+  frame_parms->N_RB_DL                            = N_RB_DL;
+  frame_parms->Nid_cell                           = Nid_cell;
+  frame_parms->nushift                            = Nid_cell%6;
+  frame_parms->Ncp                                = Ncp;
+  frame_parms->frame_type                         = frame_type;
+  frame_parms->nb_antennas_tx_eNB                 = p_eNB;
+  frame_parms->phich_config_common.phich_resource = phich_config->phich_resource;
+  frame_parms->phich_config_common.phich_duration = phich_config->phich_duration;
 }
 
 void phy_config_sib1_eNB(uint8_t Mod_id,
@@ -78,15 +78,15 @@ void phy_config_sib1_eNB(uint8_t Mod_id,
                          uint16_t SIPeriod)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms;
 
   if (tdd_Config) {
-    lte_frame_parms->tdd_config    = tdd_Config->subframeAssignment;
-    lte_frame_parms->tdd_config_S  = tdd_Config->specialSubframePatterns;
+    frame_parms->tdd_config    = tdd_Config->subframeAssignment;
+    frame_parms->tdd_config_S  = tdd_Config->specialSubframePatterns;
   }
 
-  lte_frame_parms->SIwindowsize  = SIwindowsize;
-  lte_frame_parms->SIPeriod      = SIPeriod;
+  frame_parms->SIwindowsize  = SIwindowsize;
+  frame_parms->SIPeriod      = SIPeriod;
 }
 
 void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
@@ -96,15 +96,15 @@ void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
                         uint16_t SIperiod)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->frame_parms;
 
   if (tdd_Config) {
-    lte_frame_parms->tdd_config    = tdd_Config->subframeAssignment;
-    lte_frame_parms->tdd_config_S  = tdd_Config->specialSubframePatterns;
+    frame_parms->tdd_config    = tdd_Config->subframeAssignment;
+    frame_parms->tdd_config_S  = tdd_Config->specialSubframePatterns;
   }
 
-  lte_frame_parms->SIwindowsize  = SIwindowsize;
-  lte_frame_parms->SIPeriod      = SIperiod;
+  frame_parms->SIwindowsize  = SIwindowsize;
+  frame_parms->SIPeriod      = SIperiod;
 }
 
 void phy_config_sib2_eNB(uint8_t Mod_id,
@@ -116,132 +116,132 @@ void phy_config_sib2_eNB(uint8_t Mod_id,
                          struct MBSFN_SubframeConfigList  *mbsfn_SubframeConfigList)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms;
   //LTE_eNB_UE_stats *eNB_UE_stats      = PHY_vars_eNB_g[Mod_id][CC_id]->eNB_UE_stats;
   //int32_t rx_total_gain_eNB_dB        = PHY_vars_eNB_g[Mod_id][CC_id]->rx_total_gain_eNB_dB;
   int i;
 
-  LOG_D(PHY,"[eNB%d] CCid %d Frame %d: Applying radioResourceConfigCommon\n",Mod_id,CC_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc[8].frame_tx);
+  LOG_D(PHY,"[eNB%d] CCid %d Frame %d: Applying radioResourceConfigCommon\n",Mod_id,CC_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc[0].frame_tx);
 
-  lte_frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
-  LOG_D(PHY,"prach_config_common.rootSequenceIndex = %d\n",lte_frame_parms->prach_config_common.rootSequenceIndex );
+  frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
+  LOG_D(PHY,"prach_config_common.rootSequenceIndex = %d\n",frame_parms->prach_config_common.rootSequenceIndex );
 
-  lte_frame_parms->prach_config_common.prach_Config_enabled=1;
+  frame_parms->prach_config_common.prach_Config_enabled=1;
 
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
-  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.prach_ConfigIndex = %d\n",lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex);
+  frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
+  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.prach_ConfigIndex = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex);
 
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag;
-  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.highSpeedFlag = %d\n",lte_frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag);
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
-  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = %d\n",lte_frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig);
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset;
-  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.prach_FreqOffset = %d\n",lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset);
-  compute_prach_seq(&lte_frame_parms->prach_config_common,lte_frame_parms->frame_type,
+  frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag;
+  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.highSpeedFlag = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag);
+  frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
+  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig);
+  frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset;
+  LOG_D(PHY,"prach_config_common.prach_ConfigInfo.prach_FreqOffset = %d\n",frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset);
+  compute_prach_seq(&frame_parms->prach_config_common,frame_parms->frame_type,
                     PHY_vars_eNB_g[Mod_id][CC_id]->X_u);
 
-  lte_frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon.deltaPUCCH_Shift;
-  lte_frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon.nRB_CQI;
-  lte_frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon.nCS_AN;
-  lte_frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN;
+  frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon.deltaPUCCH_Shift;
+  frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon.nRB_CQI;
+  frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon.nCS_AN;
+  frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN;
 
 
 
-  lte_frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon.referenceSignalPower;
-  lte_frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon.p_b;
+  frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon.referenceSignalPower;
+  frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon.p_b;
 
 
-  lte_frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
-  LOG_D(PHY,"pusch_config_common.n_SB = %d\n",lte_frame_parms->pusch_config_common.n_SB );
+  frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
+  LOG_D(PHY,"pusch_config_common.n_SB = %d\n",frame_parms->pusch_config_common.n_SB );
 
-  lte_frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
-  LOG_D(PHY,"pusch_config_common.hoppingMode = %d\n",lte_frame_parms->pusch_config_common.hoppingMode);
+  frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
+  LOG_D(PHY,"pusch_config_common.hoppingMode = %d\n",frame_parms->pusch_config_common.hoppingMode);
 
-  lte_frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
-  LOG_D(PHY,"pusch_config_common.pusch_HoppingOffset = %d\n",lte_frame_parms->pusch_config_common.pusch_HoppingOffset);
+  frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
+  LOG_D(PHY,"pusch_config_common.pusch_HoppingOffset = %d\n",frame_parms->pusch_config_common.pusch_HoppingOffset);
 
-  lte_frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
-  LOG_D(PHY,"pusch_config_common.enable64QAM = %d\n",lte_frame_parms->pusch_config_common.enable64QAM );
+  frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
+  LOG_D(PHY,"pusch_config_common.enable64QAM = %d\n",frame_parms->pusch_config_common.enable64QAM );
 
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
-  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = %d\n",lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
+  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
 
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
-  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = %d\n",lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
+  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
 
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
-  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = %d\n",lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
+  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
 
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = dmrs1_tab[radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift];
-  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = %d\n",lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift);
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = dmrs1_tab[radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift];
+  LOG_D(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift);
 
-  init_ul_hopping(lte_frame_parms);
+  init_ul_hopping(frame_parms);
 
-  lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
+  frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
 
   if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.present==SoundingRS_UL_ConfigCommon_PR_setup) {
-    lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
-    lte_frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
-    lte_frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
-    lte_frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
+    frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
+    frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
+    frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
+    frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
 
     if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts)
-      lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
+      frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
     else
-      lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
+      frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
   }
 
 
 
-  lte_frame_parms->ul_power_control_config_common.p0_NominalPUSCH       = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUSCH;
-  lte_frame_parms->ul_power_control_config_common.alpha                 = radioResourceConfigCommon->uplinkPowerControlCommon.alpha;
-  lte_frame_parms->ul_power_control_config_common.p0_NominalPUCCH       = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUCCH;
-  lte_frame_parms->ul_power_control_config_common.deltaPreambleMsg3     = radioResourceConfigCommon->uplinkPowerControlCommon.deltaPreambleMsg3;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b;
+  frame_parms->ul_power_control_config_common.p0_NominalPUSCH       = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUSCH;
+  frame_parms->ul_power_control_config_common.alpha                 = radioResourceConfigCommon->uplinkPowerControlCommon.alpha;
+  frame_parms->ul_power_control_config_common.p0_NominalPUCCH       = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUCCH;
+  frame_parms->ul_power_control_config_common.deltaPreambleMsg3     = radioResourceConfigCommon->uplinkPowerControlCommon.deltaPreambleMsg3;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b;
 
-  lte_frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx;
+  frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx;
 
 
   // Now configure some of the Physical Channels
 
   // PUCCH
 
-  init_ncs_cell(lte_frame_parms,PHY_vars_eNB_g[Mod_id][CC_id]->ncs_cell);
+  init_ncs_cell(frame_parms,PHY_vars_eNB_g[Mod_id][CC_id]->ncs_cell);
 
-  init_ul_hopping(lte_frame_parms);
+  init_ul_hopping(frame_parms);
 
 
   // MBSFN
   if (mbsfn_SubframeConfigList != NULL) {
-    lte_frame_parms->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
+    frame_parms->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
 
     for (i=0; i<mbsfn_SubframeConfigList->list.count; i++) {
-      lte_frame_parms->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
-      lte_frame_parms->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
+      frame_parms->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
+      frame_parms->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
 
       if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {
-        lte_frame_parms->MBSFN_config[i].fourFrames_flag = 0;
-        lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
+        frame_parms->MBSFN_config[i].fourFrames_flag = 0;
+        frame_parms->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
         LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %ld\n", i,
-              lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
+              frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
       } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
-        lte_frame_parms->MBSFN_config[i].fourFrames_flag = 1;
-        lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig =
+        frame_parms->MBSFN_config[i].fourFrames_flag = 1;
+        frame_parms->MBSFN_config[i].mbsfn_SubframeConfig =
           mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
           (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
           (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
 
         LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %ld\n", i,
-              lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
+              frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
       }
     }
 
   } else
-    lte_frame_parms->num_MBSFN_config = 0;
+    frame_parms->num_MBSFN_config = 0;
 }
 
 
@@ -254,106 +254,106 @@ void phy_config_sib2_ue(uint8_t Mod_id,int CC_id,
                         struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->frame_parms;
   int i;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_UE_CONFIG_SIB2, VCD_FUNCTION_IN);
 
   LOG_I(PHY,"[UE%d] Frame %d: Applying radioResourceConfigCommon from eNB%d\n",Mod_id,PHY_vars_UE_g[Mod_id][CC_id]->frame_rx,CH_index);
 
-  lte_frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
+  frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
 
-  lte_frame_parms->prach_config_common.prach_Config_enabled=1;
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag;
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
-  lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset;
+  frame_parms->prach_config_common.prach_Config_enabled=1;
+  frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
+  frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.highSpeedFlag;
+  frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
+  frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset;
 
-  compute_prach_seq(&lte_frame_parms->prach_config_common,lte_frame_parms->frame_type,PHY_vars_UE_g[Mod_id][CC_id]->X_u);
+  compute_prach_seq(&frame_parms->prach_config_common,frame_parms->frame_type,PHY_vars_UE_g[Mod_id][CC_id]->X_u);
 
 
 
-  lte_frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon.deltaPUCCH_Shift;
-  lte_frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon.nRB_CQI;
-  lte_frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon.nCS_AN;
-  lte_frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN;
+  frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon.deltaPUCCH_Shift;
+  frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon.nRB_CQI;
+  frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon.nCS_AN;
+  frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN;
 
 
 
-  lte_frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon.referenceSignalPower;
-  lte_frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon.p_b;
+  frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon.referenceSignalPower;
+  frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon.p_b;
 
 
-  lte_frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
-  lte_frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
-  lte_frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
-  lte_frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
-  lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = dmrs1_tab[radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift];
+  frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
+  frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
+  frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
+  frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
+  frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = dmrs1_tab[radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift];
 
 
-  init_ul_hopping(lte_frame_parms);
-  lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
+  init_ul_hopping(frame_parms);
+  frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
 
   if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.present==SoundingRS_UL_ConfigCommon_PR_setup) {
-    lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
-    lte_frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
-    lte_frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
-    lte_frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
+    frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
+    frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
+    frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
+    frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
 
     if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts)
-      lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
+      frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
     else
-      lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
+      frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
   }
 
 
 
-  lte_frame_parms->ul_power_control_config_common.p0_NominalPUSCH   = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUSCH;
-  lte_frame_parms->ul_power_control_config_common.alpha             = radioResourceConfigCommon->uplinkPowerControlCommon.alpha;
-  lte_frame_parms->ul_power_control_config_common.p0_NominalPUCCH   = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUCCH;
-  lte_frame_parms->ul_power_control_config_common.deltaPreambleMsg3 = radioResourceConfigCommon->uplinkPowerControlCommon.deltaPreambleMsg3;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a;
-  lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b;
+  frame_parms->ul_power_control_config_common.p0_NominalPUSCH   = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUSCH;
+  frame_parms->ul_power_control_config_common.alpha             = radioResourceConfigCommon->uplinkPowerControlCommon.alpha;
+  frame_parms->ul_power_control_config_common.p0_NominalPUCCH   = radioResourceConfigCommon->uplinkPowerControlCommon.p0_NominalPUCCH;
+  frame_parms->ul_power_control_config_common.deltaPreambleMsg3 = radioResourceConfigCommon->uplinkPowerControlCommon.deltaPreambleMsg3;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a;
+  frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b;
 
-  lte_frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx;
+  frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx;
 
   // Now configure some of the Physical Channels
 
   // PUCCH
-  init_ncs_cell(lte_frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->ncs_cell);
+  init_ncs_cell(frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->ncs_cell);
 
-  init_ul_hopping(lte_frame_parms);
+  init_ul_hopping(frame_parms);
 
 
   // MBSFN
 
   if (mbsfn_SubframeConfigList != NULL) {
-    lte_frame_parms->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
+    frame_parms->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
 
     for (i=0; i<mbsfn_SubframeConfigList->list.count; i++) {
-      lte_frame_parms->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
-      lte_frame_parms->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
+      frame_parms->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
+      frame_parms->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
 
       if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {
-        lte_frame_parms->MBSFN_config[i].fourFrames_flag = 0;
-        lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
+        frame_parms->MBSFN_config[i].fourFrames_flag = 0;
+        frame_parms->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
         LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %ld\n", i,
-              lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
+              frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
       } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
-        lte_frame_parms->MBSFN_config[i].fourFrames_flag = 1;
-        lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig =
+        frame_parms->MBSFN_config[i].fourFrames_flag = 1;
+        frame_parms->MBSFN_config[i].mbsfn_SubframeConfig =
           mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
           (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
           (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
 
         LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %ld\n", i,
-              lte_frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
+              frame_parms->MBSFN_config[i].mbsfn_SubframeConfig);
       }
     }
   }
@@ -366,17 +366,17 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t CH_index,int mbsfn_Are
                          long mbsfn_AreaId_r9)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->frame_parms;
 
 
   LOG_I(PHY,"[UE%d] Frame %d: Applying MBSFN_Area_id %d for index %d\n",Mod_id,PHY_vars_UE_g[Mod_id][CC_id]->frame_rx,mbsfn_AreaId_r9,mbsfn_Area_idx);
 
   if (mbsfn_Area_idx == 0) {
-    lte_frame_parms->Nid_cell_mbsfn = (uint16_t)mbsfn_AreaId_r9;
+    frame_parms->Nid_cell_mbsfn = (uint16_t)mbsfn_AreaId_r9;
     LOG_N(PHY,"Fix me: only called when mbsfn_Area_idx == 0)\n");
   }
 
-  lte_gold_mbsfn(lte_frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->lte_gold_mbsfn_table,lte_frame_parms->Nid_cell_mbsfn);
+  lte_gold_mbsfn(frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->lte_gold_mbsfn_table,frame_parms->Nid_cell_mbsfn);
 
 }
 
@@ -385,56 +385,56 @@ void phy_config_sib13_eNB(uint8_t Mod_id,int CC_id,int mbsfn_Area_idx,
                           long mbsfn_AreaId_r9)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms;
 
 
-  LOG_I(PHY,"[eNB%d] Frame %d: Applying MBSFN_Area_id %d for index %d\n",Mod_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc[8].frame_tx,mbsfn_AreaId_r9,mbsfn_Area_idx);
+  LOG_I(PHY,"[eNB%d] Frame %d: Applying MBSFN_Area_id %d for index %d\n",Mod_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc[0].frame_tx,mbsfn_AreaId_r9,mbsfn_Area_idx);
 
   if (mbsfn_Area_idx == 0) {
-    lte_frame_parms->Nid_cell_mbsfn = (uint16_t)mbsfn_AreaId_r9;
+    frame_parms->Nid_cell_mbsfn = (uint16_t)mbsfn_AreaId_r9;
     LOG_N(PHY,"Fix me: only called when mbsfn_Area_idx == 0)\n");
   }
 
-  lte_gold_mbsfn(lte_frame_parms,PHY_vars_eNB_g[Mod_id][CC_id]->lte_gold_mbsfn_table,lte_frame_parms->Nid_cell_mbsfn);
+  lte_gold_mbsfn(frame_parms,PHY_vars_eNB_g[Mod_id][CC_id]->lte_gold_mbsfn_table,frame_parms->Nid_cell_mbsfn);
 }
 
 
-void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB)
+void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *eNB)
 {
 
   uint8_t UE_id;
   struct PhysicalConfigDedicated *physicalConfigDedicated;
 
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-    physicalConfigDedicated = phy_vars_eNB->physicalConfigDedicated[UE_id];
+    physicalConfigDedicated = eNB->physicalConfigDedicated[UE_id];
 
     if (physicalConfigDedicated != NULL) {
-      LOG_I(PHY,"[eNB %d] Frame %d: Sent physicalConfigDedicated=%p for UE %d\n",phy_vars_eNB->Mod_id, phy_vars_eNB->proc[8].frame_tx,physicalConfigDedicated,UE_id);
+      LOG_I(PHY,"[eNB %d] Frame %d: Sent physicalConfigDedicated=%p for UE %d\n",eNB->Mod_id, eNB->proc[0].frame_tx,physicalConfigDedicated,UE_id);
       LOG_D(PHY,"------------------------------------------------------------------------\n");
 
       if (physicalConfigDedicated->pdsch_ConfigDedicated) {
-        phy_vars_eNB->pdsch_config_dedicated[UE_id].p_a=physicalConfigDedicated->pdsch_ConfigDedicated->p_a;
-        LOG_D(PHY,"pdsch_config_dedicated.p_a %d\n",phy_vars_eNB->pdsch_config_dedicated[UE_id].p_a);
+        eNB->pdsch_config_dedicated[UE_id].p_a=physicalConfigDedicated->pdsch_ConfigDedicated->p_a;
+        LOG_D(PHY,"pdsch_config_dedicated.p_a %d\n",eNB->pdsch_config_dedicated[UE_id].p_a);
         LOG_D(PHY,"\n");
       }
 
       if (physicalConfigDedicated->pucch_ConfigDedicated) {
         if (physicalConfigDedicated->pucch_ConfigDedicated->ackNackRepetition.present==PUCCH_ConfigDedicated__ackNackRepetition_PR_release)
-          phy_vars_eNB->pucch_config_dedicated[UE_id].ackNackRepetition=0;
+          eNB->pucch_config_dedicated[UE_id].ackNackRepetition=0;
         else {
-          phy_vars_eNB->pucch_config_dedicated[UE_id].ackNackRepetition=1;
+          eNB->pucch_config_dedicated[UE_id].ackNackRepetition=1;
         }
 
-        if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
-          phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = multiplexing;
+        if (eNB->frame_parms.frame_type == FDD) {
+          eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = multiplexing;
         } else {
           if (physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode)
-            phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = *physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode;
+            eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = *physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode;
           else
-            phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = bundling;
+            eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode = bundling;
         }
 
-        if ( phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode == multiplexing)
+        if ( eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode == multiplexing)
           LOG_D(PHY,"pucch_config_dedicated.tdd_AckNackFeedbackMode = multiplexing\n");
         else
           LOG_D(PHY,"pucch_config_dedicated.tdd_AckNackFeedbackMode = bundling\n");
@@ -442,13 +442,13 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB)
       }
 
       if (physicalConfigDedicated->pusch_ConfigDedicated) {
-        phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_ACK_Index;
-        phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_RI_Index;
-        phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_CQI_Index;
+        eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_ACK_Index;
+        eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_RI_Index;
+        eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_CQI_Index;
 
-        LOG_D(PHY,"pusch_config_dedicated.betaOffset_ACK_Index %d\n",phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index);
-        LOG_D(PHY,"pusch_config_dedicated.betaOffset_RI_Index %d\n",phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index);
-        LOG_D(PHY,"pusch_config_dedicated.betaOffset_CQI_Index %d\n",phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index);
+        LOG_D(PHY,"pusch_config_dedicated.betaOffset_ACK_Index %d\n",eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index);
+        LOG_D(PHY,"pusch_config_dedicated.betaOffset_RI_Index %d\n",eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index);
+        LOG_D(PHY,"pusch_config_dedicated.betaOffset_CQI_Index %d\n",eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index);
         LOG_D(PHY,"\n");
 
 
@@ -456,43 +456,43 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB)
 
       if (physicalConfigDedicated->uplinkPowerControlDedicated) {
 
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].p0_UE_PUSCH = physicalConfigDedicated->uplinkPowerControlDedicated->p0_UE_PUSCH;
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled= physicalConfigDedicated->uplinkPowerControlDedicated->deltaMCS_Enabled;
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].accumulationEnabled= physicalConfigDedicated->uplinkPowerControlDedicated->accumulationEnabled;
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].p0_UE_PUCCH= physicalConfigDedicated->uplinkPowerControlDedicated->p0_UE_PUCCH;
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].pSRS_Offset= physicalConfigDedicated->uplinkPowerControlDedicated->pSRS_Offset;
-        phy_vars_eNB->ul_power_control_dedicated[UE_id].filterCoefficient= *physicalConfigDedicated->uplinkPowerControlDedicated->filterCoefficient;
-        LOG_D(PHY,"ul_power_control_dedicated.p0_UE_PUSCH %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].p0_UE_PUSCH);
-        LOG_D(PHY,"ul_power_control_dedicated.deltaMCS_Enabled %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled);
-        LOG_D(PHY,"ul_power_control_dedicated.accumulationEnabled %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].accumulationEnabled);
-        LOG_D(PHY,"ul_power_control_dedicated.p0_UE_PUCCH %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].p0_UE_PUCCH);
-        LOG_D(PHY,"ul_power_control_dedicated.pSRS_Offset %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].pSRS_Offset);
-        LOG_D(PHY,"ul_power_control_dedicated.filterCoefficient %d\n",phy_vars_eNB->ul_power_control_dedicated[UE_id].filterCoefficient);
+        eNB->ul_power_control_dedicated[UE_id].p0_UE_PUSCH = physicalConfigDedicated->uplinkPowerControlDedicated->p0_UE_PUSCH;
+        eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled= physicalConfigDedicated->uplinkPowerControlDedicated->deltaMCS_Enabled;
+        eNB->ul_power_control_dedicated[UE_id].accumulationEnabled= physicalConfigDedicated->uplinkPowerControlDedicated->accumulationEnabled;
+        eNB->ul_power_control_dedicated[UE_id].p0_UE_PUCCH= physicalConfigDedicated->uplinkPowerControlDedicated->p0_UE_PUCCH;
+        eNB->ul_power_control_dedicated[UE_id].pSRS_Offset= physicalConfigDedicated->uplinkPowerControlDedicated->pSRS_Offset;
+        eNB->ul_power_control_dedicated[UE_id].filterCoefficient= *physicalConfigDedicated->uplinkPowerControlDedicated->filterCoefficient;
+        LOG_D(PHY,"ul_power_control_dedicated.p0_UE_PUSCH %d\n",eNB->ul_power_control_dedicated[UE_id].p0_UE_PUSCH);
+        LOG_D(PHY,"ul_power_control_dedicated.deltaMCS_Enabled %d\n",eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled);
+        LOG_D(PHY,"ul_power_control_dedicated.accumulationEnabled %d\n",eNB->ul_power_control_dedicated[UE_id].accumulationEnabled);
+        LOG_D(PHY,"ul_power_control_dedicated.p0_UE_PUCCH %d\n",eNB->ul_power_control_dedicated[UE_id].p0_UE_PUCCH);
+        LOG_D(PHY,"ul_power_control_dedicated.pSRS_Offset %d\n",eNB->ul_power_control_dedicated[UE_id].pSRS_Offset);
+        LOG_D(PHY,"ul_power_control_dedicated.filterCoefficient %d\n",eNB->ul_power_control_dedicated[UE_id].filterCoefficient);
         LOG_D(PHY,"\n");
       }
 
       if (physicalConfigDedicated->antennaInfo) {
-        phy_vars_eNB->transmission_mode[UE_id] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode);
-        LOG_D(PHY,"Transmission Mode %d\n",phy_vars_eNB->transmission_mode[UE_id]);
+        eNB->transmission_mode[UE_id] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode);
+        LOG_D(PHY,"Transmission Mode %d\n",eNB->transmission_mode[UE_id]);
         LOG_D(PHY,"\n");
       }
 
       if (physicalConfigDedicated->schedulingRequestConfig) {
         if (physicalConfigDedicated->schedulingRequestConfig->present == SchedulingRequestConfig_PR_setup) {
-          phy_vars_eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex = physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex;
-          phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex=physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_ConfigIndex;
-          phy_vars_eNB->scheduling_request_config[UE_id].dsr_TransMax=physicalConfigDedicated->schedulingRequestConfig->choice.setup.dsr_TransMax;
+          eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex = physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex;
+          eNB->scheduling_request_config[UE_id].sr_ConfigIndex=physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_ConfigIndex;
+          eNB->scheduling_request_config[UE_id].dsr_TransMax=physicalConfigDedicated->schedulingRequestConfig->choice.setup.dsr_TransMax;
 
-          LOG_D(PHY,"scheduling_request_config.sr_PUCCH_ResourceIndex %d\n",phy_vars_eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex);
-          LOG_D(PHY,"scheduling_request_config.sr_ConfigIndex %d\n",phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex);
-          LOG_D(PHY,"scheduling_request_config.dsr_TransMax %d\n",phy_vars_eNB->scheduling_request_config[UE_id].dsr_TransMax);
+          LOG_D(PHY,"scheduling_request_config.sr_PUCCH_ResourceIndex %d\n",eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex);
+          LOG_D(PHY,"scheduling_request_config.sr_ConfigIndex %d\n",eNB->scheduling_request_config[UE_id].sr_ConfigIndex);
+          LOG_D(PHY,"scheduling_request_config.dsr_TransMax %d\n",eNB->scheduling_request_config[UE_id].dsr_TransMax);
         }
 
         LOG_D(PHY,"------------------------------------------------------------\n");
 
       }
 
-      phy_vars_eNB->physicalConfigDedicated[UE_id] = NULL;
+      eNB->physicalConfigDedicated[UE_id] = NULL;
     }
   }
 }
@@ -506,13 +506,13 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
   if(mobilityControlInfo!=NULL) {
     RadioResourceConfigCommon_t *radioResourceConfigCommon = &mobilityControlInfo->radioResourceConfigCommon;
     LOG_I(PHY,"radioResourceConfigCommon %p\n", radioResourceConfigCommon);
-    memcpy((void *)&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms_before_ho,
-           (void *)&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms,
+    memcpy((void *)&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms_before_ho,
+           (void *)&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms,
            sizeof(LTE_DL_FRAME_PARMS));
     PHY_vars_UE_g[Mod_id][CC_id]->ho_triggered = 1;
     //PHY_vars_UE_g[UE_id]->UE_mode[0] = PRACH;
 
-    LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms;
+    LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_UE_g[Mod_id][CC_id]->frame_parms;
     //     int N_ZC;
     //     uint8_t prach_fmt;
     //     int u;
@@ -520,98 +520,98 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
     LOG_I(PHY,"[UE%d] Frame %d: Handover triggered: Applying radioResourceConfigCommon from eNB %d\n",
           Mod_id,PHY_vars_UE_g[Mod_id][CC_id]->frame_rx,eNB_id);
 
-    lte_frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
-    lte_frame_parms->prach_config_common.prach_Config_enabled=1;
-    lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex;
-    lte_frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->highSpeedFlag;
-    lte_frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->zeroCorrelationZoneConfig;
-    lte_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_FreqOffset;
+    frame_parms->prach_config_common.rootSequenceIndex                           =radioResourceConfigCommon->prach_Config.rootSequenceIndex;
+    frame_parms->prach_config_common.prach_Config_enabled=1;
+    frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex          =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex;
+    frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag              =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->highSpeedFlag;
+    frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig  =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->zeroCorrelationZoneConfig;
+    frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset           =radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_FreqOffset;
 
-    //     prach_fmt = get_prach_fmt(radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex,lte_frame_parms->frame_type);
+    //     prach_fmt = get_prach_fmt(radioResourceConfigCommon->prach_Config.prach_ConfigInfo->prach_ConfigIndex,frame_parms->frame_type);
     //     N_ZC = (prach_fmt <4)?839:139;
-    //     u = (prach_fmt < 4) ? prach_root_sequence_map0_3[lte_frame_parms->prach_config_common.rootSequenceIndex] :
-    //       prach_root_sequence_map4[lte_frame_parms->prach_config_common.rootSequenceIndex];
+    //     u = (prach_fmt < 4) ? prach_root_sequence_map0_3[frame_parms->prach_config_common.rootSequenceIndex] :
+    //       prach_root_sequence_map4[frame_parms->prach_config_common.rootSequenceIndex];
 
     //compute_prach_seq(u,N_ZC, PHY_vars_UE_g[Mod_id]->X_u);
-    compute_prach_seq(&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms.prach_config_common,
-                      lte_frame_parms->frame_type,
+    compute_prach_seq(&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms.prach_config_common,
+                      frame_parms->frame_type,
                       PHY_vars_UE_g[Mod_id][CC_id]->X_u);
 
 
-    lte_frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon->deltaPUCCH_Shift;
-    lte_frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon->nRB_CQI;
-    lte_frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon->nCS_AN;
-    lte_frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon->n1PUCCH_AN;
-    lte_frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon->referenceSignalPower;
-    lte_frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon->p_b;
+    frame_parms->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon->deltaPUCCH_Shift;
+    frame_parms->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon->nRB_CQI;
+    frame_parms->pucch_config_common.nCS_AN           = radioResourceConfigCommon->pucch_ConfigCommon->nCS_AN;
+    frame_parms->pucch_config_common.n1PUCCH_AN       = radioResourceConfigCommon->pucch_ConfigCommon->n1PUCCH_AN;
+    frame_parms->pdsch_config_common.referenceSignalPower = radioResourceConfigCommon->pdsch_ConfigCommon->referenceSignalPower;
+    frame_parms->pdsch_config_common.p_b                  = radioResourceConfigCommon->pdsch_ConfigCommon->p_b;
 
 
-    lte_frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
-    lte_frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
-    lte_frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
-    lte_frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
-    lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
-    lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
-    lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
-    lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift;
+    frame_parms->pusch_config_common.n_SB                                         = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
+    frame_parms->pusch_config_common.hoppingMode                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
+    frame_parms->pusch_config_common.pusch_HoppingOffset                          = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
+    frame_parms->pusch_config_common.enable64QAM                                  = radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM;
+    frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled    = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled;
+    frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
+    frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled;
+    frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift            = radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift;
 
-    init_ul_hopping(lte_frame_parms);
-    lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
+    init_ul_hopping(frame_parms);
+    frame_parms->soundingrs_ul_config_common.enabled_flag                        = 0;
 
     if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon->present==SoundingRS_UL_ConfigCommon_PR_setup) {
-      lte_frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
-      lte_frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.srs_BandwidthConfig;
-      lte_frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.srs_SubframeConfig;
-      lte_frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.ackNackSRS_SimultaneousTransmission;
+      frame_parms->soundingrs_ul_config_common.enabled_flag                        = 1;
+      frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.srs_BandwidthConfig;
+      frame_parms->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.srs_SubframeConfig;
+      frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.ackNackSRS_SimultaneousTransmission;
 
       if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon->choice.setup.srs_MaxUpPts)
-        lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
+        frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
       else
-        lte_frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
+        frame_parms->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
     }
 
-    lte_frame_parms->ul_power_control_config_common.p0_NominalPUSCH   = radioResourceConfigCommon->uplinkPowerControlCommon->p0_NominalPUSCH;
-    lte_frame_parms->ul_power_control_config_common.alpha             = radioResourceConfigCommon->uplinkPowerControlCommon->alpha;
-    lte_frame_parms->ul_power_control_config_common.p0_NominalPUCCH   = radioResourceConfigCommon->uplinkPowerControlCommon->p0_NominalPUCCH;
-    lte_frame_parms->ul_power_control_config_common.deltaPreambleMsg3 = radioResourceConfigCommon->uplinkPowerControlCommon->deltaPreambleMsg3;
-    lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format1;
-    lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format1b;
-    lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2;
-    lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2a;
-    lte_frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2b;
+    frame_parms->ul_power_control_config_common.p0_NominalPUSCH   = radioResourceConfigCommon->uplinkPowerControlCommon->p0_NominalPUSCH;
+    frame_parms->ul_power_control_config_common.alpha             = radioResourceConfigCommon->uplinkPowerControlCommon->alpha;
+    frame_parms->ul_power_control_config_common.p0_NominalPUCCH   = radioResourceConfigCommon->uplinkPowerControlCommon->p0_NominalPUCCH;
+    frame_parms->ul_power_control_config_common.deltaPreambleMsg3 = radioResourceConfigCommon->uplinkPowerControlCommon->deltaPreambleMsg3;
+    frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format1;
+    frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format1b  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format1b;
+    frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2;
+    frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2a  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2a;
+    frame_parms->ul_power_control_config_common.deltaF_PUCCH_Format2b  = radioResourceConfigCommon->uplinkPowerControlCommon->deltaFList_PUCCH.deltaF_PUCCH_Format2b;
 
-    lte_frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon->maxHARQ_Msg3Tx;
+    frame_parms->maxHARQ_Msg3Tx = radioResourceConfigCommon->rach_ConfigCommon->maxHARQ_Msg3Tx;
 
     // Now configure some of the Physical Channels
     if (radioResourceConfigCommon->antennaInfoCommon)
-      lte_frame_parms->nb_antennas_tx                     = (1<<radioResourceConfigCommon->antennaInfoCommon->antennaPortsCount);
+      frame_parms->nb_antennas_tx                     = (1<<radioResourceConfigCommon->antennaInfoCommon->antennaPortsCount);
     else
-      lte_frame_parms->nb_antennas_tx                     = 1;
+      frame_parms->nb_antennas_tx                     = 1;
 
     //PHICH
     if (radioResourceConfigCommon->antennaInfoCommon) {
-      lte_frame_parms->phich_config_common.phich_resource = radioResourceConfigCommon->phich_Config->phich_Resource;
-      lte_frame_parms->phich_config_common.phich_duration = radioResourceConfigCommon->phich_Config->phich_Duration;
+      frame_parms->phich_config_common.phich_resource = radioResourceConfigCommon->phich_Config->phich_Resource;
+      frame_parms->phich_config_common.phich_duration = radioResourceConfigCommon->phich_Config->phich_Duration;
     }
 
     //Target CellId
-    lte_frame_parms->Nid_cell = mobilityControlInfo->targetPhysCellId;
-    lte_frame_parms->nushift  = lte_frame_parms->Nid_cell%6;
+    frame_parms->Nid_cell = mobilityControlInfo->targetPhysCellId;
+    frame_parms->nushift  = frame_parms->Nid_cell%6;
 
     // PUCCH
-    init_ncs_cell(lte_frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->ncs_cell);
+    init_ncs_cell(frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->ncs_cell);
 
-    init_ul_hopping(lte_frame_parms);
+    init_ul_hopping(frame_parms);
 
     // RNTI
 
-    PHY_vars_UE_g[Mod_id][CC_id]->lte_ue_pdcch_vars[eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
+    PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
 
   }
 
   if(ho_failed) {
     LOG_D(PHY,"[UE%d] Handover failed, triggering RACH procedure\n",Mod_id);
-    memcpy((void *)&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms,(void *)&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms_before_ho, sizeof(LTE_DL_FRAME_PARMS));
+    memcpy((void *)&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms,(void *)&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms_before_ho, sizeof(LTE_DL_FRAME_PARMS));
     PHY_vars_UE_g[Mod_id][CC_id]->UE_mode[eNB_id] = PRACH;
   }
 }
@@ -619,14 +619,14 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
 void phy_config_meas_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,uint8_t n_adj_cells,unsigned int *adj_cell_id)
 {
 
-  PHY_MEASUREMENTS *phy_meas = &PHY_vars_UE_g[Mod_id][CC_id]->PHY_measurements;
+  PHY_MEASUREMENTS *phy_meas = &PHY_vars_UE_g[Mod_id][CC_id]->measurements;
   int i;
 
   LOG_I(PHY,"Configuring inter-cell measurements for %d cells, ids: \n",n_adj_cells);
 
   for (i=0; i<n_adj_cells; i++) {
     LOG_I(PHY,"%d\n",adj_cell_id[i]);
-    lte_gold(&PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->lte_gold_table[i+1],adj_cell_id[i]);
+    lte_gold(&PHY_vars_UE_g[Mod_id][CC_id]->frame_parms,PHY_vars_UE_g[Mod_id][CC_id]->lte_gold_table[i+1],adj_cell_id[i]);
   }
 
   phy_meas->n_adj_cells = n_adj_cells;
@@ -640,20 +640,20 @@ void phy_config_dedicated_eNB(uint8_t Mod_id,
                               struct PhysicalConfigDedicated *physicalConfigDedicated)
 {
 
-  PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[Mod_id][CC_id];
-  int8_t UE_id = find_ue(rnti,phy_vars_eNB);
+  PHY_VARS_eNB *eNB = PHY_vars_eNB_g[Mod_id][CC_id];
+  int8_t UE_id = find_ue(rnti,eNB);
 
   if (UE_id == -1) {
-    LOG_E( PHY, "[eNB %"PRIu8"] Frame %d: find_ue() returns -1\n", Mod_id, phy_vars_eNB->proc[8].frame_tx );
+    LOG_E( PHY, "[eNB %"PRIu8"] Frame %d: find_ue() returns -1\n", Mod_id, eNB->proc[0].frame_tx );
     return;
   }
 
 
   if (physicalConfigDedicated) {
-    phy_vars_eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated;
+    eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated;
     LOG_I(PHY,"phy_config_dedicated_eNB: physicalConfigDedicated=%p\n",physicalConfigDedicated);
   } else {
-    LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, phy_vars_eNB->proc[8].frame_tx,UE_id);
+    LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, eNB->proc[0].frame_tx,UE_id);
     return;
   }
 
@@ -672,7 +672,7 @@ void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
                                     int CC_id)
 {
 
-  //PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[Mod_id][CC_id];
+  //PHY_VARS_eNB *eNB = PHY_vars_eNB_g[Mod_id][CC_id];
   uint8_t UE_id = find_ue(rnti,PHY_vars_eNB_g[Mod_id][0]);
   struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10 = sCellToAddMod_r10->radioResourceConfigDedicatedSCell_r10->physicalConfigDedicatedSCell_r10;
   //struct RadioResourceConfigCommonSCell_r10 *physicalConfigCommonSCell_r10 = sCellToAddMod_r10->radioResourceConfigCommonSCell_r10;
@@ -688,7 +688,7 @@ void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
 
   if ((dl_CarrierFreq_r10>=36000) && (dl_CarrierFreq_r10<=36199)) {
     carrier_freq_local = 1900000000 + (dl_CarrierFreq_r10-36000)*100000; //band 33 from 3GPP 36.101 v 10.9 Table 5.7.3-1
-    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %d) for UE %d\n",Mod_id,/*phy_vars_eNB->frame*/0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %d) for UE %d\n",Mod_id,/*eNB->frame*/0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
 #ifdef EXMIMO
 #ifdef DRIVER2013
     //carrier_freq[CC_id] = carrier_freq_local;
@@ -704,7 +704,7 @@ void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
   } else if ((dl_CarrierFreq_r10>=6150) && (dl_CarrierFreq_r10<=6449)) {
     carrier_freq_local = 832000000 + (dl_CarrierFreq_r10-6150)*100000; //band 20 from 3GPP 36.101 v 10.9 Table 5.7.3-1
     // this is actually for the UL only, but we use it for DL too, since there is no TDD mode for this band
-    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %d) for UE %d\n",Mod_id,/*phy_vars_eNB->frame*/0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %d) for UE %d\n",Mod_id,/*eNB->frame*/0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
 #ifdef EXMIMO
 #ifdef DRIVER2013
     //carrier_freq[CC_id] = carrier_freq_local;
@@ -718,15 +718,15 @@ void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
 #endif
 #endif
   } else {
-    LOG_E(PHY,"[eNB %d] Frame %d: ARFCN %d of SCell %d for UE %d not supported\n",Mod_id,/*phy_vars_eNB->frame*/0,dl_CarrierFreq_r10,CC_id,UE_id);
+    LOG_E(PHY,"[eNB %d] Frame %d: ARFCN %d of SCell %d for UE %d not supported\n",Mod_id,/*eNB->frame*/0,dl_CarrierFreq_r10,CC_id,UE_id);
   }
 
   if (physicalConfigDedicatedSCell_r10) {
-//#warning " phy_vars_eNB->physicalConfigDedicatedSCell_r10 does not exist in phy_vars_eNB"
-    //  phy_vars_eNB->physicalConfigDedicatedSCell_r10[UE_id] = physicalConfigDedicatedSCell_r10;
-    LOG_I(PHY,"[eNB %d] Frame %d: Configured phyConfigDedicatedSCell with CC_id %d for UE %d\n",Mod_id,/*phy_vars_eNB->frame*/0,CC_id,UE_id);
+//#warning " eNB->physicalConfigDedicatedSCell_r10 does not exist in eNB"
+    //  eNB->physicalConfigDedicatedSCell_r10[UE_id] = physicalConfigDedicatedSCell_r10;
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured phyConfigDedicatedSCell with CC_id %d for UE %d\n",Mod_id,/*eNB->frame*/0,CC_id,UE_id);
   } else {
-    LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated (CC_id %d, UE %d)\n",Mod_id, /*phy_vars_eNB->frame*/0,CC_id,UE_id);
+    LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated (CC_id %d, UE %d)\n",Mod_id, /*eNB->frame*/0,CC_id,UE_id);
     return;
   }
 
@@ -855,18 +855,18 @@ void  phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uin
 
   if (eNB_flag == 0 ) {
     //LOG_D(PHY,"[UE %d] configure cba group %d with rnti %x, num active cba grp %d\n", index, index, cba_rnti, num_active_cba_groups);
-    PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[index]->num_active_cba_groups=num_active_cba_groups;
-    PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[index]->cba_rnti[cba_group_id]=cba_rnti;
+    PHY_vars_UE_g[Mod_id][CC_id]->ulsch[index]->num_active_cba_groups=num_active_cba_groups;
+    PHY_vars_UE_g[Mod_id][CC_id]->ulsch[index]->cba_rnti[cba_group_id]=cba_rnti;
   } else {
     //for (i=index; i < NUMBER_OF_UE_MAX; i+=num_active_cba_groups){
     //  LOG_D(PHY,"[eNB %d] configure cba group %d with rnti %x for UE %d, num active cba grp %d\n",Mod_id, i%num_active_cba_groups, cba_rnti, i, num_active_cba_groups);
-    PHY_vars_eNB_g[Mod_id][CC_id]->ulsch_eNB[index]->num_active_cba_groups=num_active_cba_groups;
-    PHY_vars_eNB_g[Mod_id][CC_id]->ulsch_eNB[index]->cba_rnti[cba_group_id] = cba_rnti;
+    PHY_vars_eNB_g[Mod_id][CC_id]->ulsch[index]->num_active_cba_groups=num_active_cba_groups;
+    PHY_vars_eNB_g[Mod_id][CC_id]->ulsch[index]->cba_rnti[cba_group_id] = cba_rnti;
     //}
   }
 }
 
-void phy_init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms)
+void phy_init_lte_top(LTE_DL_FRAME_PARMS *frame_parms)
 {
 
   crcTableInit();
@@ -888,7 +888,7 @@ void phy_init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms)
   init_td16avx2();
 #endif
 
-  lte_sync_time_init(lte_frame_parms);
+  lte_sync_time_init(frame_parms);
 
   generate_ul_ref_sigs();
   generate_ul_ref_sigs_rx();
@@ -946,527 +946,460 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
   }
 }
 
-/*! \brief Helper function to allocate memory for DLSCH_FLP data structures.
- * \param[out] pdsch_flp Pointer to the LTE_UE_PDSCH_FLP structure to initialize.
- * \param[in] frame_parms LTE_DL_FRAME_PARMS structure.
- * \note This function is optimistic in that it expects malloc() to succeed.
- */
-void phy_init_lte_ue__PDSCH_FLP( LTE_UE_PDSCH_FLP* const pdsch_flp, const LTE_DL_FRAME_PARMS* const frame_parms )
-{
-  AssertFatal( pdsch_flp, "pdsch==0" );
-
-  pdsch_flp->llr[0] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
-  pdsch_flp->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
-  pdsch_flp->llr128 = (int16_t**)malloc16_clear( sizeof(int16_t*) );
-  // FIXME! no further allocation for (int16_t*)pdsch_flp->llr128 !!! expect SIGSEGV
-
-  pdsch_flp->pmi_ext             = (uint8_t*)malloc16_clear( frame_parms->N_RB_DL );
-  pdsch_flp->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-  pdsch_flp->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-  pdsch_flp->rxdataF_comp        = (double**)malloc16_clear( 8*sizeof(double*) );
-  pdsch_flp->dl_ch_rho_ext       = (double**)malloc16_clear( 8*sizeof(double*) );
-  pdsch_flp->dl_ch_mag           = (double**)malloc16_clear( 8*sizeof(double*) );
-  pdsch_flp->dl_ch_magb          = (double**)malloc16_clear( 8*sizeof(double*) );
-  pdsch_flp->rho                 = (double**)malloc16_clear( frame_parms->nb_antennas_rx*sizeof(double*) );
-
-  // the allocated memory size is fixed:
-  AssertFatal( frame_parms->nb_antennas_rx <= 2, "nb_antennas_rx > 2" );
-
-  for (int i=0; i<frame_parms->nb_antennas_rx; i++) {
-    pdsch_flp->rho[i] = (double*)malloc16_clear( sizeof(double)*(frame_parms->N_RB_DL*12*7*2) );
-
-    for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
-      const int idx = (j<<1)+i;
-      const size_t num = 7*2*frame_parms->N_RB_DL*12;
-      pdsch_flp->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-      pdsch_flp->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-      pdsch_flp->rxdataF_comp[idx]        = (double*)malloc16_clear( sizeof(double) * num );
-      pdsch_flp->dl_ch_rho_ext[idx]       = (double*)malloc16_clear( sizeof(double) * num );
-      pdsch_flp->dl_ch_mag[idx]           = (double*)malloc16_clear( sizeof(double) * num );
-      pdsch_flp->dl_ch_magb[idx]          = (double*)malloc16_clear( sizeof(double) * num );
-    }
-  }
-}
 
-int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
+int phy_init_lte_ue(PHY_VARS_UE *ue,
                     int nb_connected_eNB,
                     uint8_t abstraction_flag)
 {
 
   // create shortcuts
-  LTE_DL_FRAME_PARMS* const frame_parms      = &phy_vars_ue->lte_frame_parms;
-  LTE_UE_COMMON* const ue_common_vars        = &phy_vars_ue->lte_ue_common_vars;
-  LTE_UE_PDSCH** const ue_pdsch_vars         = phy_vars_ue->lte_ue_pdsch_vars;
-  LTE_UE_PDSCH_FLP** const ue_pdsch_vars_flp = phy_vars_ue->lte_ue_pdsch_vars_flp;
-  LTE_UE_PDSCH** const ue_pdsch_vars_SI      = phy_vars_ue->lte_ue_pdsch_vars_SI;
-  LTE_UE_PDSCH** const ue_pdsch_vars_ra      = phy_vars_ue->lte_ue_pdsch_vars_ra;
-  LTE_UE_PDSCH** const ue_pdsch_vars_mch     = phy_vars_ue->lte_ue_pdsch_vars_MCH;
-  LTE_UE_PBCH** const ue_pbch_vars           = phy_vars_ue->lte_ue_pbch_vars;
-  LTE_UE_PDCCH** const ue_pdcch_vars         = phy_vars_ue->lte_ue_pdcch_vars;
-  LTE_UE_PRACH** const ue_prach_vars         = phy_vars_ue->lte_ue_prach_vars;
+  LTE_DL_FRAME_PARMS* const frame_parms      = &ue->frame_parms;
+  LTE_UE_COMMON* const common_vars        = &ue->common_vars;
+  LTE_UE_PDSCH** const pdsch_vars         = ue->pdsch_vars;
+  LTE_UE_PDSCH** const pdsch_vars_SI      = ue->pdsch_vars_SI;
+  LTE_UE_PDSCH** const pdsch_vars_ra      = ue->pdsch_vars_ra;
+  LTE_UE_PDSCH** const pdsch_vars_mch     = ue->pdsch_vars_MCH;
+  LTE_UE_PBCH** const pbch_vars           = ue->pbch_vars;
+  LTE_UE_PDCCH** const pdcch_vars         = ue->pdcch_vars;
+  LTE_UE_PRACH** const prach_vars         = ue->prach_vars;
 
   int i,j,k;
   int eNB_id;
 
   msg("Initializing UE vars (abstraction %"PRIu8") for eNB TXant %"PRIu8", UE RXant %"PRIu8"\n",abstraction_flag,frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx);
-  LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_UE][MOD %02u][]\n", phy_vars_ue->Mod_id+NB_eNB_INST);
+  LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_UE][MOD %02u][]\n", ue->Mod_id+NB_eNB_INST);
 
   // many memory allocation sizes are hard coded
   AssertFatal( frame_parms->nb_antennas_rx <= 2, "hard coded allocation for ue_common_vars->dl_ch_estimates[eNB_id]" );
-  AssertFatal( phy_vars_ue->n_connected_eNB <= NUMBER_OF_CONNECTED_eNB_MAX, "n_connected_eNB is too large" );
-#ifndef USER_MODE
-  AssertFatal( frame_parms->nb_antennas_tx <= NB_ANTENNAS_TX, "nb_antennas_tx too large" );
-  AssertFatal( frame_parms->nb_antennas_rx <= NB_ANTENNAS_RX, "nb_antennas_rx too large" );
-#endif
+  AssertFatal( ue->n_connected_eNB <= NUMBER_OF_CONNECTED_eNB_MAX, "n_connected_eNB is too large" );
   // init phy_vars_ue
 
   for (i=0; i<4; i++) {
-    phy_vars_ue->rx_gain_max[i] = 135;
-    phy_vars_ue->rx_gain_med[i] = 128;
-    phy_vars_ue->rx_gain_byp[i] = 120;
+    ue->rx_gain_max[i] = 135;
+    ue->rx_gain_med[i] = 128;
+    ue->rx_gain_byp[i] = 120;
   }
 
-  phy_vars_ue->n_connected_eNB = nb_connected_eNB;
+  ue->n_connected_eNB = nb_connected_eNB;
 
-  for(eNB_id = 0; eNB_id < phy_vars_ue->n_connected_eNB; eNB_id++) {
-    phy_vars_ue->total_TBS[eNB_id] = 0;
-    phy_vars_ue->total_TBS_last[eNB_id] = 0;
-    phy_vars_ue->bitrate[eNB_id] = 0;
-    phy_vars_ue->total_received_bits[eNB_id] = 0;
+  for(eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++) {
+    ue->total_TBS[eNB_id] = 0;
+    ue->total_TBS_last[eNB_id] = 0;
+    ue->bitrate[eNB_id] = 0;
+    ue->total_received_bits[eNB_id] = 0;
   }
 
-  phy_vars_ue->tx_power_dBm=-127;
+  ue->tx_power_dBm=-127;
 
   if (abstraction_flag == 0) {
 
     // init TX buffers
 
-    ue_common_vars->txdata  = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
-    ue_common_vars->txdataF = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
+    common_vars->txdata  = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
+    common_vars->txdataF = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
 
     for (i=0; i<frame_parms->nb_antennas_tx; i++) {
-#ifdef USER_MODE
-      ue_common_vars->txdata[i]  = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
-#else //USER_MODE
-      ue_common_vars->txdata[i]  = TX_DMA_BUFFER[0][i];
-#endif //USER_MODE
-      ue_common_vars->txdataF[i] = (int32_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
+
+      common_vars->txdata[i]  = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
+      common_vars->txdataF[i] = (int32_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
     }
 
     // init RX buffers
 
-    ue_common_vars->rxdata   = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-    ue_common_vars->rxdataF  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-    ue_common_vars->rxdataF2 = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+    common_vars->rxdata   = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+    common_vars->rxdataF  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+    common_vars->rxdataF2 = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
 
     for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-#ifndef USER_MODE
-      ue_common_vars->rxdata[i] = (int32_t*) RX_DMA_BUFFER[0][i];
-#else //USER_MODE
-      ue_common_vars->rxdata[i] = (int32_t*) malloc16_clear( (FRAME_LENGTH_COMPLEX_SAMPLES+2048)*sizeof(int32_t) );
-#endif //USER_MODE
-      // RK 2 times because of output format of FFT!
-      // FIXME We should get rid of this
-      ue_common_vars->rxdataF[i] = (int32_t*)malloc16_clear( 2*sizeof(int32_t)*(frame_parms->ofdm_symbol_size*14) );
-      // RK 2 times because of output format of FFT!  We should get rid of this
-      // FIXME We should get rid of this
-      ue_common_vars->rxdataF2[i] = (int32_t*)malloc16_clear( 2*sizeof(int32_t)*(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*10) );
+      common_vars->rxdata[i] = (int32_t*) malloc16_clear( (FRAME_LENGTH_COMPLEX_SAMPLES+2048)*sizeof(int32_t) );
+      common_vars->rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->ofdm_symbol_size*14) );
+      common_vars->rxdataF2[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*10) );
     }
   }
 
   // Channel estimates
   for (eNB_id=0; eNB_id<7; eNB_id++) {
-    ue_common_vars->dl_ch_estimates[eNB_id]      = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
-    ue_common_vars->dl_ch_estimates_time[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
+    common_vars->dl_ch_estimates[eNB_id]      = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
+    common_vars->dl_ch_estimates_time[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
 
     for (i=0; i<frame_parms->nb_antennas_rx; i++)
       for (j=0; j<4; j++) {
         int idx = (j<<1) + i;
-        ue_common_vars->dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->symbols_per_tti*(frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
-        ue_common_vars->dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size*2 );
+        common_vars->dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->symbols_per_tti*(frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
+        common_vars->dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size*2 );
       }
   }
 
   // DLSCH
-  for (eNB_id=0; eNB_id<phy_vars_ue->n_connected_eNB; eNB_id++) {
-    ue_pdsch_vars[eNB_id]     = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
-#ifdef ENABLE_FULL_FLP
-    ue_pdsch_vars_flp[eNB_id] = (LTE_UE_PDSCH_FLP *)malloc16_clear(sizeof(LTE_UE_PDSCH_FLP));
-#else
-    ue_pdsch_vars_flp[eNB_id] = 0;
-#endif
-    ue_pdsch_vars_SI[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
-    ue_pdsch_vars_ra[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
-    ue_pdsch_vars_mch[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
-    ue_pdcch_vars[eNB_id]     = (LTE_UE_PDCCH *)malloc16_clear(sizeof(LTE_UE_PDCCH));
-    ue_prach_vars[eNB_id]     = (LTE_UE_PRACH *)malloc16_clear(sizeof(LTE_UE_PRACH));
-    ue_pbch_vars[eNB_id]      = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
+  for (eNB_id=0; eNB_id<ue->n_connected_eNB; eNB_id++) {
+    pdsch_vars[eNB_id]     = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
+    pdsch_vars_SI[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
+    pdsch_vars_ra[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
+    pdsch_vars_mch[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
+    pdcch_vars[eNB_id]     = (LTE_UE_PDCCH *)malloc16_clear(sizeof(LTE_UE_PDCCH));
+    prach_vars[eNB_id]     = (LTE_UE_PRACH *)malloc16_clear(sizeof(LTE_UE_PRACH));
+    pbch_vars[eNB_id]      = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
 
     if (abstraction_flag == 0) {
-      phy_init_lte_ue__PDSCH( ue_pdsch_vars[eNB_id], frame_parms );
+      phy_init_lte_ue__PDSCH( pdsch_vars[eNB_id], frame_parms );
 
-      ue_pdsch_vars[eNB_id]->llr_shifts   = (uint8_t*)malloc16_clear(7*2*frame_parms->N_RB_DL*12);
-      ue_pdsch_vars[eNB_id]->llr_shifts_p = ue_pdsch_vars[eNB_id]->llr_shifts;
-      ue_pdsch_vars[eNB_id]->dl_ch_mag1   = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pdsch_vars[eNB_id]->dl_ch_magb1  = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pdsch_vars[eNB_id]->llr[1]       = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
+      pdsch_vars[eNB_id]->llr_shifts   = (uint8_t*)malloc16_clear(7*2*frame_parms->N_RB_DL*12);
+      pdsch_vars[eNB_id]->llr_shifts_p = pdsch_vars[eNB_id]->llr_shifts;
+      pdsch_vars[eNB_id]->dl_ch_mag1   = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdsch_vars[eNB_id]->dl_ch_magb1  = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdsch_vars[eNB_id]->llr[1]       = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
 
       for (k=0; k<8; k++)
-        ue_pdsch_vars[eNB_id]->rxdataF_comp1[k] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+        pdsch_vars[eNB_id]->rxdataF_comp1[k] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
 
       for (i=0; i<frame_parms->nb_antennas_rx; i++)
         for (j=0; j<4; j++) {
           int idx = (j<<1)+i;
-          ue_pdsch_vars[eNB_id]->dl_ch_mag1[idx]  = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
-          ue_pdsch_vars[eNB_id]->dl_ch_magb1[idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
+          pdsch_vars[eNB_id]->dl_ch_mag1[idx]  = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
+          pdsch_vars[eNB_id]->dl_ch_magb1[idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
 
           for (k=0; k<8; k++)
-            ue_pdsch_vars[eNB_id]->rxdataF_comp1[idx][k] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*14) );
+            pdsch_vars[eNB_id]->rxdataF_comp1[idx][k] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*14) );
         }
 
-#ifdef ENABLE_FULL_FLP
-      phy_init_lte_ue__PDSCH_FLP( ue_pdsch_vars_flp[eNB_id], frame_parms );
-#endif
-
-      phy_init_lte_ue__PDSCH( ue_pdsch_vars_SI[eNB_id], frame_parms );
-      phy_init_lte_ue__PDSCH( ue_pdsch_vars_ra[eNB_id], frame_parms );
-      phy_init_lte_ue__PDSCH( ue_pdsch_vars_mch[eNB_id], frame_parms );
+      phy_init_lte_ue__PDSCH( pdsch_vars_SI[eNB_id], frame_parms );
+      phy_init_lte_ue__PDSCH( pdsch_vars_ra[eNB_id], frame_parms );
+      phy_init_lte_ue__PDSCH( pdsch_vars_mch[eNB_id], frame_parms );
       // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
-      ue_pdcch_vars[eNB_id]->llr   = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      ue_pdcch_vars[eNB_id]->llr16 = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      ue_pdcch_vars[eNB_id]->wbar  = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      ue_pdcch_vars[eNB_id]->e_rx  = (int8_t*)malloc16_clear( 4*2*100*12 );
+      pdcch_vars[eNB_id]->llr   = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars[eNB_id]->llr16 = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars[eNB_id]->wbar  = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars[eNB_id]->e_rx  = (int8_t*)malloc16_clear( 4*2*100*12 );
 
-      ue_pdcch_vars[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pdcch_vars[eNB_id]->dl_ch_rho_ext       = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pdcch_vars[eNB_id]->rho                 = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-      ue_pdcch_vars[eNB_id]->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars[eNB_id]->dl_ch_rho_ext       = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars[eNB_id]->rho                 = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+      pdcch_vars[eNB_id]->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
 
       for (i=0; i<frame_parms->nb_antennas_rx; i++) {
         //ue_pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*7*2) );
-        ue_pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(100*12*4) );
+        pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(100*12*4) );
 
         for (j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
           int idx = (j<<1)+i;
           //  size_t num = 7*2*frame_parms->N_RB_DL*12;
           size_t num = 4*100*12;  // 4 symbols, 100 PRBs, 12 REs per PRB
-          ue_pdcch_vars[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          ue_pdcch_vars[eNB_id]->dl_ch_rho_ext[idx]       = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          ue_pdcch_vars[eNB_id]->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars[eNB_id]->dl_ch_rho_ext[idx]       = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars[eNB_id]->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
         }
       }
 
       // PBCH
-      ue_pbch_vars[eNB_id]->rxdataF_ext         = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-      ue_pbch_vars[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pbch_vars[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      ue_pbch_vars[eNB_id]->llr                 = (int8_t*)malloc16_clear( 1920 );
-      ue_prach_vars[eNB_id]->prachF             = (int16_t*)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(frame_parms->ofdm_symbol_size*12)) );
-      ue_prach_vars[eNB_id]->prach              = (int16_t*)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(frame_parms->ofdm_symbol_size*12)) );
+      pbch_vars[eNB_id]->rxdataF_ext         = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+      pbch_vars[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pbch_vars[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pbch_vars[eNB_id]->llr                 = (int8_t*)malloc16_clear( 1920 );
+      prach_vars[eNB_id]->prachF             = (int16_t*)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(frame_parms->ofdm_symbol_size*12)) );
+      prach_vars[eNB_id]->prach              = (int16_t*)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(frame_parms->ofdm_symbol_size*12)) );
 
       for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-        ue_pbch_vars[eNB_id]->rxdataF_ext[i]    = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
+        pbch_vars[eNB_id]->rxdataF_ext[i]    = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
 
         for (j=0; j<4; j++) {//frame_parms->nb_antennas_tx;j++) {
           int idx = (j<<1)+i;
-          ue_pbch_vars[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
-          ue_pbch_vars[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
+          pbch_vars[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
+          pbch_vars[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*6*12*4 );
         }
       }
     }
 
-    ue_pbch_vars[eNB_id]->decoded_output = (uint8_t*)malloc16_clear( 64 );
+    pbch_vars[eNB_id]->decoded_output = (uint8_t*)malloc16_clear( 64 );
   }
 
-  // initialization for the last instance of ue_pdsch_vars (used for MU-MIMO)
+  // initialization for the last instance of pdsch_vars (used for MU-MIMO)
 
-  ue_pdsch_vars[eNB_id]     = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
-  ue_pdsch_vars_SI[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
-  ue_pdsch_vars_ra[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
-  ue_pdsch_vars_flp[eNB_id] = (LTE_UE_PDSCH_FLP *)malloc16_clear( sizeof(LTE_UE_PDSCH_FLP) );
+  pdsch_vars[eNB_id]     = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
+  pdsch_vars_SI[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
+  pdsch_vars_ra[eNB_id]  = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
 
   if (abstraction_flag == 0) {
-    phy_init_lte_ue__PDSCH( ue_pdsch_vars[eNB_id], frame_parms );
-    ue_pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
+    phy_init_lte_ue__PDSCH( pdsch_vars[eNB_id], frame_parms );
+    pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
 
-    phy_init_lte_ue__PDSCH_FLP( ue_pdsch_vars_flp[eNB_id], frame_parms );
   } else { //abstraction == 1
-    phy_vars_ue->sinr_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
+    ue->sinr_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
   }
 
-  phy_vars_ue->sinr_CQI_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
+  ue->sinr_CQI_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
 
-  phy_vars_ue->init_averaging = 1;
-  phy_vars_ue->pdsch_config_dedicated->p_a = dB0; // default value until overwritten by RRCConnectionReconfiguration
+  ue->init_averaging = 1;
+  ue->pdsch_config_dedicated->p_a = dB0; // default value until overwritten by RRCConnectionReconfiguration
 
   // set channel estimation to do linear interpolation in time
-  phy_vars_ue->high_speed_flag = 1;
-  phy_vars_ue->ch_est_alpha    = 24576;
+  ue->high_speed_flag = 1;
+  ue->ch_est_alpha    = 24576;
 
   init_prach_tables(839);
 
   return 0;
 }
 
-int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
+int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
                      unsigned char is_secondary_eNB,
                      uint8_t cooperation_flag,
                      unsigned char abstraction_flag)
 {
 
   // shortcuts
-  LTE_DL_FRAME_PARMS* const frame_parms = &phy_vars_eNB->lte_frame_parms;
-  LTE_eNB_COMMON* const eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars;
-  LTE_eNB_PUSCH** const eNB_pusch_vars  = phy_vars_eNB->lte_eNB_pusch_vars;
-  LTE_eNB_SRS* const eNB_srs_vars       = phy_vars_eNB->lte_eNB_srs_vars;
-  LTE_eNB_PRACH* const eNB_prach_vars   = &phy_vars_eNB->lte_eNB_prach_vars;
+  LTE_DL_FRAME_PARMS* const frame_parms = &eNB->frame_parms;
+  LTE_eNB_COMMON* const common_vars = &eNB->common_vars;
+  LTE_eNB_PUSCH** const pusch_vars  = eNB->pusch_vars;
+  LTE_eNB_SRS* const srs_vars       = eNB->srs_vars;
+  LTE_eNB_PRACH* const prach_vars   = &eNB->prach_vars;
   int i, j, eNB_id, UE_id; 
 
-  phy_vars_eNB->total_dlsch_bitrate = 0;
-  phy_vars_eNB->total_transmitted_bits = 0;
-  phy_vars_eNB->total_system_throughput = 0;
-  phy_vars_eNB->check_for_MUMIMO_transmissions=0;
+  eNB->total_dlsch_bitrate = 0;
+  eNB->total_transmitted_bits = 0;
+  eNB->total_system_throughput = 0;
+  eNB->check_for_MUMIMO_transmissions=0;
 
   LOG_I(PHY,"[eNB %"PRIu8"] Initializing DL_FRAME_PARMS : N_RB_DL %"PRIu8", PHICH Resource %d, PHICH Duration %d\n",
-        phy_vars_eNB->Mod_id,
+        eNB->Mod_id,
         frame_parms->N_RB_DL,frame_parms->phich_config_common.phich_resource,
         frame_parms->phich_config_common.phich_duration);
-  LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_eNB][MOD %02"PRIu8"][]\n", phy_vars_eNB->Mod_id);
+  LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_eNB][MOD %02"PRIu8"][]\n", eNB->Mod_id);
 
-  lte_gold(frame_parms,phy_vars_eNB->lte_gold_table,frame_parms->Nid_cell);
-  generate_pcfich_reg_mapping(frame_parms);
-  generate_phich_reg_mapping(frame_parms);
+  if (eNB->node_function != NGFI_RRU_IF4) {
+    lte_gold(frame_parms,eNB->lte_gold_table,frame_parms->Nid_cell);
+    generate_pcfich_reg_mapping(frame_parms);
+    generate_phich_reg_mapping(frame_parms);
+    
+    for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
+      eNB->first_run_timing_advance[UE_id] =
+	1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here.
 
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-    phy_vars_eNB->first_run_timing_advance[UE_id] =
+      // clear whole structure
+      bzero( &eNB->UE_stats[UE_id], sizeof(LTE_eNB_UE_stats) );
+      
+      eNB->physicalConfigDedicated[UE_id] = NULL;
+    }
+    
+    eNB->first_run_I0_measurements =
       1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here.
-
-    // clear whole structure
-    bzero( &phy_vars_eNB->eNB_UE_stats[UE_id], sizeof(LTE_eNB_UE_stats) );
-
-    phy_vars_eNB->physicalConfigDedicated[UE_id] = NULL;
   }
-
-  phy_vars_eNB->first_run_I0_measurements =
-    1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here.
-
-#ifndef USER_MODE
-  AssertFatal( frame_parms->nb_antennas_tx <= NB_ANTENNAS_TX, "nb_antennas_tx too large" );
-  AssertFatal( frame_parms->nb_antennas_rx <= NB_ANTENNAS_RX, "nb_antennas_rx too large" );
-#endif
-
-  for (eNB_id=0; eNB_id<3; eNB_id++) {
-
+  //  for (eNB_id=0; eNB_id<3; eNB_id++) {
+  {
+    eNB_id=0;
     if (abstraction_flag==0) {
-
+      
       // TX vars
-      eNB_common_vars->txdata[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
-      eNB_common_vars->txdataF[eNB_id] = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
-
+      if (eNB->node_function != NGFI_RCC_IF4)
+	common_vars->txdata[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
+      common_vars->txdataF[eNB_id] = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
+      
       for (i=0; i<frame_parms->nb_antennas_tx; i++) {
-#ifdef USER_MODE
-        eNB_common_vars->txdata[eNB_id][i]  = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
-        eNB_common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
-#else // USER_MODE
-        eNB_common_vars->txdata[eNB_id][i]  = TX_DMA_BUFFER[eNB_id][i];
-        eNB_common_vars->txdataF[eNB_id][i] = (int32_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
-#endif //USER_MODE
+	if (eNB->node_function != NGFI_RCC_IF4)
+	  common_vars->txdata[eNB_id][i]  = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
+	common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
 #ifdef DEBUG_PHY
-        msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]);
-        msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF[%d][%d] = %p (%d bytes)\n",
-            eNB_id,i,eNB_common_vars->txdataF[eNB_id][i],
-            FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
+	msg("[openair][LTE_PHY][INIT] common_vars->txdata[%d][%d] = %p\n",eNB_id,i,common_vars->txdata[eNB_id][i]);
+	msg("[openair][LTE_PHY][INIT] common_vars->txdataF[%d][%d] = %p (%d bytes)\n",
+	    eNB_id,i,common_vars->txdataF[eNB_id][i],
+	    FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
 #endif
       }
-
+      
       // RX vars
-      eNB_common_vars->rxdata[eNB_id]        = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-      eNB_common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-      eNB_common_vars->rxdataF[eNB_id]       = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-
+      if (eNB->node_function != NGFI_RCC_IF4) {
+	common_vars->rxdata[eNB_id]        = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+      }
+      common_vars->rxdataF[eNB_id]       = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+      
       for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-#ifndef USER_MODE
-        eNB_common_vars->rxdata[eNB_id][i] = (int32_t*)RX_DMA_BUFFER[eNB_id][i];
-#else //USER_MODE
-        eNB_common_vars->rxdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
-#endif //USER_MODE
-        eNB_common_vars->rxdata_7_5kHz[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->samples_per_tti*sizeof(int32_t) );
-        // RK 2 times because of output format of FFT!
-        // FIXME We should get rid of this
-        eNB_common_vars->rxdataF[eNB_id][i] = (int32_t*)malloc16_clear( 2*sizeof(int32_t)*(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti) );
+	if (eNB->node_function != NGFI_RCC_IF4) {
+	  common_vars->rxdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
+	  common_vars->rxdata_7_5kHz[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->samples_per_tti*sizeof(int32_t) );
+	}
+	
+	common_vars->rxdataF[eNB_id][i] = (int32_t*)malloc16_clear(sizeof(int32_t)*(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti) );
 #ifdef DEBUG_PHY
-        msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->rxdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->rxdata[eNB_id][i]);
-        msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->rxdata_7_5kHz[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->rxdata_7_5kHz[eNB_id][i]);
+	msg("[openair][LTE_PHY][INIT] common_vars->rxdata[%d][%d] = %p\n",eNB_id,i,common_vars->rxdata[eNB_id][i]);
+	msg("[openair][LTE_PHY][INIT] common_vars->rxdata_7_5kHz[%d][%d] = %p\n",eNB_id,i,common_vars->rxdata_7_5kHz[eNB_id][i]);
 #endif
       }
-
-      // Channel estimates for SRS
-      for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-
-        eNB_srs_vars[UE_id].srs_ch_estimates[eNB_id]      = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_srs_vars[UE_id].srs_ch_estimates_time[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-
-        for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-          eNB_srs_vars[UE_id].srs_ch_estimates[eNB_id][i]      = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size );
-          eNB_srs_vars[UE_id].srs_ch_estimates_time[eNB_id][i] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size*2 );
-        }
-      } //UE_id
-
-      eNB_common_vars->sync_corr[eNB_id] = (uint32_t*)malloc16_clear( LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(uint32_t)*frame_parms->samples_per_tti );
+      
+      if (eNB->node_function != NGFI_RRU_IF4) {
+	// Channel estimates for SRS
+	for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
+	  
+	  srs_vars[UE_id].srs_ch_estimates[eNB_id]      = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  srs_vars[UE_id].srs_ch_estimates_time[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  
+	  for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	    srs_vars[UE_id].srs_ch_estimates[eNB_id][i]      = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size );
+	    srs_vars[UE_id].srs_ch_estimates_time[eNB_id][i] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->ofdm_symbol_size*2 );
+	  }
+	} //UE_id
+	
+	common_vars->sync_corr[eNB_id] = (uint32_t*)malloc16_clear( LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(uint32_t)*frame_parms->samples_per_tti );
+      }
     } else { //UPLINK abstraction = 1
-      phy_vars_eNB->sinr_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
+      eNB->sinr_dB = (double*) malloc16_clear( frame_parms->N_RB_DL*12*sizeof(double) );
     }
   } //eNB_id
-
-#ifndef NO_UL_REF
-
+  
+  
+  
   if (abstraction_flag==0) {
-    generate_ul_ref_sigs_rx();
-
-    // SRS
-    for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-      eNB_srs_vars[UE_id].srs = (int32_t*)malloc16_clear(2*frame_parms->ofdm_symbol_size*sizeof(int32_t));
+    if (eNB->node_function != NGFI_RRU_IF4) {
+      generate_ul_ref_sigs_rx();
+      
+      // SRS
+      for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
+	srs_vars[UE_id].srs = (int32_t*)malloc16_clear(2*frame_parms->ofdm_symbol_size*sizeof(int32_t));
+      }
     }
   }
-
-#endif
-
-  // ULSCH VARS
-
-  eNB_prach_vars->prachF = (int16_t*)malloc16_clear( 2*1024 /*FIXME what is the correct number?*/ *sizeof(int16_t) );
-
+  
+  
+  
+  // ULSCH VARS, skip if NFGI_RRU_IF4
+  
+  if (eNB->node_function!=NGFI_RRU_IF4)
+    prach_vars->prachF = (int16_t*)malloc16_clear( 1024*2*sizeof(int16_t) );
+  
   /* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
-  AssertFatal(frame_parms->nb_antennas_rx <= sizeof(eNB_prach_vars->rxsigF) / sizeof(eNB_prach_vars->rxsigF[0]),
+  AssertFatal(frame_parms->nb_antennas_rx <= sizeof(prach_vars->rxsigF) / sizeof(prach_vars->rxsigF[0]),
               "nb_antennas_rx too large");
   for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-    eNB_prach_vars->rxsigF[i] = (int16_t*)malloc16_clear( frame_parms->ofdm_symbol_size*12*2*sizeof(int16_t) );
+    prach_vars->rxsigF[i] = (int16_t*)malloc16_clear( frame_parms->ofdm_symbol_size*12*2*sizeof(int16_t) );
 #ifdef DEBUG_PHY
-    msg("[openair][LTE_PHY][INIT] prach_vars->rxsigF[%d] = %p\n",i,eNB_prach_vars->rxsigF[i]);
+    msg("[openair][LTE_PHY][INIT] prach_vars->rxsigF[%d] = %p\n",i,prach_vars->rxsigF[i]);
 #endif
   }
-
-  AssertFatal(frame_parms->nb_antennas_rx <= sizeof(eNB_prach_vars->prach_ifft) / sizeof(eNB_prach_vars->prach_ifft[0]),
-              "nb_antennas_rx too large");
-  for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-    eNB_prach_vars->prach_ifft[i] = (int16_t*)malloc16_clear(1024*2*sizeof(int16_t));
+  
+  if (eNB->node_function != NGFI_RRU_IF4) {
+    AssertFatal(frame_parms->nb_antennas_rx <= sizeof(prach_vars->prach_ifft) / sizeof(prach_vars->prach_ifft[0]),
+		"nb_antennas_rx too large");
+    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+      prach_vars->prach_ifft[i] = (int16_t*)malloc16_clear(1024*2*sizeof(int16_t));
 #ifdef DEBUG_PHY
-    msg("[openair][LTE_PHY][INIT] prach_vars->prach_ifft[%d] = %p\n",i,eNB_prach_vars->prach_ifft[i]);
+      msg("[openair][LTE_PHY][INIT] prach_vars->prach_ifft[%d] = %p\n",i,prach_vars->prach_ifft[i]);
 #endif
-  }
-
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-
-    //FIXME
-    eNB_pusch_vars[UE_id] = (LTE_eNB_PUSCH*)malloc16_clear( NUMBER_OF_UE_MAX*sizeof(LTE_eNB_PUSCH) );
+    }
 
+    for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
+      
+      //FIXME
+      pusch_vars[UE_id] = (LTE_eNB_PUSCH*)malloc16_clear( NUMBER_OF_UE_MAX*sizeof(LTE_eNB_PUSCH) );
+      
+      if (abstraction_flag==0) {
+	for (eNB_id=0; eNB_id<3; eNB_id++) {
+	  
+	  pusch_vars[UE_id]->rxdataF_ext[eNB_id]      = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->rxdataF_ext2[eNB_id]     = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->drs_ch_estimates[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->rxdataF_comp[eNB_id]     = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->ul_ch_mag[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  pusch_vars[UE_id]->ul_ch_magb[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	  
+	  for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	    // RK 2 times because of output format of FFT!
+	    // FIXME We should get rid of this
+	    pusch_vars[UE_id]->rxdataF_ext[eNB_id][i]      = (int32_t*)malloc16_clear( 2*sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
+	    pusch_vars[UE_id]->rxdataF_ext2[eNB_id][i]     = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
+	    pusch_vars[UE_id]->drs_ch_estimates[eNB_id][i] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
+	    pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id][i] = (int32_t*)malloc16_clear( 2*2*sizeof(int32_t)*frame_parms->ofdm_symbol_size );
+	    pusch_vars[UE_id]->rxdataF_comp[eNB_id][i]     = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
+	    pusch_vars[UE_id]->ul_ch_mag[eNB_id][i]  = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	    pusch_vars[UE_id]->ul_ch_magb[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	  }
+	  
+	  // In case of Distributed Alamouti Collabrative scheme separate channel estimates are required for both the UEs
+	  if (cooperation_flag == 2) {
+	    pusch_vars[UE_id]->drs_ch_estimates_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // UE 0 DRS estimates
+	    pusch_vars[UE_id]->drs_ch_estimates_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // UE 1 DRS estimates
+	    
+	    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	      pusch_vars[UE_id]->drs_ch_estimates_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	      pusch_vars[UE_id]->drs_ch_estimates_1[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	    }
+	    
+	    // Compensated data for the case of Distributed Alamouti Scheme
+	    pusch_vars[UE_id]->rxdataF_comp_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // it will contain(y)*(h0*)
+	    pusch_vars[UE_id]->rxdataF_comp_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // it will contain(y*)*(h1)
+	    
+	    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	      pusch_vars[UE_id]->rxdataF_comp_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	      pusch_vars[UE_id]->rxdataF_comp_1[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	    }
+	    
+	    // UE 0
+	    pusch_vars[UE_id]->ul_ch_mag_0[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	    pusch_vars[UE_id]->ul_ch_magb_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	    
+	    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	      pusch_vars[UE_id]->ul_ch_mag_0[eNB_id][i]  = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	      pusch_vars[UE_id]->ul_ch_magb_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	    }
+	    
+	    // UE 1
+	    pusch_vars[UE_id]->ul_ch_mag_1[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	    pusch_vars[UE_id]->ul_ch_magb_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
+	    
+	    for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+	      pusch_vars[UE_id]->ul_ch_mag_1[eNB_id][i]  = (int32_t*)malloc16( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	      pusch_vars[UE_id]->ul_ch_magb_1[eNB_id][i] = (int32_t*)malloc16( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
+	    }
+	  }//cooperation_flag
+	} //eNB_id
+	
+	pusch_vars[UE_id]->llr = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
+      } // abstraction_flag
+    } //UE_id
+
+    
     if (abstraction_flag==0) {
-      for (eNB_id=0; eNB_id<3; eNB_id++) {
-
-        eNB_pusch_vars[UE_id]->rxdataF_ext[eNB_id]      = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->rxdataF_ext2[eNB_id]     = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->drs_ch_estimates[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->rxdataF_comp[eNB_id]     = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->ul_ch_mag[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-        eNB_pusch_vars[UE_id]->ul_ch_magb[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-
-        for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-          // RK 2 times because of output format of FFT!
-          // FIXME We should get rid of this
-          eNB_pusch_vars[UE_id]->rxdataF_ext[eNB_id][i]      = (int32_t*)malloc16_clear( 2*sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
-          eNB_pusch_vars[UE_id]->rxdataF_ext2[eNB_id][i]     = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
-          eNB_pusch_vars[UE_id]->drs_ch_estimates[eNB_id][i] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
-          eNB_pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id][i] = (int32_t*)malloc16_clear( 2*2*sizeof(int32_t)*frame_parms->ofdm_symbol_size );
-          eNB_pusch_vars[UE_id]->rxdataF_comp[eNB_id][i]     = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->N_RB_UL*12*frame_parms->symbols_per_tti );
-          eNB_pusch_vars[UE_id]->ul_ch_mag[eNB_id][i]  = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-          eNB_pusch_vars[UE_id]->ul_ch_magb[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-        }
-
-        // In case of Distributed Alamouti Collabrative scheme separate channel estimates are required for both the UEs
-        if (cooperation_flag == 2) {
-          eNB_pusch_vars[UE_id]->drs_ch_estimates_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // UE 0 DRS estimates
-          eNB_pusch_vars[UE_id]->drs_ch_estimates_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // UE 1 DRS estimates
-
-          for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-            eNB_pusch_vars[UE_id]->drs_ch_estimates_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-            eNB_pusch_vars[UE_id]->drs_ch_estimates_1[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-          }
-
-          // Compensated data for the case of Distributed Alamouti Scheme
-          eNB_pusch_vars[UE_id]->rxdataF_comp_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // it will contain(y)*(h0*)
-          eNB_pusch_vars[UE_id]->rxdataF_comp_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); // it will contain(y*)*(h1)
-
-          for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-            eNB_pusch_vars[UE_id]->rxdataF_comp_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-            eNB_pusch_vars[UE_id]->rxdataF_comp_1[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-          }
-
-          // UE 0
-          eNB_pusch_vars[UE_id]->ul_ch_mag_0[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-          eNB_pusch_vars[UE_id]->ul_ch_magb_0[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-
-          for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-            eNB_pusch_vars[UE_id]->ul_ch_mag_0[eNB_id][i]  = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-            eNB_pusch_vars[UE_id]->ul_ch_magb_0[eNB_id][i] = (int32_t*)malloc16_clear( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-          }
-
-          // UE 1
-          eNB_pusch_vars[UE_id]->ul_ch_mag_1[eNB_id]  = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-          eNB_pusch_vars[UE_id]->ul_ch_magb_1[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
-
-          for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-            eNB_pusch_vars[UE_id]->ul_ch_mag_1[eNB_id][i]  = (int32_t*)malloc16( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-            eNB_pusch_vars[UE_id]->ul_ch_magb_1[eNB_id][i] = (int32_t*)malloc16( frame_parms->symbols_per_tti*sizeof(int32_t)*frame_parms->N_RB_UL*12 );
-          }
-        }//cooperation_flag
-      } //eNB_id
-
-      eNB_pusch_vars[UE_id]->llr = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
-    } // abstraction_flag
-  } //UE_id
-
-  if (abstraction_flag==0) {
-    if (is_secondary_eNB) {
-      for (eNB_id=0; eNB_id<3; eNB_id++) {
-        phy_vars_eNB->dl_precoder_SeNB[eNB_id] = (int **)malloc16(4*sizeof(int*));
-
-        if (phy_vars_eNB->dl_precoder_SeNB[eNB_id]) {
+      if (is_secondary_eNB) {
+	for (eNB_id=0; eNB_id<3; eNB_id++) {
+	  eNB->dl_precoder_SeNB[eNB_id] = (int **)malloc16(4*sizeof(int*));
+	  
+	  if (eNB->dl_precoder_SeNB[eNB_id]) {
 #ifdef DEBUG_PHY
-          msg("[openair][SECSYS_PHY][INIT] phy_vars_eNB->dl_precoder_SeNB[%d] allocated at %p\n",eNB_id,
-              phy_vars_eNB->dl_precoder_SeNB[eNB_id]);
+	    msg("[openair][SECSYS_PHY][INIT] eNB->dl_precoder_SeNB[%d] allocated at %p\n",eNB_id,
+		eNB->dl_precoder_SeNB[eNB_id]);
 #endif
-        } else {
-          msg("[openair][SECSYS_PHY][INIT] phy_vars_eNB->dl_precoder_SeNB[%d] not allocated\n",eNB_id);
-          return(-1);
-        }
-
-        for (j=0; j<phy_vars_eNB->lte_frame_parms.nb_antennas_tx; j++) {
-          phy_vars_eNB->dl_precoder_SeNB[eNB_id][j] = (int *)malloc16(2*sizeof(int)*(phy_vars_eNB->lte_frame_parms.ofdm_symbol_size)); // repeated format (hence the '2*')
-
-          if (phy_vars_eNB->dl_precoder_SeNB[eNB_id][j]) {
+	  } else {
+	    msg("[openair][SECSYS_PHY][INIT] eNB->dl_precoder_SeNB[%d] not allocated\n",eNB_id);
+	    return(-1);
+	  }
+	  
+	  for (j=0; j<eNB->frame_parms.nb_antennas_tx; j++) {
+	    eNB->dl_precoder_SeNB[eNB_id][j] = (int *)malloc16(2*sizeof(int)*(eNB->frame_parms.ofdm_symbol_size)); // repeated format (hence the '2*')
+	    
+	    if (eNB->dl_precoder_SeNB[eNB_id][j]) {
 #ifdef DEBUG_PHY
-            msg("[openair][LTE_PHY][INIT] phy_vars_eNB->dl_precoder_SeNB[%d][%d] allocated at %p\n",eNB_id,j,
-                phy_vars_eNB->dl_precoder_SeNB[eNB_id][j]);
+	      msg("[openair][LTE_PHY][INIT] eNB->dl_precoder_SeNB[%d][%d] allocated at %p\n",eNB_id,j,
+		  eNB->dl_precoder_SeNB[eNB_id][j]);
 #endif
-            memset(phy_vars_eNB->dl_precoder_SeNB[eNB_id][j],0,2*sizeof(int)*(phy_vars_eNB->lte_frame_parms.ofdm_symbol_size));
-          } else {
-            msg("[openair][LTE_PHY][INIT] phy_vars_eNB->dl_precoder_SeNB[%d][%d] not allocated\n",eNB_id,j);
-            return(-1);
-          }
-        } //for(j=...nb_antennas_tx
-
-      } //for(eNB_id...
+	      memset(eNB->dl_precoder_SeNB[eNB_id][j],0,2*sizeof(int)*(eNB->frame_parms.ofdm_symbol_size));
+	    } else {
+	      msg("[openair][LTE_PHY][INIT] eNB->dl_precoder_SeNB[%d][%d] not allocated\n",eNB_id,j);
+	      return(-1);
+	    }
+	  } //for(j=...nb_antennas_tx
+	  
+	} //for(eNB_id...
+      }
     }
-  }
-
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
-    phy_vars_eNB->eNB_UE_stats_ptr[UE_id] = &phy_vars_eNB->eNB_UE_stats[UE_id];
-
-  phy_vars_eNB->pdsch_config_dedicated->p_a = dB0; //defaul value until overwritten by RRCConnectionReconfiguration
-
-  init_prach_tables(839);
+    
+    for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
+      eNB->UE_stats_ptr[UE_id] = &eNB->UE_stats[UE_id];
+    
+    eNB->pdsch_config_dedicated->p_a = dB0; //defaul value until overwritten by RRCConnectionReconfiguration
+
+    init_prach_tables(839);
+  } // node_function != NGFI_RRU_IF4
 
   return (0);
 }
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
index 0db51e8b170c001e8f221b3b6acde2993ee297c8..d13b624cfd5fdff042bbd1839c91d382c7a9677a 100644
--- a/openair1/PHY/INIT/lte_param_init.c
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -25,7 +25,7 @@ void lte_param_init(unsigned char N_tx,
 		    uint32_t perfect_ce)
 {
 
-  LTE_DL_FRAME_PARMS *lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms;
   int i;
 
 
@@ -39,64 +39,64 @@ void lte_param_init(unsigned char N_tx,
   randominit(0);
   set_taus_seed(0);
 
-  lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
-  lte_frame_parms->N_RB_DL            = N_RB_DL;   //50 for 10MHz and 25 for 5 MHz
-  lte_frame_parms->N_RB_UL            = N_RB_DL;
-  lte_frame_parms->threequarter_fs    = threequarter_fs;
-  lte_frame_parms->Ncp                = extended_prefix_flag;
-  lte_frame_parms->Ncp_UL             = extended_prefix_flag;
-  lte_frame_parms->Nid_cell           = Nid_cell;
-  lte_frame_parms->nushift            = Nid_cell%6;
-  lte_frame_parms->nb_antennas_tx     = N_tx;
-  lte_frame_parms->nb_antennas_rx     = N_rx;
-  lte_frame_parms->nb_antennas_tx_eNB = N_tx;
-  lte_frame_parms->phich_config_common.phich_resource         = one;
-  lte_frame_parms->tdd_config         = tdd_config;
-  lte_frame_parms->frame_type         = frame_type;
-  //  lte_frame_parms->Csrs = 2;
-  //  lte_frame_parms->Bsrs = 0;
-  //  lte_frame_parms->kTC = 0;44
-  //  lte_frame_parms->n_RRC = 0;
-  lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
-
-  init_frame_parms(lte_frame_parms,osf);
-
-  //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-  //  phy_init_top(lte_frame_parms); //allocation
+  frame_parms = &(PHY_vars_eNB->frame_parms);
+
+  frame_parms->N_RB_DL            = N_RB_DL;   //50 for 10MHz and 25 for 5 MHz
+  frame_parms->N_RB_UL            = N_RB_DL;
+  frame_parms->threequarter_fs    = threequarter_fs;
+  frame_parms->Ncp                = extended_prefix_flag;
+  frame_parms->Ncp_UL             = extended_prefix_flag;
+  frame_parms->Nid_cell           = Nid_cell;
+  frame_parms->nushift            = Nid_cell%6;
+  frame_parms->nb_antennas_tx     = N_tx;
+  frame_parms->nb_antennas_rx     = N_rx;
+  frame_parms->nb_antennas_tx_eNB = N_tx;
+  frame_parms->phich_config_common.phich_resource         = one;
+  frame_parms->tdd_config         = tdd_config;
+  frame_parms->frame_type         = frame_type;
+  //  frame_parms->Csrs = 2;
+  //  frame_parms->Bsrs = 0;
+  //  frame_parms->kTC = 0;44
+  //  frame_parms->n_RRC = 0;
+  frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
+
+  init_frame_parms(frame_parms,osf);
+
+  //copy_lte_parms_to_phy_framing(frame_parms, &(PHY_config->PHY_framing));
+
+  //  phy_init_top(frame_parms); //allocation
 
   PHY_vars_UE->is_secondary_ue = 0;
-  PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-  PHY_vars_eNB->lte_frame_parms = *lte_frame_parms;
+  PHY_vars_UE->frame_parms = *frame_parms;
+  PHY_vars_eNB->frame_parms = *frame_parms;
 
-  phy_init_lte_top(lte_frame_parms);
-  dump_frame_parms(lte_frame_parms);
+  phy_init_lte_top(frame_parms);
+  dump_frame_parms(frame_parms);
 
-  PHY_vars_UE->PHY_measurements.n_adj_cells=0;
-  PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
-  PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+  PHY_vars_UE->measurements.n_adj_cells=0;
+  PHY_vars_UE->measurements.adj_cell_id[0] = Nid_cell+1;
+  PHY_vars_UE->measurements.adj_cell_id[1] = Nid_cell+2;
 
   for (i=0; i<3; i++)
-    lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
+    lte_gold(frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
 
   phy_init_lte_ue(PHY_vars_UE,1,0);
   phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
 
-  generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
-  generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
+  generate_pcfich_reg_mapping(&PHY_vars_UE->frame_parms);
+  generate_phich_reg_mapping(&PHY_vars_UE->frame_parms);
 
   // DL power control init
   if (transmission_mode == 1) {
     PHY_vars_eNB->pdsch_config_dedicated->p_a  = dB0; // 4 = 0dB
-    ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0;
+    ((PHY_vars_eNB->frame_parms).pdsch_config_common).p_b = 0;
     PHY_vars_UE->pdsch_config_dedicated->p_a  = dB0; // 4 = 0dB
-    ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 0;
+    ((PHY_vars_UE->frame_parms).pdsch_config_common).p_b = 0;
   } else { // rho_a = rhob
     PHY_vars_eNB->pdsch_config_dedicated->p_a  = dB0; // 4 = 0dB
-    ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 1;
+    ((PHY_vars_eNB->frame_parms).pdsch_config_common).p_b = 1;
     PHY_vars_UE->pdsch_config_dedicated->p_a  = dB0; // 4 = 0dB
-    ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
+    ((PHY_vars_UE->frame_parms).pdsch_config_common).p_b = 1;
   }
 
   PHY_vars_UE->perfect_ce = perfect_ce;
diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
index af72bce967cfa8c27465f36fc44b348197ad4bf3..48339de4cdbb28d8bda02b0f97da2654c389481f 100644
--- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
+++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
@@ -36,7 +36,7 @@ extern int card;
 #endif
 
 void
-phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB_id)
+phy_adjust_gain (PHY_VARS_UE *ue, uint32_t rx_power_fil_dB, uint8_t eNB_id)
 {
 
 #ifdef EXMIMO
@@ -46,72 +46,72 @@ phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB
 
   LOG_D(PHY,"Gain control: rssi %d (%d,%d)\n",
          rx_power_fil_dB,
-         phy_vars_ue->PHY_measurements.rssi,
-         phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id]
+         ue->measurements.rssi,
+         ue->measurements.rx_power_avg_dB[eNB_id]
         );
 
   // Gain control with hysterisis
-  // Adjust gain in phy_vars_ue->rx_vars[0].rx_total_gain_dB
+  // Adjust gain in ue->rx_vars[0].rx_total_gain_dB
 
-  if (rx_power_fil_dB < TARGET_RX_POWER - 5) //&& (phy_vars_ue->rx_total_gain_dB < MAX_RF_GAIN) )
-    phy_vars_ue->rx_total_gain_dB+=5;
-  else if (rx_power_fil_dB > TARGET_RX_POWER + 5) //&& (phy_vars_ue->rx_total_gain_dB > MIN_RF_GAIN) )
-    phy_vars_ue->rx_total_gain_dB-=5;
+  if (rx_power_fil_dB < TARGET_RX_POWER - 5) //&& (ue->rx_total_gain_dB < MAX_RF_GAIN) )
+    ue->rx_total_gain_dB+=5;
+  else if (rx_power_fil_dB > TARGET_RX_POWER + 5) //&& (ue->rx_total_gain_dB > MIN_RF_GAIN) )
+    ue->rx_total_gain_dB-=5;
 
-  if (phy_vars_ue->rx_total_gain_dB>MAX_RF_GAIN) {
+  if (ue->rx_total_gain_dB>MAX_RF_GAIN) {
     /*
     if ((openair_daq_vars.rx_rf_mode==0) && (openair_daq_vars.mode == openair_NOT_SYNCHED)) {
       openair_daq_vars.rx_rf_mode=1;
-      phy_vars_ue->rx_total_gain_dB = max(MIN_RF_GAIN,MAX_RF_GAIN-25);
+      ue->rx_total_gain_dB = max(MIN_RF_GAIN,MAX_RF_GAIN-25);
     }
     else {
     */
-    phy_vars_ue->rx_total_gain_dB = MAX_RF_GAIN;
-  } else if (phy_vars_ue->rx_total_gain_dB<MIN_RF_GAIN) {
+    ue->rx_total_gain_dB = MAX_RF_GAIN;
+  } else if (ue->rx_total_gain_dB<MIN_RF_GAIN) {
     /*
     if ((openair_daq_vars.rx_rf_mode==1) && (openair_daq_vars.mode == openair_NOT_SYNCHED)) {
       openair_daq_vars.rx_rf_mode=0;
-      phy_vars_ue->rx_total_gain_dB = min(MAX_RF_GAIN,MIN_RF_GAIN+25);
+      ue->rx_total_gain_dB = min(MAX_RF_GAIN,MIN_RF_GAIN+25);
     }
     else {
     */
-    phy_vars_ue->rx_total_gain_dB = MIN_RF_GAIN;
+    ue->rx_total_gain_dB = MIN_RF_GAIN;
   }
 
-  LOG_D(PHY,"Gain control: rx_total_gain_dB = %d (max %d,rxpf %d)\n",phy_vars_ue->rx_total_gain_dB,MAX_RF_GAIN,rx_power_fil_dB);
+  LOG_D(PHY,"Gain control: rx_total_gain_dB = %d (max %d,rxpf %d)\n",ue->rx_total_gain_dB,MAX_RF_GAIN,rx_power_fil_dB);
 
 #ifdef EXMIMO
 
-  if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_max[0]) {
-    phy_vars_ue->rx_total_gain_dB = phy_vars_ue->rx_gain_max[0];
+  if (ue->rx_total_gain_dB>ue->rx_gain_max[0]) {
+    ue->rx_total_gain_dB = ue->rx_gain_max[0];
 
-    for (i=0; i<phy_vars_ue->lte_frame_parms.nb_antennas_rx; i++) {
+    for (i=0; i<ue->frame_parms.nb_antennas_rx; i++) {
       p_exmimo_config->rf.rx_gain[i][0] = 30;
     }
 
-  } else if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_max[0]-30)) {
+  } else if (ue->rx_total_gain_dB<(ue->rx_gain_max[0]-30)) {
     // for the moment we stay in max gain mode
-    phy_vars_ue->rx_total_gain_dB = phy_vars_ue->rx_gain_max[0] - 30;
+    ue->rx_total_gain_dB = ue->rx_gain_max[0] - 30;
 
-    for (i=0; i<phy_vars_ue->lte_frame_parms.nb_antennas_rx; i++) {
+    for (i=0; i<ue->frame_parms.nb_antennas_rx; i++) {
       p_exmimo_config->rf.rx_gain[i][0] = 0;
     }
 
     /*
-      phy_vars_ue->rx_gain_mode[0] = byp;
-      phy_vars_ue->rx_gain_mode[1] = byp;
+      ue->rx_gain_mode[0] = byp;
+      ue->rx_gain_mode[1] = byp;
       exmimo_pci_interface->rf.rf_mode0 = 22991; //bypass
       exmimo_pci_interface->rf.rf_mode1 = 22991; //bypass
 
-      if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_byp[0]-50)) {
+      if (ue->rx_total_gain_dB<(ue->rx_gain_byp[0]-50)) {
       exmimo_pci_interface->rf.rx_gain00 = 0;
       exmimo_pci_interface->rf.rx_gain10 = 0;
       }
     */
   } else {
 
-    for (i=0; i<phy_vars_ue->lte_frame_parms.nb_antennas_rx; i++) {
-      p_exmimo_config->rf.rx_gain[i][0] =  30 - phy_vars_ue->rx_gain_max[0] + phy_vars_ue->rx_total_gain_dB;
+    for (i=0; i<ue->frame_parms.nb_antennas_rx; i++) {
+      p_exmimo_config->rf.rx_gain[i][0] =  30 - ue->rx_gain_max[0] + ue->rx_total_gain_dB;
     }
   }
 
@@ -119,28 +119,28 @@ phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB
     break;
   case med_gain:
   case byp_gain:
-      if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_byp[0]) {
-          phy_vars_ue->rx_gain_mode[0]   = max_gain;
-          phy_vars_ue->rx_gain_mode[1]   = max_gain;
+      if (ue->rx_total_gain_dB>ue->rx_gain_byp[0]) {
+          ue->rx_gain_mode[0]   = max_gain;
+          ue->rx_gain_mode[1]   = max_gain;
           exmimo_pci_interface->rf.rf_mode0 = 55759; //max gain
           exmimo_pci_interface->rf.rf_mode1 = 55759; //max gain
 
-          if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_max[0]) {
+          if (ue->rx_total_gain_dB>ue->rx_gain_max[0]) {
               exmimo_pci_interface->rf.rx_gain00 = 50;
               exmimo_pci_interface->rf.rx_gain10 = 50;
           }
           else {
-              exmimo_pci_interface->rf.rx_gain00 = 50 - phy_vars_ue->rx_gain_max[0] + phy_vars_ue->rx_total_gain_dB;
-              exmimo_pci_interface->rf.rx_gain10 = 50 - phy_vars_ue->rx_gain_max[1] + phy_vars_ue->rx_total_gain_dB;
+              exmimo_pci_interface->rf.rx_gain00 = 50 - ue->rx_gain_max[0] + ue->rx_total_gain_dB;
+              exmimo_pci_interface->rf.rx_gain10 = 50 - ue->rx_gain_max[1] + ue->rx_total_gain_dB;
           }
       }
-      else if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_byp[0]-50)) {
+      else if (ue->rx_total_gain_dB<(ue->rx_gain_byp[0]-50)) {
           exmimo_pci_interface->rf.rx_gain00 = 0;
           exmimo_pci_interface->rf.rx_gain10 = 0;
       }
       else {
-          exmimo_pci_interface->rf.rx_gain00 = 50 - phy_vars_ue->rx_gain_byp[0] + phy_vars_ue->rx_total_gain_dB;
-          exmimo_pci_interface->rf.rx_gain10 = 50 - phy_vars_ue->rx_gain_byp[1] + phy_vars_ue->rx_total_gain_dB;
+          exmimo_pci_interface->rf.rx_gain00 = 50 - ue->rx_gain_byp[0] + ue->rx_total_gain_dB;
+          exmimo_pci_interface->rf.rx_gain10 = 50 - ue->rx_gain_byp[1] + ue->rx_total_gain_dB;
       }
       break;
   default:
@@ -152,9 +152,9 @@ phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB
 #endif
 
 #ifdef DEBUG_PHY
-  /*  if ((phy_vars_ue->frame%100==0) || (phy_vars_ue->frame < 10))
+  /*  if ((ue->frame%100==0) || (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,
+    ue->frame,rx_power,rx_power_fil,rx_power_fil_dB,coef,ncoef,ue->rx_total_gain_dB,
   TARGET_RX_POWER,MAX_RF_GAIN,MIN_RF_GAIN);
   */
 #endif //DEBUG_PHY
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
index 059119c605536e1d599c657737e1d14ffd0a626b..7467dd38a54bff7028cfcfbd776b1a8811102d1a 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
@@ -37,7 +37,7 @@
 // last channel estimate of the receiver
 
 void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
-                      PHY_VARS_UE *phy_vars_ue,
+                      PHY_VARS_UE *ue,
                       unsigned char eNB_id,
                       unsigned char clear,
                       short coef)
@@ -51,7 +51,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
   ncoef = 32767 - coef;
 
 #ifdef DEBUG_PHY
-  LOG_D(PHY,"frame %d, slot %d: rx_offset (before) = %d\n",phy_vars_ue->frame_rx,phy_vars_ue->slot_rx,phy_vars_ue->rx_offset);
+  LOG_D(PHY,"frame %d, slot %d: rx_offset (before) = %d\n",ue->frame_rx,ue->slot_rx,ue->rx_offset);
 #endif //DEBUG_PHY
 
 
@@ -60,8 +60,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
     temp = 0;
 
     for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
-      Re = ((int16_t*)phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
-      Im = ((int16_t*)phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
+      Re = ((int16_t*)ue->common_vars.dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
+      Im = ((int16_t*)ue->common_vars.dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
       temp += (Re*Re/2) + (Im*Im/2);
     }
 
@@ -81,21 +81,21 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
   diff = max_pos_fil - frame_parms->nb_prefix_samples/8;
 
   if ( diff > SYNCH_HYST )
-    phy_vars_ue->rx_offset++;
+    ue->rx_offset++;
   else if (diff < -SYNCH_HYST)
-    phy_vars_ue->rx_offset--;
+    ue->rx_offset--;
 
-  if ( phy_vars_ue->rx_offset < 0 )
-    phy_vars_ue->rx_offset += FRAME_LENGTH_COMPLEX_SAMPLES;
+  if ( ue->rx_offset < 0 )
+    ue->rx_offset += FRAME_LENGTH_COMPLEX_SAMPLES;
 
-  if ( phy_vars_ue->rx_offset >= FRAME_LENGTH_COMPLEX_SAMPLES )
-    phy_vars_ue->rx_offset -= FRAME_LENGTH_COMPLEX_SAMPLES;
+  if ( ue->rx_offset >= FRAME_LENGTH_COMPLEX_SAMPLES )
+    ue->rx_offset -= FRAME_LENGTH_COMPLEX_SAMPLES;
 
 
 
 #ifdef DEBUG_PHY
   LOG_D(PHY,"frame %d: rx_offset (after) = %d : max_pos = %d,max_pos_fil = %d (peak %d)\n",
-        phy_vars_ue->frame_rx,phy_vars_ue->rx_offset,max_pos,max_pos_fil,temp);
+        ue->frame_rx,ue->rx_offset,max_pos,max_pos_fil,temp);
 #endif //DEBUG_PHY
 
 
@@ -103,7 +103,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
 
 
 int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
-                           LTE_eNB_SRS *lte_eNb_srs,
+                           LTE_eNB_SRS *lte_eNB_srs,
                            unsigned int  *eNB_id,
                            unsigned char clear,
                            unsigned char number_of_cards,
@@ -133,23 +133,23 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
       // do ifft of channel estimate
       switch(frame_parms->N_RB_DL) {
       case 6:
-	dft128((int16_t*) &lte_eNb_srs->srs_ch_estimates[ind][aa][0],
-	       (int16_t*) lte_eNb_srs->srs_ch_estimates_time[ind][aa],
+	dft128((int16_t*) &lte_eNB_srs->srs_ch_estimates[ind][aa][0],
+	       (int16_t*) lte_eNB_srs->srs_ch_estimates_time[ind][aa],
 	       1);
 	break;
       case 25:
-	dft512((int16_t*) &lte_eNb_srs->srs_ch_estimates[ind][aa][0],
-	       (int16_t*) lte_eNb_srs->srs_ch_estimates_time[ind][aa],
+	dft512((int16_t*) &lte_eNB_srs->srs_ch_estimates[ind][aa][0],
+	       (int16_t*) lte_eNB_srs->srs_ch_estimates_time[ind][aa],
 	       1);
 	break;
       case 50:
-	dft1024((int16_t*) &lte_eNb_srs->srs_ch_estimates[ind][aa][0],
-		(int16_t*) lte_eNb_srs->srs_ch_estimates_time[ind][aa],
+	dft1024((int16_t*) &lte_eNB_srs->srs_ch_estimates[ind][aa][0],
+		(int16_t*) lte_eNB_srs->srs_ch_estimates_time[ind][aa],
 		1);
 	break;
       case 100:
-	dft2048((int16_t*) &lte_eNb_srs->srs_ch_estimates[ind][aa][0],
-	       (int16_t*) lte_eNb_srs->srs_ch_estimates_time[ind][aa],
+	dft2048((int16_t*) &lte_eNB_srs->srs_ch_estimates[ind][aa][0],
+	       (int16_t*) lte_eNB_srs->srs_ch_estimates_time[ind][aa],
 	       1);
 	break;
       }
@@ -157,7 +157,7 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
 #ifdef DEBUG_PHY
       sprintf(fname,"srs_ch_estimates_time_%d%d.m",ind,aa);
       sprintf(vname,"srs_time_%d%d",ind,aa);
-      write_output(fname,vname,lte_eNb_srs->srs_ch_estimates_time[ind][aa],frame_parms->ofdm_symbol_size*2,2,1);
+      write_output(fname,vname,lte_eNB_srs->srs_ch_estimates_time[ind][aa],frame_parms->ofdm_symbol_size*2,2,1);
 #endif
 #endif
     }
@@ -168,8 +168,8 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
       temp = 0;
 
       for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
-        Re = ((int16_t*)lte_eNb_srs->srs_ch_estimates_time[ind][aa])[(i<<1)];
-        Im = ((int16_t*)lte_eNb_srs->srs_ch_estimates_time[ind][aa])[1+(i<<1)];
+        Re = ((int16_t*)lte_eNB_srs->srs_ch_estimates_time[ind][aa])[(i<<1)];
+        Im = ((int16_t*)lte_eNB_srs->srs_ch_estimates_time[ind][aa])[1+(i<<1)];
         temp += (Re*Re/2) + (Im*Im/2);
       }
 
@@ -195,7 +195,7 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
 }
 
 
-int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,uint8_t UE_id,uint8_t sched_subframe)
+int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id,uint8_t thread_id)
 {
   static int first_run=1;
   static int max_pos_fil2=0;
@@ -203,8 +203,8 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,uint8_t UE_id,uint8_
   short Re,Im,coef=24576;
   short ncoef = 32768 - coef;
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
-  LTE_eNB_PUSCH *eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars[UE_id];
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  LTE_eNB_PUSCH *eNB_pusch_vars = eNB->pusch_vars[UE_id];
   int32_t **ul_ch_estimates_time=  eNB_pusch_vars->drs_ch_estimates_time[0];
   uint8_t cyclic_shift = 0;
   int sync_pos = (frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
@@ -236,7 +236,7 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,uint8_t UE_id,uint8_
     max_pos_fil2 = ((max_pos_fil2 * coef) + (max_pos * ncoef)) >> 15;
 
 #ifdef DEBUG_PHY
-  LOG_D(PHY,"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d\n",phy_vars_eNB->proc[sched_subframe].frame_rx,max_pos,max_pos_fil2,sync_pos);
+  LOG_D(PHY,"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d\n",eNB->proc[thread_id].frame_rx,max_pos,max_pos_fil2,sync_pos);
 #endif //DEBUG_PHY
 
   return(max_pos_fil2-sync_pos);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index bfbe94bb6118ae686a7cae69df6c2f2a608db246..b8baec980a42d65b5954ef4f2adfa5c0db9f0c00 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -34,7 +34,7 @@
 #include "filt96_32.h"
 //#define DEBUG_CH
 
-int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
+int lte_dl_channel_estimation(PHY_VARS_UE *ue,
                               uint8_t eNB_id,
                               uint8_t eNB_offset,
                               unsigned char Ns,
@@ -54,13 +54,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
   //  unsigned int n;
   //  int i;
 
-  uint16_t Nid_cell = (eNB_offset == 0) ? phy_vars_ue->lte_frame_parms.Nid_cell : phy_vars_ue->PHY_measurements.adj_cell_id[eNB_offset-1];
+  uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
 
   uint8_t nushift,pilot1,pilot2,pilot3;
-  int **dl_ch_estimates=phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset];
-  int **rxdataF=phy_vars_ue->lte_ue_common_vars.rxdataF;
+  int **dl_ch_estimates=ue->common_vars.dl_ch_estimates[eNB_offset];
+  int **rxdataF=ue->common_vars.rxdataF;
 
-  if (phy_vars_ue->lte_frame_parms.Ncp == 0) {  // normal prefix
+  if (ue->frame_parms.Ncp == 0) {  // normal prefix
     pilot1 = 4;
     pilot2 = 7;
     pilot3 = 11;
@@ -87,19 +87,19 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
   }
 
 
-  //ch_offset     = (l*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
-  if (phy_vars_ue->high_speed_flag == 0) // use second channel estimate position for temporary storage
-    ch_offset     = phy_vars_ue->lte_frame_parms.ofdm_symbol_size ;
+  //ch_offset     = (l*(ue->frame_parms.ofdm_symbol_size));
+  if (ue->high_speed_flag == 0) // use second channel estimate position for temporary storage
+    ch_offset     = ue->frame_parms.ofdm_symbol_size ;
   else
-    ch_offset     = phy_vars_ue->lte_frame_parms.ofdm_symbol_size*symbol;
+    ch_offset     = ue->frame_parms.ofdm_symbol_size*symbol;
 
-  symbol_offset = phy_vars_ue->lte_frame_parms.ofdm_symbol_size*symbol;
+  symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol;
 
   k = (nu + nushift)%6;
 
 #ifdef DEBUG_CH
-  printf("Channel Estimation : eNB_offset %d cell_id %d ch_offset %d, OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d\n",eNB_offset,Nid_cell,ch_offset,phy_vars_ue->lte_frame_parms.ofdm_symbol_size,
-         phy_vars_ue->lte_frame_parms.Ncp,l,Ns,k);
+  printf("Channel Estimation : eNB_offset %d cell_id %d ch_offset %d, OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d\n",eNB_offset,Nid_cell,ch_offset,ue->frame_parms.ofdm_symbol_size,
+         ue->frame_parms.Ncp,l,Ns,k);
 #endif
 
   switch (k) {
@@ -182,7 +182,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 
 
   // generate pilot
-  lte_dl_cell_spec_rx(phy_vars_ue,
+  lte_dl_cell_spec_rx(ue,
                       eNB_offset,
                       &pilot[p][0],
                       Ns,
@@ -190,25 +190,25 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
                       p);
 
 
-  for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++) {
+  for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
 
     pil   = (int16_t *)&pilot[p][0];
-    rxF   = (int16_t *)&rxdataF[aarx][((symbol_offset+k+phy_vars_ue->lte_frame_parms.first_carrier_offset))];
+    rxF   = (int16_t *)&rxdataF[aarx][((symbol_offset+k+ue->frame_parms.first_carrier_offset))];
     dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset];
 
 
     //    if (eNb_id==0)
-    memset(dl_ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
-    if (phy_vars_ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha
-      multadd_complex_vector_real_scalar(dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1),
-                                         phy_vars_ue->ch_est_alpha,dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1),
-                                         1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+    memset(dl_ch,0,4*(ue->frame_parms.ofdm_symbol_size));
+    if (ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha
+      multadd_complex_vector_real_scalar(dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
+                                         ue->ch_est_alpha,dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),
+                                         1,ue->frame_parms.ofdm_symbol_size);
 #ifdef DEBUG_CH
-    printf("k %d, first_carrier %d\n",k,phy_vars_ue->lte_frame_parms.first_carrier_offset);
+    printf("k %d, first_carrier %d\n",k,ue->frame_parms.first_carrier_offset);
 #endif
-    if ((phy_vars_ue->lte_frame_parms.N_RB_DL==6)  ||
-        (phy_vars_ue->lte_frame_parms.N_RB_DL==50) ||
-        (phy_vars_ue->lte_frame_parms.N_RB_DL==100)) {
+    if ((ue->frame_parms.N_RB_DL==6)  ||
+        (ue->frame_parms.N_RB_DL==50) ||
+        (ue->frame_parms.N_RB_DL==100)) {
 
       //First half of pilots
       // Treat first 2 pilots specially (left edge)
@@ -238,7 +238,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
       rxF+=12;
       dl_ch+=16;
 
-      for (pilot_cnt=2; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-1); pilot_cnt+=2) {
+      for (pilot_cnt=2; pilot_cnt<((ue->frame_parms.N_RB_DL)-1); pilot_cnt+=2) {
 
 
 
@@ -285,7 +285,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 #ifdef DEBUG_CH
       printf("second half k %d\n",k);
 #endif
-      for (pilot_cnt=0; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-3); pilot_cnt+=2) {
+      for (pilot_cnt=0; pilot_cnt<((ue->frame_parms.N_RB_DL)-3); pilot_cnt+=2) {
 
 
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
@@ -342,7 +342,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 
     }
 
-    else if (phy_vars_ue->lte_frame_parms.N_RB_DL==25) {
+    else if (ue->frame_parms.N_RB_DL==25) {
       //printf("Channel estimation\n");
 
       // Treat first 2 pilots specially (left edge)
@@ -385,7 +385,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
       for (pilot_cnt=2; pilot_cnt<24; pilot_cnt+=2) {
 
         // printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
-        // printf("rx[%d][%d] -> (%d,%d)\n",p,phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]);
+        // printf("rx[%d][%d] -> (%d,%d)\n",p,ue->frame_parms.first_carrier_offset + ue->frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]);
 
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
@@ -466,7 +466,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
       for (pilot_cnt=0; pilot_cnt<22; pilot_cnt+=2) {
 
         // printf("* pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
-        // printf("rx[%d][%d] -> (%d,%d)\n",p,phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]);
+        // printf("rx[%d][%d] -> (%d,%d)\n",p,ue->frame_parms.first_carrier_offset + ue->frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]);
 
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
@@ -539,7 +539,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
                                          dl_ch,
                                          24);
 
-    } else if (phy_vars_ue->lte_frame_parms.N_RB_DL==15) {
+    } else if (ue->frame_parms.N_RB_DL==15) {
 
       //printf("First Half\n");
       for (rb=0; rb<28; rb+=4) {
@@ -547,7 +547,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
         //printf("aarx=%d\n",aarx);
         //printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
         //printf("rx[%d][%d] -> (%d,%d)\n",p,
-        //       phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),
+        //       ue->frame_parms.first_carrier_offset + ue->frame_parms.nushift + 6*rb+(3*p),
         //       rxF[0],
         //       rxF[1]);
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
@@ -602,7 +602,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
         //printf("aarx=%d\n",aarx);
         //printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
         //printf("rx[%d][%d] -> (%d,%d)\n",p,
-        //       phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),
+        //       ue->frame_parms.first_carrier_offset + ue->frame_parms.nushift + 6*rb+(3*p),
         //       rxF[0],
         //       rxF[1]);
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
@@ -629,78 +629,78 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 
       }
     } else {
-      msg("channel estimation not implemented for phy_vars_ue->lte_frame_parms.N_RB_DL = %d\n",phy_vars_ue->lte_frame_parms.N_RB_DL);
+      msg("channel estimation not implemented for ue->frame_parms.N_RB_DL = %d\n",ue->frame_parms.N_RB_DL);
     }
 
 
-    if (phy_vars_ue->perfect_ce == 0) {
+    if (ue->perfect_ce == 0) {
       // Temporal Interpolation
       // printf("ch_offset %d\n",ch_offset);
 
       dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset];
 
-      if (phy_vars_ue->high_speed_flag == 0) {
+      if (ue->high_speed_flag == 0) {
         multadd_complex_vector_real_scalar(dl_ch,
-                                           32767-phy_vars_ue->ch_est_alpha,
-                                           dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+                                           32767-ue->ch_est_alpha,
+                                           dl_ch-(ue->frame_parms.ofdm_symbol_size<<1),0,ue->frame_parms.ofdm_symbol_size);
       } else { // high_speed_flag == 1
         if (symbol == 0) {
-          //      printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp);
-          //      dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+          //      printf("Interpolating %d->0\n",4-ue->frame_parms.Ncp);
+          //      dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][(4-ue->frame_parms.Ncp)*(ue->frame_parms.ofdm_symbol_size)];
+          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(ue->frame_parms.ofdm_symbol_size)];
 
-          multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-          multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-          multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-          multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
         } // this is 1/3,2/3 combination for pilots spaced by 3 symbols
         else if (symbol == pilot1) {
           dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][0];
 
-          if (phy_vars_ue->lte_frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
-            multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,8192,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          if (ue->frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
+            multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,8192,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,16384,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,16384,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,16384,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,16384,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,8192,dl_ch_prev+(3*2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,24576,dl_ch_prev+(3*2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,8192,dl_ch_prev+(3*2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,24576,dl_ch_prev+(3*2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
           } else {
-            multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)<<1),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
           } // pilot spacing 3 symbols (1/3,2/3 combination)
         } else if (symbol == pilot2) {
-          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot1*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot1*(ue->frame_parms.ofdm_symbol_size)];
 
-          multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-          multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-          multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-          multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
+          multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
         } else { // symbol == pilot3
-          //      printf("Interpolating 0->%d\n",4-phy_vars_ue->lte_frame_parms.Ncp);
-          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+          //      printf("Interpolating 0->%d\n",4-ue->frame_parms.Ncp);
+          dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot2*(ue->frame_parms.ofdm_symbol_size)];
 
-          if (phy_vars_ue->lte_frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
-            multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,8192,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+          if (ue->frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
+            multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,8192,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,16384,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,16384,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,16384,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,16384,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,8192,dl_ch_prev+(3*2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,24576,dl_ch_prev+(3*2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,8192,dl_ch_prev+(3*2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,24576,dl_ch_prev+(3*2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
           } else {
-            multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
-            multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-            multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)<<1),1,ue->frame_parms.ofdm_symbol_size);
+            multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
           } // pilot spacing 3 symbols (1/3,2/3 combination)
         }
 
@@ -710,7 +710,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 
   void (*idft)(int16_t *,int16_t *, int);
 
-  switch (phy_vars_ue->lte_frame_parms.ofdm_symbol_size) {
+  switch (ue->frame_parms.ofdm_symbol_size) {
   case 128:
     idft = idft128;
     break;
@@ -741,11 +741,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
   }
 
   // do ifft of channel estimate
-  for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++)
-    for (p=0; p<phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB; p++) {
-      if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx])
-        idft((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx][8],
-             (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1);
+  for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++)
+    for (p=0; p<ue->frame_parms.nb_antennas_tx_eNB; p++) {
+      if (ue->common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx])
+        idft((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx][8],
+             (int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1);
     }
 
   return(0);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
index f257678c2c777ad3bc9f7a3278cd6f3e61264bf4..5d9074ea73cb3b4ff1241308a5b0633f800b8761 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
@@ -33,7 +33,7 @@
 #include "PHY/defs.h"
 
 //#define DEBUG_CH
-int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
+int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
                                     uint8_t eNB_id,
                                     uint8_t eNB_offset,
                                     int subframe,
@@ -51,28 +51,16 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
   //  unsigned int n;
   //  int i;
 
-  int **dl_ch_estimates=phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[0];
-  int **rxdataF=phy_vars_ue->lte_ue_common_vars.rxdataF;
+  int **dl_ch_estimates=ue->common_vars.dl_ch_estimates[0];
+  int **rxdataF=ue->common_vars.rxdataF;
 
-  ch_offset     = (l*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
+  ch_offset     = (l*(ue->frame_parms.ofdm_symbol_size));
   symbol_offset = ch_offset;//phy_vars_ue->lte_frame_parms.ofdm_symbol_size*l;
 
-  //  printf("dl_mbsfn_channel_estimation.c:  symbol %d (%d)\n",l,ch_offset);
-  // m=phy_vars_ue->lte_frame_parms.N_RB_DL*6;
-  /*
-      if ((l==2) || (l==10))
-      k = 0;//m<<1;
-      else if (l==6)
-      k = 1;//+(m<<1);
-      else {
-      msg("lte_dl_mbsfn: l %d -> ERROR\n",l);
-      return(-1);
-      }
-  */
-  for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++) {
+  for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
     // generate pilot
     if ((l==2)||(l==6)||(l==10)) {
-      lte_dl_mbsfn_rx(phy_vars_ue,
+      lte_dl_mbsfn_rx(ue,
                       &pilot[0],
                       subframe,
                       l>>2);
@@ -81,16 +69,16 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
 
 
     pil   = (short *)&pilot[0];
-    rxF   = (short *)&rxdataF[aarx][((symbol_offset+phy_vars_ue->lte_frame_parms.first_carrier_offset))];
+    rxF   = (short *)&rxdataF[aarx][((symbol_offset+ue->frame_parms.first_carrier_offset))];
     ch = (short *)&dl_ch_estimates[aarx][ch_offset];
 
     //    if (eNb_id==0)
-    memset(ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
+    memset(ch,0,4*(ue->frame_parms.ofdm_symbol_size));
 
     //***********************************************************************
-    if ((phy_vars_ue->lte_frame_parms.N_RB_DL==6)  ||
-        (phy_vars_ue->lte_frame_parms.N_RB_DL==50) ||
-        (phy_vars_ue->lte_frame_parms.N_RB_DL==100)) {
+    if ((ue->frame_parms.N_RB_DL==6)  ||
+        (ue->frame_parms.N_RB_DL==50) ||
+        (ue->frame_parms.N_RB_DL==100)) {
 
       // Interpolation  and extrapolation;
       if (l==6) {
@@ -99,10 +87,10 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
         rxF+=2;
       }
 
-      for (rb=0; rb<phy_vars_ue->lte_frame_parms.N_RB_DL; rb++) {
+      for (rb=0; rb<ue->frame_parms.N_RB_DL; rb++) {
         // ------------------------1st pilot------------------------
 
-        if (rb==(phy_vars_ue->lte_frame_parms.N_RB_DL>>1)) {
+        if (rb==(ue->frame_parms.N_RB_DL>>1)) {
           rxF = (short *)&rxdataF[aarx][symbol_offset+1];
 
           if (l==6)
@@ -117,7 +105,7 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
         /*
           printf("rb %d: pil0 (%d,%d) x (%d,%d) = (%d,%d)\n",
           rb,pil[0],pil[1],rxF[0],rxF[1],ch[0],ch[1]);*/
-        if ((rb>0)&&(rb!=(phy_vars_ue->lte_frame_parms.N_RB_DL>>1))) {
+        if ((rb>0)&&(rb!=(ue->frame_parms.N_RB_DL>>1))) {
           ch[-2] += ch[2];
           ch[-1] += ch[3];
         } else {
@@ -165,8 +153,8 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
         ch[20] = (short)(((int)pil[10]*rxF[20] - (int)pil[11]*rxF[21])>>15);
         ch[21] = (short)(((int)pil[10]*rxF[21] + (int)pil[11]*rxF[20])>>15);
 
-        if ((rb<(phy_vars_ue->lte_frame_parms.N_RB_DL-1))&&
-            (rb!=((phy_vars_ue->lte_frame_parms.N_RB_DL>>1)-1))) {
+        if ((rb<(ue->frame_parms.N_RB_DL-1))&&
+            (rb!=((ue->frame_parms.N_RB_DL>>1)-1))) {
           ch[22] = ch[20]>>1;
           ch[23] = ch[21]>>1;
           ch[18] += ch[22];
@@ -188,7 +176,7 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
     }
 
     //*********************************************************************
-    else if (phy_vars_ue->lte_frame_parms.N_RB_DL==25) {
+    else if (ue->frame_parms.N_RB_DL==25) {
       //printf("Channel estimation\n");
       //------------------------ loop over first 12 RBs------------------------
       if (l==6) {
@@ -712,72 +700,72 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
     if (l==6) {
       ch = (short *)&dl_ch_estimates[aarx][ch_offset];
       //        printf("Interpolating ch 2,6 => %d\n",ch_offset);
-      ch_prev = (short *)&dl_ch_estimates[aarx][2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-      ch0 = (short *)&dl_ch_estimates[aarx][0*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-      memcpy(ch0,ch_prev,4*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      ch_prev = (short *)&dl_ch_estimates[aarx][2*(ue->frame_parms.ofdm_symbol_size)];
+      ch0 = (short *)&dl_ch_estimates[aarx][0*(ue->frame_parms.ofdm_symbol_size)];
+      memcpy(ch0,ch_prev,4*ue->frame_parms.ofdm_symbol_size);
 
-      ch1 = (short *)&dl_ch_estimates[aarx][1*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-      memcpy(ch1,ch_prev,4*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      ch1 = (short *)&dl_ch_estimates[aarx][1*(ue->frame_parms.ofdm_symbol_size)];
+      memcpy(ch1,ch_prev,4*ue->frame_parms.ofdm_symbol_size);
 
       // 3/4 ch2 + 1/4 ch6 => ch3
-      multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
 
       // 1/2 ch2 + 1/2 ch6 => ch4
-      multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
       // 1/4 ch2 + 3/4 ch6 => ch5
-      multadd_complex_vector_real_scalar(ch_prev,8192,ch_prev+(6*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size))),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,24576,ch_prev+(6*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size))),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,8192,ch_prev+(6*((ue->frame_parms.ofdm_symbol_size))),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,24576,ch_prev+(6*((ue->frame_parms.ofdm_symbol_size))),0,ue->frame_parms.ofdm_symbol_size);
     }
 
     if (l==10) {
       ch = (short *)&dl_ch_estimates[aarx][ch_offset];
-      ch_prev = (short *)&dl_ch_estimates[aarx][6*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+      ch_prev = (short *)&dl_ch_estimates[aarx][6*(ue->frame_parms.ofdm_symbol_size)];
       // 3/4 ch6 + 1/4 ch10 => ch7
-      multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,24576,ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,8192,ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
       // 1/2 ch6 + 1/2 ch10 => ch8
-      multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,16384,ch_prev+(4*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,16384,ch_prev+(4*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
       // 1/4 ch6 + 3/4 ch10 => ch9
-      multadd_complex_vector_real_scalar(ch_prev,8192,ch_prev+(6*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size))),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      multadd_complex_vector_real_scalar(ch,24576,ch_prev+(6*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size))),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch_prev,8192,ch_prev+(6*((ue->frame_parms.ofdm_symbol_size))),1,ue->frame_parms.ofdm_symbol_size);
+      multadd_complex_vector_real_scalar(ch,24576,ch_prev+(6*((ue->frame_parms.ofdm_symbol_size))),0,ue->frame_parms.ofdm_symbol_size);
       // 5/4 ch10 - 1/4 ch6 => ch11
       // Ch11
-      ch_prev = (short *)&dl_ch_estimates[aarx][10*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-      ch11 = (short *)&dl_ch_estimates[aarx][11*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-      memcpy(ch11,ch_prev,4*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+      ch_prev = (short *)&dl_ch_estimates[aarx][10*(ue->frame_parms.ofdm_symbol_size)];
+      ch11 = (short *)&dl_ch_estimates[aarx][11*(ue->frame_parms.ofdm_symbol_size)];
+      memcpy(ch11,ch_prev,4*ue->frame_parms.ofdm_symbol_size);
     }
   }
 
   // do ifft of channel estimate
-  for (aa=0; aa<phy_vars_ue->lte_frame_parms.nb_antennas_rx*phy_vars_ue->lte_frame_parms.nb_antennas_tx; aa++) {
-    if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa]) {
-      switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+  for (aa=0; aa<ue->frame_parms.nb_antennas_rx*ue->frame_parms.nb_antennas_tx; aa++) {
+    if (ue->common_vars.dl_ch_estimates[eNB_offset][aa]) {
+      switch (ue->frame_parms.N_RB_DL) {
       case 6:
-	idft128((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
-		(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+	idft128((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
+		(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
 		1);
 	break;
       case 25:
-	idft512((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
-		(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+	idft512((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
+		(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
 		1);
 	break;
       case 50:
-	idft1024((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
-		(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+	idft1024((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
+		(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
 		1);
 	break;
       case 75:
-	idft1536((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
-		 (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+	idft1536((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
+		 (int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
 		 1);
 	break;
       case 100:
-	idft2048((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
-		(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+	idft2048((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
+		(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
 		1);
 	break;
       default:
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index 8b5c1a1806cb572f99b033eb955902d0697f78c5..5750733edf7d20af4cbe9c1c248cf3d8e992e3b8 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -39,16 +39,16 @@
 int32_t rx_power_avg_eNB[3][3];
 
 
-void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
+void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB,
 			     int subframe,
                              unsigned char eNB_id,
                              unsigned char clear)
 {
 
-  LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
-  PHY_MEASUREMENTS_eNB *phy_measurements = &phy_vars_eNB->PHY_measurements_eNB[eNB_id];
-  uint32_t *rb_mask = phy_vars_eNB->rb_mask_ul;
+  LTE_eNB_COMMON *common_vars = &eNB->common_vars;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  PHY_MEASUREMENTS_eNB *measurements = &eNB->measurements[eNB_id];
+  uint32_t *rb_mask = eNB->rb_mask_ul;
 
   uint32_t aarx /* ,rx_power_correction */;
   uint32_t rb;
@@ -59,24 +59,24 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
   // noise measurements
   // for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
 
-  phy_measurements->n0_power_tot = 0;
+  measurements->n0_power_tot = 0;
 
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
     if (clear == 1)
-      phy_measurements->n0_power[aarx]=0;
+      measurements->n0_power[aarx]=0;
 
 
-    phy_measurements->n0_power[aarx] = ((k1*signal_energy(&eNB_common_vars->rxdata[eNB_id][aarx][(frame_parms->samples_per_tti<<1) -frame_parms->ofdm_symbol_size],
-							  frame_parms->ofdm_symbol_size)) + k2*phy_measurements->n0_power[aarx])>>10;
-    //phy_measurements->n0_power[aarx] = (phy_measurements->n0_power[aarx]) * 12*frame_parms->N_RB_DL)/(frame_parms->ofdm_symbol_size);
-    phy_measurements->n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_measurements->n0_power[aarx]);
-    phy_measurements->n0_power_tot +=  phy_measurements->n0_power[aarx];
+    measurements->n0_power[aarx] = ((k1*signal_energy(&common_vars->rxdata[eNB_id][aarx][(frame_parms->samples_per_tti<<1) -frame_parms->ofdm_symbol_size],
+							  frame_parms->ofdm_symbol_size)) + k2*measurements->n0_power[aarx])>>10;
+    //measurements->n0_power[aarx] = (measurements->n0_power[aarx]) * 12*frame_parms->N_RB_DL)/(frame_parms->ofdm_symbol_size);
+    measurements->n0_power_dB[aarx] = (unsigned short) dB_fixed(measurements->n0_power[aarx]);
+    measurements->n0_power_tot +=  measurements->n0_power[aarx];
   }
 
-  phy_measurements->n0_power_tot_dB = (unsigned short) dB_fixed(phy_measurements->n0_power_tot);
+  measurements->n0_power_tot_dB = (unsigned short) dB_fixed(measurements->n0_power_tot);
 
-  phy_measurements->n0_power_tot_dBm = phy_measurements->n0_power_tot_dB - phy_vars_eNB->rx_total_gain_eNB_dB;
-  //      printf("n0_power %d\n",phy_measurements->n0_power_tot_dB);
+  measurements->n0_power_tot_dBm = measurements->n0_power_tot_dB - eNB->rx_total_gain_dB;
+  //      printf("n0_power %d\n",measurements->n0_power_tot_dB);
 
 
   for (rb=0; rb<frame_parms->N_RB_UL; rb++) {
@@ -88,7 +88,7 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
       // select the 7th symbol in an uplink subframe
 	offset = (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
 	offset += (7*frame_parms->ofdm_symbol_size);
-	ul_ch  = &eNB_common_vars->rxdataF[eNB_id][aarx][offset];
+	ul_ch  = &common_vars->rxdataF[eNB_id][aarx][offset];
 	len = 12;
 	// just do first half of middle PRB for odd number of PRBs
 	if (((frame_parms->N_RB_UL&1) == 1) && 
@@ -96,36 +96,36 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
 	  len=6;
 	}
 	if (clear == 1)
-	  phy_measurements->n0_subband_power[aarx][rb]=0;
+	  measurements->n0_subband_power[aarx][rb]=0;
 
 	AssertFatal(ul_ch, "RX signal buffer (freq) problem");
 
 
-	phy_measurements->n0_subband_power[aarx][rb] = signal_energy_nodc(ul_ch,len);
+	measurements->n0_subband_power[aarx][rb] = signal_energy_nodc(ul_ch,len);
 	//((k1*(signal_energy_nodc(ul_ch,len))) 
-	  //  + (k2*phy_measurements->n0_subband_power[aarx][rb]));  
+	  //  + (k2*measurements->n0_subband_power[aarx][rb]));  
 	  
-	phy_measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(phy_measurements->n0_subband_power[aarx][rb]);
-	//		printf("subframe %d (%d): eNb %d, aarx %d, rb %d len %d: energy %d (%d dB)\n",subframe,offset,eNB_id,aarx,rb,len,signal_energy_nodc(ul_ch,len),  
-	//	       phy_measurements->n0_subband_power_dB[aarx][rb]);
-	n0_power_tot += phy_measurements->n0_subband_power[aarx][rb];
+	measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(measurements->n0_subband_power[aarx][rb]);
+	//		printf("subframe %d (%d): eNB %d, aarx %d, rb %d len %d: energy %d (%d dB)\n",subframe,offset,eNB_id,aarx,rb,len,signal_energy_nodc(ul_ch,len),  
+	//	       measurements->n0_subband_power_dB[aarx][rb]);
+	n0_power_tot += measurements->n0_subband_power[aarx][rb];
       }
       
-      phy_measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot);
-      phy_measurements->n0_subband_power_tot_dBm[rb] = phy_measurements->n0_subband_power_tot_dB[rb] - phy_vars_eNB->rx_total_gain_eNB_dB - dB_fixed(frame_parms->N_RB_UL);
+      measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot);
+      measurements->n0_subband_power_tot_dBm[rb] = measurements->n0_subband_power_tot_dB[rb] - eNB->rx_total_gain_dB - dB_fixed(frame_parms->N_RB_UL);
       
     }
   }
 }
 
-void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
                               unsigned char eNB_id,
                               unsigned char UE_id,
                               unsigned char init_averaging)
 {
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNb->lte_frame_parms;
-  PHY_MEASUREMENTS_eNB *phy_measurements = &phy_vars_eNb->PHY_measurements_eNB[eNB_id];
-  LTE_eNB_SRS *eNB_srs_vars = &phy_vars_eNb->lte_eNB_srs_vars[UE_id];
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  PHY_MEASUREMENTS_eNB *measurements = &eNB->measurements[eNB_id];
+  LTE_eNB_SRS *srs_vars = &eNB->srs_vars[UE_id];
 
   int32_t aarx,rx_power_correction;
   int32_t rx_power;
@@ -151,39 +151,39 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNb,
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
 
 
-    phy_measurements->rx_spatial_power[UE_id][0][aarx] =
-      ((signal_energy_nodc(&eNB_srs_vars->srs_ch_estimates[eNB_id][aarx][frame_parms->first_carrier_offset],
+    measurements->rx_spatial_power[UE_id][0][aarx] =
+      ((signal_energy_nodc(&srs_vars->srs_ch_estimates[eNB_id][aarx][frame_parms->first_carrier_offset],
                            (frame_parms->N_RB_DL*6)) +
-        signal_energy_nodc(&eNB_srs_vars->srs_ch_estimates[eNB_id][aarx][1],
+        signal_energy_nodc(&srs_vars->srs_ch_estimates[eNB_id][aarx][1],
                            (frame_parms->N_RB_DL*6)))*rx_power_correction) -
-      phy_measurements->n0_power[aarx];
+      measurements->n0_power[aarx];
 
-    phy_measurements->rx_spatial_power[UE_id][0][aarx]<<=1;  // because of noise only in odd samples
+    measurements->rx_spatial_power[UE_id][0][aarx]<<=1;  // because of noise only in odd samples
 
-    phy_measurements->rx_spatial_power_dB[UE_id][0][aarx] = (unsigned short) dB_fixed(phy_measurements->rx_spatial_power[UE_id][0][aarx]);
+    measurements->rx_spatial_power_dB[UE_id][0][aarx] = (unsigned short) dB_fixed(measurements->rx_spatial_power[UE_id][0][aarx]);
 
-    phy_measurements->wideband_cqi[UE_id][aarx] = phy_measurements->rx_spatial_power[UE_id][0][aarx];
+    measurements->wideband_cqi[UE_id][aarx] = measurements->rx_spatial_power[UE_id][0][aarx];
 
 
 
-    //      phy_measurements->rx_power[UE_id][aarx]/=frame_parms->nb_antennas_tx;
-    phy_measurements->wideband_cqi_dB[UE_id][aarx] = (unsigned short) dB_fixed(phy_measurements->wideband_cqi[UE_id][aarx]);
-    rx_power += phy_measurements->wideband_cqi[UE_id][aarx];
-    //      phy_measurements->rx_avg_power_dB[UE_id] += phy_measurements->rx_power_dB[UE_id][aarx];
+    //      measurements->rx_power[UE_id][aarx]/=frame_parms->nb_antennas_tx;
+    measurements->wideband_cqi_dB[UE_id][aarx] = (unsigned short) dB_fixed(measurements->wideband_cqi[UE_id][aarx]);
+    rx_power += measurements->wideband_cqi[UE_id][aarx];
+    //      measurements->rx_avg_power_dB[UE_id] += measurements->rx_power_dB[UE_id][aarx];
   }
 
 
 
-  //    phy_measurements->rx_avg_power_dB[UE_id]/=frame_parms->nb_antennas_rx;
+  //    measurements->rx_avg_power_dB[UE_id]/=frame_parms->nb_antennas_rx;
   if (init_averaging == 0)
     rx_power_avg_eNB[UE_id][eNB_id] = ((k1*rx_power_avg_eNB[UE_id][eNB_id]) + (k2*rx_power))>>10;
   else
     rx_power_avg_eNB[UE_id][eNB_id] = rx_power;
 
-  phy_measurements->wideband_cqi_tot[UE_id] = dB_fixed2(rx_power,2*phy_measurements->n0_power_tot);
+  measurements->wideband_cqi_tot[UE_id] = dB_fixed2(rx_power,2*measurements->n0_power_tot);
   // times 2 since we have noise only in the odd carriers of the srs comb
 
-  phy_measurements->rx_rssi_dBm[UE_id] = (int32_t)dB_fixed(rx_power_avg_eNB[UE_id][eNB_id])-phy_vars_eNb->rx_total_gain_eNB_dB;
+  measurements->rx_rssi_dBm[UE_id] = (int32_t)dB_fixed(rx_power_avg_eNB[UE_id][eNB_id])-eNB->rx_total_gain_dB;
 
 
 
@@ -193,52 +193,52 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *phy_vars_eNb,
 
     for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
 
-      //      printf("eNB_common_vars->srs_ch_estimates[0] => %x\n",eNB_common_vars->srs_ch_estimates[0]);
+      //      printf("common_vars->srs_ch_estimates[0] => %x\n",common_vars->srs_ch_estimates[0]);
       if (rb < 12)
-        ul_ch    = &eNB_srs_vars->srs_ch_estimates[eNB_id][aarx][frame_parms->first_carrier_offset + (rb*12)];
+        ul_ch    = &srs_vars->srs_ch_estimates[eNB_id][aarx][frame_parms->first_carrier_offset + (rb*12)];
       else if (rb>12)
-        ul_ch    = &eNB_srs_vars->srs_ch_estimates[eNB_id][aarx][6 + (rb-13)*12];
+        ul_ch    = &srs_vars->srs_ch_estimates[eNB_id][aarx][6 + (rb-13)*12];
       else {
-        phy_measurements->subband_cqi_dB[UE_id][aarx][rb] = 0;
+        measurements->subband_cqi_dB[UE_id][aarx][rb] = 0;
         continue;
       }
 
       // cqi
       if (aarx==0)
-        phy_measurements->subband_cqi_tot[UE_id][rb]=0;
+        measurements->subband_cqi_tot[UE_id][rb]=0;
 
-      phy_measurements->subband_cqi[UE_id][aarx][rb] = (signal_energy_nodc(ul_ch,12))*rx_power_correction - phy_measurements->n0_power[aarx];
+      measurements->subband_cqi[UE_id][aarx][rb] = (signal_energy_nodc(ul_ch,12))*rx_power_correction - measurements->n0_power[aarx];
 
-      if (phy_measurements->subband_cqi[UE_id][aarx][rb] < 0)
-        phy_measurements->subband_cqi[UE_id][aarx][rb]=0;
+      if (measurements->subband_cqi[UE_id][aarx][rb] < 0)
+        measurements->subband_cqi[UE_id][aarx][rb]=0;
 
-      phy_measurements->subband_cqi_tot[UE_id][rb] += phy_measurements->subband_cqi[UE_id][aarx][rb];
-      phy_measurements->subband_cqi_dB[UE_id][aarx][rb] = dB_fixed2(phy_measurements->subband_cqi[UE_id][aarx][rb],
-          2*phy_measurements->n0_power[aarx]);
+      measurements->subband_cqi_tot[UE_id][rb] += measurements->subband_cqi[UE_id][aarx][rb];
+      measurements->subband_cqi_dB[UE_id][aarx][rb] = dB_fixed2(measurements->subband_cqi[UE_id][aarx][rb],
+          2*measurements->n0_power[aarx]);
       // 2*n0_power since we have noise from the odd carriers in the comb of the srs
 
-      //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,rb,phy_measurements->subband_cqi[eNB_id][aarx][rb],phy_measurements->subband_cqi_dB[eNB_id][aarx][rb]);
+      //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,rb,measurements->subband_cqi[eNB_id][aarx][rb],measurements->subband_cqi_dB[eNB_id][aarx][rb]);
     }
 
   }
 
 
   for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
-    phy_measurements->subband_cqi_tot_dB[UE_id][rb] = dB_fixed2(phy_measurements->subband_cqi_tot[UE_id][rb],
-        phy_measurements->n0_power_tot);
+    measurements->subband_cqi_tot_dB[UE_id][rb] = dB_fixed2(measurements->subband_cqi_tot[UE_id][rb],
+        measurements->n0_power_tot);
     /*
-    if (phy_measurements->subband_cqi_tot_dB[UE_id][rb] == 65)
-      msg("eNB meas error *****subband_cqi_tot[%d][%d] %d => %d dB (n0 %d)\n",UE_id,rb,phy_measurements->subband_cqi_tot[UE_id][rb],phy_measurements->subband_cqi_tot_dB[UE_id][rb],phy_measurements->n0_power_tot);
+    if (measurements->subband_cqi_tot_dB[UE_id][rb] == 65)
+      msg("eNB meas error *****subband_cqi_tot[%d][%d] %d => %d dB (n0 %d)\n",UE_id,rb,measurements->subband_cqi_tot[UE_id][rb],measurements->subband_cqi_tot_dB[UE_id][rb],measurements->n0_power_tot);
     */
   }
 
 }
 
-void lte_eNB_I0_measurements_emul(PHY_VARS_eNB *phy_vars_eNb,
+void lte_eNB_I0_measurements_emul(PHY_VARS_eNB *eNB,
                                   uint8_t sect_id)
 {
 
-  LOG_D(PHY,"EMUL lte_eNB_IO_measurements_emul: eNB %d, sect %d\n",phy_vars_eNb->Mod_id,sect_id);
+  LOG_D(PHY,"EMUL lte_eNB_IO_measurements_emul: eNB %d, sect %d\n",eNB->Mod_id,sect_id);
 }
 
 
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
index 74b46c5eb65e79c0c7adad0d04c38ffa95e6d34e..f3c9b973ea8cec154d9297d755a9f1591ab9508e 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
@@ -82,7 +82,7 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq)
 
     //compute frequency-domain representation of 6144-sample chunk
 
-    rxp = &ue->lte_ue_common_vars.rxdata[0][i];
+    rxp = &ue->common_vars.rxdata[0][i];
     sp=spectrum;
 
     while (1) {
@@ -341,8 +341,8 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq)
         } // loop on pss index
       }
 
-      if (rxp == &ue->lte_ue_common_vars.rxdata[0][i+38400*4]) {
-        rxp = &ue->lte_ue_common_vars.rxdata[0][i+38400*4];
+      if (rxp == &ue->common_vars.rxdata[0][i+38400*4]) {
+        rxp = &ue->common_vars.rxdata[0][i+38400*4];
         sp=spectrum_p5ms;
       } else {
         break;
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
index 3bc26ad7e85b88bf57029c8dfcd9de11f3dc9bfc..ae484092b807f2cb50deab487bf42922f2e7efd2 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
@@ -66,36 +66,36 @@ void print_ints(char *s,int *x)
 int16_t get_PL(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
   /*
   int RSoffset;
 
 
-  if (phy_vars_ue->lte_frame_parms.mode1_flag == 1)
+  if (ue->frame_parms.mode1_flag == 1)
     RSoffset = 6;
   else
     RSoffset = 3;
   */
 
-  LOG_D(PHY,"get_PL : Frame %d : rsrp %f dBm/RE (%f), eNB power %d dBm/RE\n", phy_vars_ue->frame_rx,
-        (1.0*dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_index])-(10.0*phy_vars_ue->rx_total_gain_dB))/10.0,
-        10*log10((double)phy_vars_ue->PHY_measurements.rsrp[eNB_index]),
-        phy_vars_ue->lte_frame_parms.pdsch_config_common.referenceSignalPower);
+  LOG_D(PHY,"get_PL : Frame %d : rsrp %f dBm/RE (%f), eNB power %d dBm/RE\n", ue->frame_rx,
+        (1.0*dB_fixed_times10(ue->measurements.rsrp[eNB_index])-(10.0*ue->rx_total_gain_dB))/10.0,
+        10*log10((double)ue->measurements.rsrp[eNB_index]),
+        ue->frame_parms.pdsch_config_common.referenceSignalPower);
 
-  return((int16_t)(((10*phy_vars_ue->rx_total_gain_dB) -
-                    dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_index])+
-                    //        dB_fixed_times10(RSoffset*12*PHY_vars_UE_g[Mod_id][CC_id]->lte_frame_parms.N_RB_DL) +
-                    (phy_vars_ue->lte_frame_parms.pdsch_config_common.referenceSignalPower*10))/10));
+  return((int16_t)(((10*ue->rx_total_gain_dB) -
+                    dB_fixed_times10(ue->measurements.rsrp[eNB_index])+
+                    //        dB_fixed_times10(RSoffset*12*ue_g[Mod_id][CC_id]->frame_parms.N_RB_DL) +
+                    (ue->frame_parms.pdsch_config_common.referenceSignalPower*10))/10));
 }
 
 
 uint8_t get_n_adj_cells (uint8_t Mod_id,uint8_t CC_id)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue)
-    return phy_vars_ue->PHY_measurements.n_adj_cells;
+  if (ue)
+    return ue->measurements.n_adj_cells;
   else
     return 0;
 }
@@ -103,30 +103,30 @@ uint8_t get_n_adj_cells (uint8_t Mod_id,uint8_t CC_id)
 uint32_t get_rx_total_gain_dB (uint8_t Mod_id,uint8_t CC_id)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue)
-    return phy_vars_ue->rx_total_gain_dB;
+  if (ue)
+    return ue->rx_total_gain_dB;
 
   return 0xFFFFFFFF;
 }
 uint32_t get_RSSI (uint8_t Mod_id,uint8_t CC_id)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue)
-    return phy_vars_ue->PHY_measurements.rssi;
+  if (ue)
+    return ue->measurements.rssi;
 
   return 0xFFFFFFFF;
 }
 uint32_t get_RSRP(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue)
-    return phy_vars_ue->PHY_measurements.rsrp[eNB_index];
+  if (ue)
+    return ue->measurements.rsrp[eNB_index];
 
   return 0xFFFFFFFF;
 }
@@ -134,10 +134,10 @@ uint32_t get_RSRP(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 uint32_t get_RSRQ(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue)
-    return phy_vars_ue->PHY_measurements.rsrq[eNB_index];
+  if (ue)
+    return ue->measurements.rsrq[eNB_index];
 
   return 0xFFFFFFFF;
 }
@@ -145,10 +145,10 @@ uint32_t get_RSRQ(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 int8_t set_RSRP_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrp)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue) {
-    phy_vars_ue->PHY_measurements.rsrp_filtered[eNB_index]=rsrp;
+  if (ue) {
+    ue->measurements.rsrp_filtered[eNB_index]=rsrp;
     return 0;
   }
 
@@ -159,10 +159,10 @@ int8_t set_RSRP_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rs
 int8_t set_RSRQ_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrq)
 {
 
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  if (phy_vars_ue) {
-    phy_vars_ue->PHY_measurements.rsrq_filtered[eNB_index]=rsrq;
+  if (ue) {
+    ue->measurements.rsrq_filtered[eNB_index]=rsrq;
     return 0;
   }
 
@@ -171,7 +171,7 @@ int8_t set_RSRQ_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rs
 
 }
 
-void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
+void ue_rrc_measurements(PHY_VARS_UE *ue,
                          uint8_t slot,
                          uint8_t abstraction_flag)
 {
@@ -179,95 +179,95 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
   int aarx,rb;
   int16_t *rxF,*rxF_pss,*rxF_sss;
 
-  uint16_t Nid_cell = phy_vars_ue->lte_frame_parms.Nid_cell;
+  uint16_t Nid_cell = ue->frame_parms.Nid_cell;
   uint8_t eNB_offset,nu,l,nushift,k;
   uint16_t off;
 
 
-  for (eNB_offset = 0; eNB_offset<1+phy_vars_ue->PHY_measurements.n_adj_cells; eNB_offset++) {
+  for (eNB_offset = 0; eNB_offset<1+ue->measurements.n_adj_cells; eNB_offset++) {
 
     if (eNB_offset==0) {
-      phy_vars_ue->PHY_measurements.rssi = 0;
-      phy_vars_ue->PHY_measurements.n0_power_tot = 0;
+      ue->measurements.rssi = 0;
+      ue->measurements.n0_power_tot = 0;
 
       if (abstraction_flag == 0) {
-        if ((phy_vars_ue->lte_frame_parms.frame_type == FDD) &&
+        if ((ue->frame_parms.frame_type == FDD) &&
             ((slot == 0) || (slot == 10))) {  // FDD PSS/SSS, compute noise in DTX REs
 
-          if (phy_vars_ue->lte_frame_parms.Ncp==NORMAL) {
-            for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++) {
+          if (ue->frame_parms.Ncp==NORMAL) {
+            for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
 
-	      rxF_sss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(5*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-	      rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(6*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+	      rxF_sss = (int16_t *)&ue->common_vars.rxdataF[aarx][(5*ue->frame_parms.ofdm_symbol_size)];
+	      rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
 	      
 
               //-ve spectrum from SSS
 	      //	      printf("slot %d: SSS DTX: %d,%d, non-DTX %d,%d\n",slot,rxF_pss[-72],rxF_pss[-71],rxF_pss[-36],rxF_pss[-35]);
 
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
-	      //	      printf("sssn36 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);
-              phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
-	      //	      printf("sssm32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);
+	      //              ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
+	      //	      printf("sssn36 %d\n",ue->measurements.n0_power[aarx]);
+              ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
+	      //              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
+	      //	      printf("sssm32 %d\n",ue->measurements.n0_power[aarx]);
               //+ve spectrum from SSS
-	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65]));
-	      //	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63]));
-	      //	      printf("sssp32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);
+	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65]));
+	      //	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63]));
+	      //	      printf("sssp32 %d\n",ue->measurements.n0_power[aarx]);
               //+ve spectrum from PSS
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+70]*rxF_pss[2+70])+((int32_t)rxF_pss[2+69]*rxF_pss[2+69]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+68]*rxF_pss[2+68])+((int32_t)rxF_pss[2+67]*rxF_pss[2+67]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+66]*rxF_pss[2+66])+((int32_t)rxF_pss[2+65]*rxF_pss[2+65]));
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63]));
-	      //	      printf("pss32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);              //-ve spectrum from PSS
-              rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(7*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
-	      //	      printf("pssm36 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
-	      //	      printf("pssm32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]);
-              phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]/12);
-              phy_vars_ue->PHY_measurements.n0_power_tot +=  phy_vars_ue->PHY_measurements.n0_power[aarx];
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+70]*rxF_pss[2+70])+((int32_t)rxF_pss[2+69]*rxF_pss[2+69]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+68]*rxF_pss[2+68])+((int32_t)rxF_pss[2+67]*rxF_pss[2+67]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+66]*rxF_pss[2+66])+((int32_t)rxF_pss[2+65]*rxF_pss[2+65]));
+	      //              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63]));
+	      //	      printf("pss32 %d\n",ue->measurements.n0_power[aarx]);              //-ve spectrum from PSS
+              rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
+	      //              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
+	      //	      printf("pssm36 %d\n",ue->measurements.n0_power[aarx]);
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
+	      //              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
+	      //	      printf("pssm32 %d\n",ue->measurements.n0_power[aarx]);
+              ue->measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(ue->measurements.n0_power[aarx]/12);
+              ue->measurements.n0_power_tot +=  ue->measurements.n0_power[aarx];
             }
 
-	    phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot/(12*aarx));
-	    phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB - dB_fixed(phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+	    ue->measurements.n0_power_tot_dB = (unsigned short) dB_fixed(ue->measurements.n0_power_tot/(12*aarx));
+	    ue->measurements.n0_power_tot_dBm = ue->measurements.n0_power_tot_dB - ue->rx_total_gain_dB - dB_fixed(ue->frame_parms.ofdm_symbol_size);
 	  }
         }
-	else if ((phy_vars_ue->lte_frame_parms.frame_type == TDD) &&
+	else if ((ue->frame_parms.frame_type == TDD) &&
 		 (slot == 1)) {  // TDD SSS, compute noise in DTX REs
 
-          if (phy_vars_ue->lte_frame_parms.Ncp==NORMAL) {
-            for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++) {
+          if (ue->frame_parms.Ncp==NORMAL) {
+            for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
 
-	      rxF_sss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(6*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+	      rxF_sss = (int16_t *)&ue->common_vars.rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
 	      // note this is a dummy pointer, the pss is not really there!
 	      // in FDD the pss is in the symbol after the sss, but not in TDD
-	      rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(7*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
+	      rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
 	      
 	      //-ve spectrum from SSS
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
-              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
-	      //              phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
+	      //              ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
+              ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67]));
+              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65]));
+	      //              ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63]));
 	      //+ve spectrum from SSS
-	      //	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+72]*rxF_sss[2+72])+((int32_t)rxF_sss[2+71]*rxF_sss[2+71]));
-	      phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69]));
-	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67]));
-	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65]));
-	      //	      phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63]));
+	      //	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+72]*rxF_sss[2+72])+((int32_t)rxF_sss[2+71]*rxF_sss[2+71]));
+	      ue->measurements.n0_power[aarx] = (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69]));
+	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67]));
+	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65]));
+	      //	      ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63]));
 	      
-	      phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]/(6));
-	      phy_vars_ue->PHY_measurements.n0_power_tot +=  phy_vars_ue->PHY_measurements.n0_power[aarx];	  
+	      ue->measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(ue->measurements.n0_power[aarx]/(6));
+	      ue->measurements.n0_power_tot +=  ue->measurements.n0_power[aarx];	  
 	    }	      
-	    phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot/(6*aarx));
-	    phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB - dB_fixed(phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+	    ue->measurements.n0_power_tot_dB = (unsigned short) dB_fixed(ue->measurements.n0_power_tot/(6*aarx));
+	    ue->measurements.n0_power_tot_dBm = ue->measurements.n0_power_tot_dB - ue->rx_total_gain_dB - dB_fixed(ue->frame_parms.ofdm_symbol_size);
 	      
 	    
 	  }
@@ -275,58 +275,58 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
       }
     }
     // recompute nushift with eNB_offset corresponding to adjacent eNB on which to perform channel estimation
-    //    printf("[PHY][UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, Nid2 %d, nushift %d, eNB_offset %d)\n",phy_vars_ue->Mod_id,phy_vars_ue->frame,slot,Nid_cell,Nid2,nushift,eNB_offset);
+    //    printf("[PHY][UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, Nid2 %d, nushift %d, eNB_offset %d)\n",ue->Mod_id,ue->frame,slot,Nid_cell,Nid2,nushift,eNB_offset);
     if (eNB_offset > 0)
-      Nid_cell = phy_vars_ue->PHY_measurements.adj_cell_id[eNB_offset-1];
+      Nid_cell = ue->measurements.adj_cell_id[eNB_offset-1];
 
 
     nushift =  Nid_cell%6;
 
 
 
-    phy_vars_ue->PHY_measurements.rsrp[eNB_offset] = 0;
+    ue->measurements.rsrp[eNB_offset] = 0;
 
 
     if (abstraction_flag == 0) {
 
       // compute RSRP using symbols 0 and 4-frame_parms->Ncp
 
-      for (l=0,nu=0; l<=(4-phy_vars_ue->lte_frame_parms.Ncp); l+=(4-phy_vars_ue->lte_frame_parms.Ncp),nu=3) {
+      for (l=0,nu=0; l<=(4-ue->frame_parms.Ncp); l+=(4-ue->frame_parms.Ncp),nu=3) {
         k = (nu + nushift)%6;
 #ifdef DEBUG_MEAS
-        LOG_I(PHY,"[UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,slot,Nid_cell,nushift,
+        LOG_I(PHY,"[UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",ue->Mod_id,ue->frame_rx,slot,Nid_cell,nushift,
               eNB_offset,k,l);
 #endif
 
-        for (aarx=0; aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx; aarx++) {
-          rxF = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(l*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
-          off  = (phy_vars_ue->lte_frame_parms.first_carrier_offset+k)<<1;
+        for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
+          rxF = (int16_t *)&ue->common_vars.rxdataF[aarx][(l*ue->frame_parms.ofdm_symbol_size)];
+          off  = (ue->frame_parms.first_carrier_offset+k)<<1;
 
-          if (l==(4-phy_vars_ue->lte_frame_parms.Ncp)) {
-            for (rb=0; rb<phy_vars_ue->lte_frame_parms.N_RB_DL; rb++) {
+          if (l==(4-ue->frame_parms.Ncp)) {
+            for (rb=0; rb<ue->frame_parms.N_RB_DL; rb++) {
 
               //    printf("rb %d, off %d, off2 %d\n",rb,off,off2);
 
-              phy_vars_ue->PHY_measurements.rsrp[eNB_offset] += (((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1]));
+              ue->measurements.rsrp[eNB_offset] += (((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1]));
               //        printf("rb %d, off %d : %d\n",rb,off,((((int32_t)rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1])));
-	      //	      if ((phy_vars_ue->frame_rx&0x3ff) == 0)
+	      //	      if ((ue->frame_rx&0x3ff) == 0)
 	      //                printf("rb %d, off %d : %d\n",rb,off,((rxF[off]*rxF[off])+(rxF[off+1]*rxF[off+1])));
 
               
               off+=12;
 
-              if (off>=(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1))
+              if (off>=(ue->frame_parms.ofdm_symbol_size<<1))
                 off = (1+k)<<1;
 
-              phy_vars_ue->PHY_measurements.rsrp[eNB_offset] += (((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1]));
+              ue->measurements.rsrp[eNB_offset] += (((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1]));
               //    printf("rb %d, off %d : %d\n",rb,off,(((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1])));
               /*
-                if ((phy_vars_ue->frame_rx&0x3ff) == 0)
+                if ((ue->frame_rx&0x3ff) == 0)
                 printf("rb %d, off %d : %d\n",rb,off,((rxF[off]*rxF[off])+(rxF[off+1]*rxF[off+1])));
               */
               off+=12;
 
-              if (off>=(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1))
+              if (off>=(ue->frame_parms.ofdm_symbol_size<<1))
                 off = (1+k)<<1;
 
             }
@@ -334,40 +334,40 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
             /*
             if ((eNB_offset==0)&&(l==0)) {
             for (i=0;i<6;i++,off2+=4)
-            phy_vars_ue->PHY_measurements.rssi += ((rxF[off2]*rxF[off2])+(rxF[off2+1]*rxF[off2+1]));
-            if (off2==(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<2))
+            ue->measurements.rssi += ((rxF[off2]*rxF[off2])+(rxF[off2+1]*rxF[off2+1]));
+            if (off2==(ue->frame_parms.ofdm_symbol_size<<2))
             off2=4;
             for (i=0;i<6;i++,off2+=4)
-            phy_vars_ue->PHY_measurements.rssi += ((rxF[off2]*rxF[off2])+(rxF[off2+1]*rxF[off2+1]));
+            ue->measurements.rssi += ((rxF[off2]*rxF[off2])+(rxF[off2+1]*rxF[off2+1]));
             }
             */
-            //    printf("slot %d, rb %d => rsrp %d, rssi %d\n",slot,rb,phy_vars_ue->PHY_measurements.rsrp[eNB_offset],phy_vars_ue->PHY_measurements.rssi);
+            //    printf("slot %d, rb %d => rsrp %d, rssi %d\n",slot,rb,ue->measurements.rsrp[eNB_offset],ue->measurements.rssi);
           }
         }
       }
 
       // 2 RE per PRB
-      //      phy_vars_ue->PHY_measurements.rsrp[eNB_offset]/=(24*phy_vars_ue->lte_frame_parms.N_RB_DL);
-      phy_vars_ue->PHY_measurements.rsrp[eNB_offset]/=(2*phy_vars_ue->lte_frame_parms.N_RB_DL*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-      //      LOG_I(PHY,"eNB: %d, RSRP: %d \n",eNB_offset,phy_vars_ue->PHY_measurements.rsrp[eNB_offset]);
+      //      ue->measurements.rsrp[eNB_offset]/=(24*ue->frame_parms.N_RB_DL);
+      ue->measurements.rsrp[eNB_offset]/=(2*ue->frame_parms.N_RB_DL*ue->frame_parms.ofdm_symbol_size);
+      //      LOG_I(PHY,"eNB: %d, RSRP: %d \n",eNB_offset,ue->measurements.rsrp[eNB_offset]);
       if (eNB_offset == 0) {
-        //  phy_vars_ue->PHY_measurements.rssi/=(24*phy_vars_ue->lte_frame_parms.N_RB_DL);
-        //  phy_vars_ue->PHY_measurements.rssi*=rx_power_correction;
-        //  phy_vars_ue->PHY_measurements.rssi=phy_vars_ue->PHY_measurements.rsrp[0]*24/2;
-        phy_vars_ue->PHY_measurements.rssi=phy_vars_ue->PHY_measurements.rsrp[0]*(12*phy_vars_ue->lte_frame_parms.N_RB_DL);
+        //  ue->measurements.rssi/=(24*ue->frame_parms.N_RB_DL);
+        //  ue->measurements.rssi*=rx_power_correction;
+        //  ue->measurements.rssi=ue->measurements.rsrp[0]*24/2;
+        ue->measurements.rssi=ue->measurements.rsrp[0]*(12*ue->frame_parms.N_RB_DL);
       }
 
-      if (phy_vars_ue->PHY_measurements.rssi>0)
-        phy_vars_ue->PHY_measurements.rsrq[eNB_offset] = 100*phy_vars_ue->PHY_measurements.rsrp[eNB_offset]*phy_vars_ue->lte_frame_parms.N_RB_DL/phy_vars_ue->PHY_measurements.rssi;
+      if (ue->measurements.rssi>0)
+        ue->measurements.rsrq[eNB_offset] = 100*ue->measurements.rsrp[eNB_offset]*ue->frame_parms.N_RB_DL/ue->measurements.rssi;
       else
-        phy_vars_ue->PHY_measurements.rsrq[eNB_offset] = -12000;
+        ue->measurements.rsrq[eNB_offset] = -12000;
 
-      //((200*phy_vars_ue->PHY_measurements.rsrq[eNB_offset]) + ((1024-200)*100*phy_vars_ue->PHY_measurements.rsrp[eNB_offset]*phy_vars_ue->lte_frame_parms.N_RB_DL/phy_vars_ue->PHY_measurements.rssi))>>10;
+      //((200*ue->measurements.rsrq[eNB_offset]) + ((1024-200)*100*ue->measurements.rsrp[eNB_offset]*ue->frame_parms.N_RB_DL/ue->measurements.rssi))>>10;
     } else { // Do abstraction of RSRP and RSRQ
-      phy_vars_ue->PHY_measurements.rssi = phy_vars_ue->PHY_measurements.rx_power_avg[0];
+      ue->measurements.rssi = ue->measurements.rx_power_avg[0];
       // dummay value for the moment
-      phy_vars_ue->PHY_measurements.rsrp[eNB_offset] = -93 ;
-      phy_vars_ue->PHY_measurements.rsrq[eNB_offset] = 3;
+      ue->measurements.rsrp[eNB_offset] = -93 ;
+      ue->measurements.rsrq[eNB_offset] = 3;
 
     }
 
@@ -376,24 +376,24 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
     //    if (slot == 0) {
 
       if (eNB_offset == 0)
-        LOG_I(PHY,"[UE %d] Frame %d, slot %d RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB, gain %d), N0 %d dBm\n",phy_vars_ue->Mod_id,
-              phy_vars_ue->frame_rx,slot,10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB,
-              10*log10(phy_vars_ue->PHY_measurements.rssi),
-              phy_vars_ue->rx_total_gain_dB,
-              phy_vars_ue->PHY_measurements.n0_power_tot_dBm);
+        LOG_I(PHY,"[UE %d] Frame %d, slot %d RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB, gain %d), N0 %d dBm\n",ue->Mod_id,
+              ue->frame_rx,slot,10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
+              10*log10(ue->measurements.rssi),
+              ue->rx_total_gain_dB,
+              ue->measurements.n0_power_tot_dBm);
 
       LOG_I(PHY,"[UE %d] Frame %d, slot %d RRC Measurements (idx %d, Cell id %d) => rsrp: %3.1f dBm/RE (%d), rsrq: %3.1f dB\n",
-            phy_vars_ue->Mod_id,
-            phy_vars_ue->frame_rx,slot,eNB_offset,
-            (eNB_offset>0) ? phy_vars_ue->PHY_measurements.adj_cell_id[eNB_offset-1] : phy_vars_ue->lte_frame_parms.Nid_cell,
-            10*log10(phy_vars_ue->PHY_measurements.rsrp[eNB_offset])-phy_vars_ue->rx_total_gain_dB,
-            phy_vars_ue->PHY_measurements.rsrp[eNB_offset],
-            (10*log10(phy_vars_ue->PHY_measurements.rsrq[eNB_offset])));
-      //LOG_D(PHY,"RSRP_total_dB: %3.2f \n",(dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_offset])/10.0)-phy_vars_ue->rx_total_gain_dB-dB_fixed(phy_vars_ue->lte_frame_parms.N_RB_DL*12));
-
-      //LOG_D(PHY,"RSRP_dB: %3.2f \n",(dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_offset])/10.0));
-      //LOG_D(PHY,"gain_loss_dB: %d \n",phy_vars_ue->rx_total_gain_dB);
-      //LOG_D(PHY,"gain_fixed_dB: %d \n",dB_fixed(phy_vars_ue->lte_frame_parms.N_RB_DL*12));
+            ue->Mod_id,
+            ue->frame_rx,slot,eNB_offset,
+            (eNB_offset>0) ? ue->measurements.adj_cell_id[eNB_offset-1] : ue->frame_parms.Nid_cell,
+            10*log10(ue->measurements.rsrp[eNB_offset])-ue->rx_total_gain_dB,
+            ue->measurements.rsrp[eNB_offset],
+            (10*log10(ue->measurements.rsrq[eNB_offset])));
+      //LOG_D(PHY,"RSRP_total_dB: %3.2f \n",(dB_fixed_times10(ue->measurements.rsrp[eNB_offset])/10.0)-ue->rx_total_gain_dB-dB_fixed(ue->frame_parms.N_RB_DL*12));
+
+      //LOG_D(PHY,"RSRP_dB: %3.2f \n",(dB_fixed_times10(ue->measurements.rsrp[eNB_offset])/10.0));
+      //LOG_D(PHY,"gain_loss_dB: %d \n",ue->rx_total_gain_dB);
+      //LOG_D(PHY,"gain_fixed_dB: %d \n",dB_fixed(ue->frame_parms.N_RB_DL*12));
 
       //    }
 
@@ -402,7 +402,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
 
 }
 
-void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
+void lte_ue_measurements(PHY_VARS_UE *ue,
                          unsigned int subframe_offset,
                          unsigned char N0_symbol,
                          unsigned char abstraction_flag)
@@ -419,7 +419,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
   int16x8_t *dl_ch0_128, *dl_ch1_128;
 #endif
   int *dl_ch0,*dl_ch1;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
   int nb_subbands,subband_size,last_subband_size;
   int N_RB_DL = frame_parms->N_RB_DL;
 
@@ -451,121 +451,121 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
   }
 
   // signal measurements
-  for (eNB_id=0; eNB_id<phy_vars_ue->n_connected_eNB; eNB_id++) {
+  for (eNB_id=0; eNB_id<ue->n_connected_eNB; eNB_id++) {
     for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
       for (aatx=0; aatx<frame_parms->nb_antennas_tx_eNB; aatx++) {
-        phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx] =
-          (signal_energy_nodc(&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
+        ue->measurements.rx_spatial_power[eNB_id][aatx][aarx] =
+          (signal_energy_nodc(&ue->common_vars.dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
                               (N_RB_DL*12)));
-        //- phy_vars_ue->PHY_measurements.n0_power[aarx];
+        //- ue->measurements.n0_power[aarx];
 
-        if (phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx]<0)
-          phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx] = 0; //phy_vars_ue->PHY_measurements.n0_power[aarx];
+        if (ue->measurements.rx_spatial_power[eNB_id][aatx][aarx]<0)
+          ue->measurements.rx_spatial_power[eNB_id][aatx][aarx] = 0; //ue->measurements.n0_power[aarx];
 
-        phy_vars_ue->PHY_measurements.rx_spatial_power_dB[eNB_id][aatx][aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx]);
+        ue->measurements.rx_spatial_power_dB[eNB_id][aatx][aarx] = (unsigned short) dB_fixed(ue->measurements.rx_spatial_power[eNB_id][aatx][aarx]);
 
         if (aatx==0)
-          phy_vars_ue->PHY_measurements.rx_power[eNB_id][aarx] = phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx];
+          ue->measurements.rx_power[eNB_id][aarx] = ue->measurements.rx_spatial_power[eNB_id][aatx][aarx];
         else
-          phy_vars_ue->PHY_measurements.rx_power[eNB_id][aarx] += phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx];
+          ue->measurements.rx_power[eNB_id][aarx] += ue->measurements.rx_spatial_power[eNB_id][aatx][aarx];
       } //aatx
 
-      phy_vars_ue->PHY_measurements.rx_power_dB[eNB_id][aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.rx_power[eNB_id][aarx]);
+      ue->measurements.rx_power_dB[eNB_id][aarx] = (unsigned short) dB_fixed(ue->measurements.rx_power[eNB_id][aarx]);
 
       if (aarx==0)
-        phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id] = phy_vars_ue->PHY_measurements.rx_power[eNB_id][aarx];
+        ue->measurements.rx_power_tot[eNB_id] = ue->measurements.rx_power[eNB_id][aarx];
       else
-        phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id] += phy_vars_ue->PHY_measurements.rx_power[eNB_id][aarx];
+        ue->measurements.rx_power_tot[eNB_id] += ue->measurements.rx_power[eNB_id][aarx];
     } //aarx
 
-    phy_vars_ue->PHY_measurements.rx_power_tot_dB[eNB_id] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id]);
+    ue->measurements.rx_power_tot_dB[eNB_id] = (unsigned short) dB_fixed(ue->measurements.rx_power_tot[eNB_id]);
 
   } //eNB_id
 
   // filter to remove jitter
-  if (phy_vars_ue->init_averaging == 0) {
-    for (eNB_id = 0; eNB_id < phy_vars_ue->n_connected_eNB; eNB_id++)
-      phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id] = (int)
-          (((k1*((long long int)(phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id]))) +
-            (k2*((long long int)(phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id]))))>>10);
-
-    phy_vars_ue->PHY_measurements.n0_power_avg = (int)
-        (((k1*((long long int) (phy_vars_ue->PHY_measurements.n0_power_avg))) +
-          (k2*((long long int) (phy_vars_ue->PHY_measurements.n0_power_tot))))>>10);
+  if (ue->init_averaging == 0) {
+    for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++)
+      ue->measurements.rx_power_avg[eNB_id] = (int)
+          (((k1*((long long int)(ue->measurements.rx_power_avg[eNB_id]))) +
+            (k2*((long long int)(ue->measurements.rx_power_tot[eNB_id]))))>>10);
+
+    ue->measurements.n0_power_avg = (int)
+        (((k1*((long long int) (ue->measurements.n0_power_avg))) +
+          (k2*((long long int) (ue->measurements.n0_power_tot))))>>10);
   } else {
-    for (eNB_id = 0; eNB_id < phy_vars_ue->n_connected_eNB; eNB_id++)
-      phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id] = phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id];
+    for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++)
+      ue->measurements.rx_power_avg[eNB_id] = ue->measurements.rx_power_tot[eNB_id];
 
-    phy_vars_ue->PHY_measurements.n0_power_avg = phy_vars_ue->PHY_measurements.n0_power_tot;
-    phy_vars_ue->init_averaging = 0;
+    ue->measurements.n0_power_avg = ue->measurements.n0_power_tot;
+    ue->init_averaging = 0;
   }
 
-  for (eNB_id = 0; eNB_id < phy_vars_ue->n_connected_eNB; eNB_id++) {
-    phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id] = dB_fixed( phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id]);
-    phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB_id] = dB_fixed2(phy_vars_ue->PHY_measurements.rx_power_tot[eNB_id],phy_vars_ue->PHY_measurements.n0_power_tot);
-    phy_vars_ue->PHY_measurements.wideband_cqi_avg[eNB_id] = dB_fixed2(phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id],phy_vars_ue->PHY_measurements.n0_power_avg);
-    phy_vars_ue->PHY_measurements.rx_rssi_dBm[eNB_id] = phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id] - phy_vars_ue->rx_total_gain_dB;
+  for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++) {
+    ue->measurements.rx_power_avg_dB[eNB_id] = dB_fixed( ue->measurements.rx_power_avg[eNB_id]);
+    ue->measurements.wideband_cqi_tot[eNB_id] = dB_fixed2(ue->measurements.rx_power_tot[eNB_id],ue->measurements.n0_power_tot);
+    ue->measurements.wideband_cqi_avg[eNB_id] = dB_fixed2(ue->measurements.rx_power_avg[eNB_id],ue->measurements.n0_power_avg);
+    ue->measurements.rx_rssi_dBm[eNB_id] = ue->measurements.rx_power_avg_dB[eNB_id] - ue->rx_total_gain_dB;
 #ifdef DEBUG_MEAS
     LOG_I(PHY,"[eNB %d] lte_ue_measurements: RSSI %d dBm, RSSI (digital) %d dB\n",
-          eNB_id,phy_vars_ue->PHY_measurements.rx_rssi_dBm[eNB_id],
-          phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id]);
+          eNB_id,ue->measurements.rx_rssi_dBm[eNB_id],
+          ue->measurements.rx_power_avg_dB[eNB_id]);
 #endif
   }
 
-  phy_vars_ue->PHY_measurements.n0_power_avg_dB = dB_fixed( phy_vars_ue->PHY_measurements.n0_power_avg);
+  ue->measurements.n0_power_avg_dB = dB_fixed( ue->measurements.n0_power_avg);
 
-  for (eNB_id = 0; eNB_id < phy_vars_ue->n_connected_eNB; eNB_id++) {
+  for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++) {
     if (frame_parms->mode1_flag==0) {
       // cqi/pmi information
 
       for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-        dl_ch0    = &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4];
-        dl_ch1    = &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
+        dl_ch0    = &ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
+        dl_ch1    = &ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
 
         for (subband=0; subband<nb_subbands; subband++) {
 
           // cqi
           if (aarx==0)
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband]=0;
+            ue->measurements.subband_cqi_tot[eNB_id][subband]=0;
 
           if ((subband<(nb_subbands-1))||(N_RB_DL==6)) {
             /*for (i=0;i<48;i++)
             msg("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
             */
-            phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] =
+            ue->measurements.subband_cqi[eNB_id][aarx][subband] =
               (signal_energy_nodc(dl_ch0,subband_size) + signal_energy_nodc(dl_ch1,subband_size));
 
-            if ( phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] < 0)
-              phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband]=0;
+            if ( ue->measurements.subband_cqi[eNB_id][aarx][subband] < 0)
+              ue->measurements.subband_cqi[eNB_id][aarx][subband]=0;
 
             /*
             else
-            phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband]-=phy_vars_ue->PHY_measurements.n0_power[aarx];
+            ue->measurements.subband_cqi[eNB_id][aarx][subband]-=ue->measurements.n0_power[aarx];
             */
 
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband] += phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband];
-            phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],
-                phy_vars_ue->PHY_measurements.n0_power[aarx]);
+            ue->measurements.subband_cqi_tot[eNB_id][subband] += ue->measurements.subband_cqi[eNB_id][aarx][subband];
+            ue->measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(ue->measurements.subband_cqi[eNB_id][aarx][subband],
+                ue->measurements.n0_power[aarx]);
           } else { // this is for the last subband which is smaller in size
             //      for (i=0;i<12;i++)
             //        printf("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
-            phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,last_subband_size) +
-                signal_energy_nodc(dl_ch1,last_subband_size)); // - phy_vars_ue->PHY_measurements.n0_power[aarx];
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband] += phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband];
-            phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],
-                phy_vars_ue->PHY_measurements.n0_power[aarx]);
+            ue->measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,last_subband_size) +
+                signal_energy_nodc(dl_ch1,last_subband_size)); // - ue->measurements.n0_power[aarx];
+            ue->measurements.subband_cqi_tot[eNB_id][subband] += ue->measurements.subband_cqi[eNB_id][aarx][subband];
+            ue->measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(ue->measurements.subband_cqi[eNB_id][aarx][subband],
+                ue->measurements.n0_power[aarx]);
           }
 
           dl_ch1+=subband_size;
           dl_ch0+=subband_size;
-          //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]);
+          //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,ue->measurements.subband_cqi[eNB_id][aarx][subband],ue->measurements.subband_cqi_dB[eNB_id][aarx][subband]);
         }
 
       }
 
       for (subband=0; subband<nb_subbands; subband++) {
-        phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot);
-        //    msg("subband_cqi_tot[%d][%d] => %d dB (n0 %d)\n",eNB_id,subband,phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot);
+        ue->measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(ue->measurements.subband_cqi_tot[eNB_id][subband],ue->measurements.n0_power_tot);
+        //    msg("subband_cqi_tot[%d][%d] => %d dB (n0 %d)\n",eNB_id,subband,ue->measurements.subband_cqi_tot_dB[eNB_id][subband],ue->measurements.n0_power_tot);
       }
 
       for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
@@ -574,13 +574,13 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
 #if defined(__x86_64__) || defined(__i386__)
        __m128i pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1 /* ,mmtmpPMI2,mmtmpPMI3 */ ;
 
-        dl_ch0_128    = (__m128i *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4];
-        dl_ch1_128    = (__m128i *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
+        dl_ch0_128    = (__m128i *)&ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
+        dl_ch1_128    = (__m128i *)&ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
 #elif defined(__arm__)
         int32x4_t pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI0b,mmtmpPMI1b;
 
-        dl_ch0_128    = (int16x8_t *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4];
-        dl_ch1_128    = (int16x8_t *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
+        dl_ch0_128    = (int16x8_t *)&ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
+        dl_ch1_128    = (int16x8_t *)&ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
 
 #endif
         for (subband=0; subband<nb_subbands; subband++) {
@@ -628,68 +628,68 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
             dl_ch1_128++;
           }
 
-          phy_vars_ue->PHY_measurements.subband_pmi_re[eNB_id][subband][aarx] = (((int *)&pmi128_re)[0] + ((int *)&pmi128_re)[1] + ((int *)&pmi128_re)[2] + ((int *)&pmi128_re)[3])>>2;
-          phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx] = (((int *)&pmi128_im)[0] + ((int *)&pmi128_im)[1] + ((int *)&pmi128_im)[2] + ((int *)&pmi128_im)[3])>>2;
-          phy_vars_ue->PHY_measurements.wideband_pmi_re[eNB_id][aarx] += phy_vars_ue->PHY_measurements.subband_pmi_re[eNB_id][subband][aarx];
-          phy_vars_ue->PHY_measurements.wideband_pmi_im[eNB_id][aarx] += phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx];
+          ue->measurements.subband_pmi_re[eNB_id][subband][aarx] = (((int *)&pmi128_re)[0] + ((int *)&pmi128_re)[1] + ((int *)&pmi128_re)[2] + ((int *)&pmi128_re)[3])>>2;
+          ue->measurements.subband_pmi_im[eNB_id][subband][aarx] = (((int *)&pmi128_im)[0] + ((int *)&pmi128_im)[1] + ((int *)&pmi128_im)[2] + ((int *)&pmi128_im)[3])>>2;
+          ue->measurements.wideband_pmi_re[eNB_id][aarx] += ue->measurements.subband_pmi_re[eNB_id][subband][aarx];
+          ue->measurements.wideband_pmi_im[eNB_id][aarx] += ue->measurements.subband_pmi_im[eNB_id][subband][aarx];
         } // subband loop
       } // rx antenna loop
     }  // if frame_parms->mode1_flag == 0
     else {
       // cqi information only for mode 1
       for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-        dl_ch0    = &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4];
+        dl_ch0    = &ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
 
         for (subband=0; subband<7; subband++) {
 
           // cqi
           if (aarx==0)
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband]=0;
+            ue->measurements.subband_cqi_tot[eNB_id][subband]=0;
 
           if (subband<6) {
             //      for (i=0;i<48;i++)
             //        printf("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
-            phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] =
-              (signal_energy_nodc(dl_ch0,48) ) - phy_vars_ue->PHY_measurements.n0_power[aarx];
+            ue->measurements.subband_cqi[eNB_id][aarx][subband] =
+              (signal_energy_nodc(dl_ch0,48) ) - ue->measurements.n0_power[aarx];
 
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband] += phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband];
-            phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],
-                phy_vars_ue->PHY_measurements.n0_power[aarx]);
+            ue->measurements.subband_cqi_tot[eNB_id][subband] += ue->measurements.subband_cqi[eNB_id][aarx][subband];
+            ue->measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(ue->measurements.subband_cqi[eNB_id][aarx][subband],
+                ue->measurements.n0_power[aarx]);
           } else {
             //      for (i=0;i<12;i++)
             //        printf("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
-            phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,12) ) - phy_vars_ue->PHY_measurements.n0_power[aarx];
-            phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband] += phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband];
-            phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],
-                phy_vars_ue->PHY_measurements.n0_power[aarx]);
+            ue->measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,12) ) - ue->measurements.n0_power[aarx];
+            ue->measurements.subband_cqi_tot[eNB_id][subband] += ue->measurements.subband_cqi[eNB_id][aarx][subband];
+            ue->measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(ue->measurements.subband_cqi[eNB_id][aarx][subband],
+                ue->measurements.n0_power[aarx]);
           }
 
           dl_ch1+=48;
-          //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]);
+          //    msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,ue->measurements.subband_cqi[eNB_id][aarx][subband],ue->measurements.subband_cqi_dB[eNB_id][aarx][subband]);
         }
       }
 
       for (subband=0; subband<nb_subbands; subband++) {
-        phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot);
+        ue->measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(ue->measurements.subband_cqi_tot[eNB_id][subband],ue->measurements.n0_power_tot);
       }
     }
 
-    phy_vars_ue->PHY_measurements.rank[eNB_id] = 0;
+    ue->measurements.rank[eNB_id] = 0;
 
     for (i=0; i<nb_subbands; i++) {
-      phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 0;
+      ue->measurements.selected_rx_antennas[eNB_id][i] = 0;
 
       if (frame_parms->nb_antennas_rx>1) {
-        if (phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][0][i] >= phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][1][i])
-          phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 0;
+        if (ue->measurements.subband_cqi_dB[eNB_id][0][i] >= ue->measurements.subband_cqi_dB[eNB_id][1][i])
+          ue->measurements.selected_rx_antennas[eNB_id][i] = 0;
         else
-          phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 1;
+          ue->measurements.selected_rx_antennas[eNB_id][i] = 1;
       } else
-        phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 0;
+        ue->measurements.selected_rx_antennas[eNB_id][i] = 0;
     }
 
     // if(eNB_id==0)
-    // printf("in lte_ue_measurements: selected rx_antenna[eNB_id==0]:%u\n", phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i]);
+    // printf("in lte_ue_measurements: selected rx_antenna[eNB_id==0]:%u\n", ue->measurements.selected_rx_antennas[eNB_id][i]);
   }  // eNB_id loop
 
 #if defined(__x86_64__) || defined(__i386__)
@@ -699,7 +699,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
 }
 
 
-void lte_ue_measurements_emul(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_t eNB_id)
+void lte_ue_measurements_emul(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
 {
 
   msg("[PHY] EMUL UE lte_ue_measurements_emul last slot %d, eNB_id %d\n",last_slot,eNB_id);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 1eb663ec89e844a2adc171ecdc818e912a97d81c..723b143d26144bfaee89c7d2368ae89f07b06925 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -52,29 +52,29 @@ static int16_t ru_90c[2*128] = {32767, 0,32766, -402,32758, -804,32746, -1206,32
 
 #define SCALE 0x3FFF
 
-int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
+int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
                                   uint8_t eNB_id,
                                   uint8_t UE_id,
-                                  uint8_t sched_subframe,
+                                  uint8_t thread_id,
                                   unsigned char l,
                                   unsigned char Ns,
                                   uint8_t cooperation_flag)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
-  LTE_eNB_PUSCH *eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars[UE_id];
-  int32_t **ul_ch_estimates=eNB_pusch_vars->drs_ch_estimates[eNB_id];
-  int32_t **ul_ch_estimates_time=  eNB_pusch_vars->drs_ch_estimates_time[eNB_id];
-  int32_t **ul_ch_estimates_0=  eNB_pusch_vars->drs_ch_estimates_0[eNB_id];
-  int32_t **ul_ch_estimates_1=  eNB_pusch_vars->drs_ch_estimates_1[eNB_id];
-  int32_t **rxdataF_ext=  eNB_pusch_vars->rxdataF_ext[eNB_id];
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
-  uint8_t harq_pid = subframe2harq_pid(frame_parms,phy_vars_eNB->proc[sched_subframe].frame_rx,subframe);
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  LTE_eNB_PUSCH *pusch_vars = eNB->pusch_vars[UE_id];
+  int32_t **ul_ch_estimates=pusch_vars->drs_ch_estimates[eNB_id];
+  int32_t **ul_ch_estimates_time=  pusch_vars->drs_ch_estimates_time[eNB_id];
+  int32_t **ul_ch_estimates_0=  pusch_vars->drs_ch_estimates_0[eNB_id];
+  int32_t **ul_ch_estimates_1=  pusch_vars->drs_ch_estimates_1[eNB_id];
+  int32_t **rxdataF_ext=  pusch_vars->rxdataF_ext[eNB_id];
+  int subframe = eNB->proc[thread_id].subframe_rx;
+  uint8_t harq_pid = subframe2harq_pid(frame_parms,eNB->proc[thread_id].frame_rx,subframe);
   int16_t delta_phase = 0;
   int16_t *ru1 = ru_90;
   int16_t *ru2 = ru_90;
   int16_t current_phase1,current_phase2;
-  uint16_t N_rb_alloc = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb;
+  uint16_t N_rb_alloc = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
   uint16_t aa,Msc_RS,Msc_RS_idx;
   uint16_t * Msc_idx_ptr;
   int k,pilot_pos1 = 3 - frame_parms->Ncp, pilot_pos2 = 10 - 2*frame_parms->Ncp;
@@ -116,7 +116,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
   Msc_RS = N_rb_alloc*12;
 
   cyclic_shift = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                  phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS2 +
+                  eNB->ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS2 +
                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+Ns]) % 12;
 
 #if defined(USER_MODE)
@@ -669,11 +669,11 @@ extern uint16_t transmission_offset_tdd[16];
 #define DEBUG_SRS
 
 int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
-                                   LTE_eNB_COMMON *eNb_common_vars,
-                                   LTE_eNB_SRS *eNb_srs_vars,
+                                   LTE_eNB_COMMON *common_vars,
+                                   LTE_eNB_SRS *srs_vars,
                                    SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated,
                                    unsigned char sub_frame_number,
-                                   unsigned char eNb_id)
+                                   unsigned char eNB_id)
 {
 
   int T_SFC,aa;
@@ -690,7 +690,7 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
   T_SFC = (Ssrs<=7 ? 5 : 10);
 
   /*
-     msg("SRS channel estimation eNb %d, subframs %d, %d %d %d %d %d\n",eNb_id,sub_frame_number,
+     msg("SRS channel estimation eNB %d, subframs %d, %d %d %d %d %d\n",eNB_id,sub_frame_number,
      SRS_parms->Csrs,
      SRS_parms->Bsrs,
      SRS_parms->kTC,
@@ -702,34 +702,34 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
 
     if (generate_srs_rx(frame_parms,
                         soundingrs_ul_config_dedicated,
-                        eNb_srs_vars->srs)==-1) {
+                        srs_vars->srs)==-1) {
       msg("lte_srs_channel_estimation: Error in generate_srs_rx\n");
       return(-1);
     }
 
     for (aa=0; aa<nb_antennas_rx; aa++) {
 #ifdef DEBUG_SRS
-      msg("SRS channel estimation eNb %d, subframs %d, aarx %d, %p, %p, %p\n",eNb_id,sub_frame_number,aa,
-          &eNb_common_vars->rxdataF[eNb_id][aa][2*frame_parms->ofdm_symbol_size*symbol],
-          eNb_srs_vars->srs,
-          eNb_srs_vars->srs_ch_estimates[eNb_id][aa]);
+      msg("SRS channel estimation eNB %d, subframs %d, aarx %d, %p, %p, %p\n",eNB_id,sub_frame_number,aa,
+          &common_vars->rxdataF[eNB_id][aa][2*frame_parms->ofdm_symbol_size*symbol],
+          srs_vars->srs,
+          srs_vars->srs_ch_estimates[eNB_id][aa]);
 #endif
 
-      //write_output("eNb_rxF.m","rxF",&eNb_common_vars->rxdataF[0][aa][2*frame_parms->ofdm_symbol_size*symbol],2*(frame_parms->ofdm_symbol_size),2,1);
-      //write_output("eNb_srs.m","srs_eNb",eNb_common_vars->srs,(frame_parms->ofdm_symbol_size),1,1);
+      //write_output("eNB_rxF.m","rxF",&common_vars->rxdataF[0][aa][2*frame_parms->ofdm_symbol_size*symbol],2*(frame_parms->ofdm_symbol_size),2,1);
+      //write_output("eNB_srs.m","srs_eNB",common_vars->srs,(frame_parms->ofdm_symbol_size),1,1);
 
-      mult_cpx_conj_vector((int16_t*) &eNb_common_vars->rxdataF[eNb_id][aa][2*frame_parms->ofdm_symbol_size*symbol],
-                      (int16_t*) eNb_srs_vars->srs,
-                      (int16_t*) eNb_srs_vars->srs_ch_estimates[eNb_id][aa],
+      mult_cpx_conj_vector((int16_t*) &common_vars->rxdataF[eNB_id][aa][2*frame_parms->ofdm_symbol_size*symbol],
+                      (int16_t*) srs_vars->srs,
+                      (int16_t*) srs_vars->srs_ch_estimates[eNB_id][aa],
                       frame_parms->ofdm_symbol_size,
                       15);
 
       //msg("SRS channel estimation cmult out\n");
 #ifdef USER_MODE
 #ifdef DEBUG_SRS
-      sprintf(fname,"eNB_id%d_an%d_srs_ch_est.m",eNb_id,aa);
-      sprintf(vname,"eNB%d_%d_srs_ch_est",eNb_id,aa);
-      write_output(fname,vname,eNb_srs_vars->srs_ch_estimates[eNb_id][aa],frame_parms->ofdm_symbol_size,1,1);
+      sprintf(fname,"eNB_id%d_an%d_srs_ch_est.m",eNB_id,aa);
+      sprintf(vname,"eNB%d_%d_srs_ch_est",eNB_id,aa);
+      write_output(fname,vname,srs_vars->srs_ch_estimates[eNB_id][aa],frame_parms->ofdm_symbol_size,1,1);
 #endif
 #endif
     }
@@ -738,7 +738,7 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
   /*
     else {
     for (aa=0;aa<nb_antennas_rx;aa++)
-    bzero(eNb_srs_vars->srs_ch_estimates[eNb_id][aa],frame_parms->ofdm_symbol_size*sizeof(int));
+    bzero(srs_vars->srs_ch_estimates[eNB_id][aa],frame_parms->ofdm_symbol_size*sizeof(int));
     }
   */
   return(0);
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 9ffda3a83d914e001a07d561a314f1e21fe7a77c..17b57bc085341f5c72c0f639b4e3100e63067f78 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -40,7 +40,7 @@
 
 
 //Calibration
-int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
+int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
                         int32_t *output,
                         short amp,
                         unsigned char Ns,
@@ -76,27 +76,27 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
     return(-1);
   }
 
-  mprime = 110 - phy_vars_eNB->lte_frame_parms.N_RB_DL;
+  mprime = 110 - eNB->frame_parms.N_RB_DL;
 
-  k = (nu + phy_vars_eNB->lte_frame_parms.nushift);
+  k = (nu + eNB->frame_parms.nushift);
 
   if (k > 6)//b
     k -=6;//b
 
-  k+=phy_vars_eNB->lte_frame_parms.first_carrier_offset;
+  k+=eNB->frame_parms.first_carrier_offset;
 
-  for (m=0; m<phy_vars_eNB->lte_frame_parms.N_RB_DL<<1; m++) { // loop over pilots in one slot/symbol, 2*N_RB_DL pilots
+  for (m=0; m<eNB->frame_parms.N_RB_DL<<1; m++) { // loop over pilots in one slot/symbol, 2*N_RB_DL pilots
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
 
     // this is r_mprime from 3GPP 36-211 6.10.1.2
-    output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
+    output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
     //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
 #ifdef DEBUG_DL_CELL_SPEC
     printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
               Ns,l,m,mprime_dword,mprime_qpsk_symb);
-    printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+    printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
 #endif
 
     mprime++;
@@ -108,9 +108,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
 #endif
     k+=6;//b
 
-    if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) {
+    if (k >= eNB->frame_parms.ofdm_symbol_size) {
       k++;  // skip DC carrier
-      k-=phy_vars_eNB->lte_frame_parms.ofdm_symbol_size;
+      k-=eNB->frame_parms.ofdm_symbol_size;
     }
 
     //    printf("** k %d\n",k);
@@ -120,7 +120,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
 }
 
 
-int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
+int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
                      int32_t *output,
                      short amp,
                      unsigned char Ns,
@@ -155,31 +155,31 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
     return(-1);
   }
 
-  mprime = 110 - phy_vars_eNB->lte_frame_parms.N_RB_DL;
+  mprime = 110 - eNB->frame_parms.N_RB_DL;
 
-  k = (nu + phy_vars_eNB->lte_frame_parms.nushift);
+  k = (nu + eNB->frame_parms.nushift);
 
   if (k > 5)
     k -=6;
 
-  k+=phy_vars_eNB->lte_frame_parms.first_carrier_offset;
+  k+=eNB->frame_parms.first_carrier_offset;
 
   DevAssert( Ns < 20 );
   DevAssert( l < 2 );
   DevAssert( mprime>>4 < 14 );
 
-  for (m=0; m<phy_vars_eNB->lte_frame_parms.N_RB_DL<<1; m++) {
+  for (m=0; m<eNB->frame_parms.N_RB_DL<<1; m++) {
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
 
     // this is r_mprime from 3GPP 36-211 6.10.1.2
-    output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
+    output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
     //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
 #ifdef DEBUG_DL_CELL_SPEC
     printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
         Ns,l,m,mprime_dword,mprime_qpsk_symb);
-    printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+    printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
 #endif
 
     mprime++;
@@ -191,9 +191,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
 #endif
     k+=6;
 
-    if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) {
+    if (k >= eNB->frame_parms.ofdm_symbol_size) {
       k++;  // skip DC carrier
-      k-=phy_vars_eNB->lte_frame_parms.ofdm_symbol_size;
+      k-=eNB->frame_parms.ofdm_symbol_size;
     }
 
     //    printf("** k %d\n",k);
@@ -202,7 +202,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
   return(0);
 }
 
-int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue,
+int lte_dl_cell_spec_rx(PHY_VARS_UE *ue,
                         uint8_t eNB_offset,
                         int *output,
                         unsigned char Ns,
@@ -230,19 +230,19 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue,
   ((short *)&qpsk[3])[0] = -pamp;
   ((short *)&qpsk[3])[1] = pamp;
 
-  mprime = 110 - phy_vars_ue->lte_frame_parms.N_RB_DL;
+  mprime = 110 - ue->frame_parms.N_RB_DL;
 
-  for (m=0; m<phy_vars_ue->lte_frame_parms.N_RB_DL<<1; m++) {
+  for (m=0; m<ue->frame_parms.N_RB_DL<<1; m++) {
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
 
     // this is r_mprime from 3GPP 36-211 6.10.1.2
-    output[k] = qpsk[(phy_vars_ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
+    output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
 #ifdef DEBUG_DL_CELL_SPEC
     printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
            Ns,l,m,mprime_dword,mprime_qpsk_symb);
-    printf("index = %d (k %d)\n",(phy_vars_ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+    printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
 #endif
 
     mprime++;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
index 9c3269b863b9c5ae8de92b8248b6968f2fee25cd..06edf4a5f538abf2a3b78ec6dfdfbd3d910a95bf 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
@@ -39,7 +39,7 @@
 //extern unsigned int lte_gold_table[10][3][42];
 //#define DEBUG_DL_MBSFN
 
-int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
+int lte_dl_mbsfn(PHY_VARS_eNB *eNB, int32_t *output,
                  short amp,
                  int subframe,
                  unsigned char l)
@@ -62,9 +62,9 @@ int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
   ((short *)&qpsk[3])[1] = -a;
 
 
-  mprime = 3*(110 - phy_vars_eNB->lte_frame_parms.N_RB_DL);
+  mprime = 3*(110 - eNB->frame_parms.N_RB_DL);
 
-  for (m=0; m<phy_vars_eNB->lte_frame_parms.N_RB_DL*6; m++) {
+  for (m=0; m<eNB->frame_parms.N_RB_DL*6; m++) {
 
     if ((l==0) || (l==2))
       k = m<<1;
@@ -75,24 +75,24 @@ int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
       return(-1);
     }
 
-    k+=phy_vars_eNB->lte_frame_parms.first_carrier_offset;
+    k+=eNB->frame_parms.first_carrier_offset;
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
 
-    if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) {
+    if (k >= eNB->frame_parms.ofdm_symbol_size) {
       k++;  // skip DC carrier
-      k-=phy_vars_eNB->lte_frame_parms.ofdm_symbol_size;
+      k-=eNB->frame_parms.ofdm_symbol_size;
     }
 
-    output[k] = qpsk[(phy_vars_eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
+    output[k] = qpsk[(eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
     //output[k] = (lte_gold_table[eNB_offset][subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
 
 
 #ifdef DEBUG_DL_MBSFN
     msg("subframe %d, l %d, m %d, mprime %d, mprime_dword %d, mprime_qpsk_symbol %d\n",
         subframe,l,m,mprime,mprime_dword,mprime_qpsk_symb);
-    msg("index = %d (k %d)(%x)\n",(phy_vars_eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k,phy_vars_eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]);
+    msg("index = %d (k %d)(%x)\n",(eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k,eNB->lte_gold_mbsfn_table[subframe][l][mprime_dword]);
 #endif
     mprime++;
 
@@ -110,7 +110,7 @@ int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
 
 
 
-int lte_dl_mbsfn_rx(PHY_VARS_UE *phy_vars_ue,
+int lte_dl_mbsfn_rx(PHY_VARS_UE *ue,
                     int *output,
                     int subframe,
                     unsigned char l)
@@ -131,20 +131,20 @@ int lte_dl_mbsfn_rx(PHY_VARS_UE *phy_vars_ue,
   ((short *)&qpsk[3])[0] = -ONE_OVER_SQRT2_Q15;
   ((short *)&qpsk[3])[1] = ONE_OVER_SQRT2_Q15;
 
-  mprime = 3*(110 - phy_vars_ue->lte_frame_parms.N_RB_DL);
+  mprime = 3*(110 - ue->frame_parms.N_RB_DL);
 
-  for (m=0; m<phy_vars_ue->lte_frame_parms.N_RB_DL*6; m++) {
+  for (m=0; m<ue->frame_parms.N_RB_DL*6; m++) {
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
 
     // this is r_mprime from 3GPP 36-211 6.10.1.2
-    output[k] = qpsk[(phy_vars_ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
+    output[k] = qpsk[(ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
 
 #ifdef DEBUG_DL_MBSFN
     printf("subframe %d, l %d, m %d, mprime %d, mprime_dword %d, mprime_qpsk_symbol %d\n",
            subframe,l,m,mprime, mprime_dword,mprime_qpsk_symb);
-    printf("index = %d (k %d) (%x)\n",(phy_vars_ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k,phy_vars_ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]);
+    printf("index = %d (k %d) (%x)\n",(ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k,ue->lte_gold_mbsfn_table[subframe][l][mprime_dword]);
 #endif
 
     mprime++;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
index 9b094393c7cbb0fbff56dec693377cd4c0ae7bc5..ae971c4c6c5e52eebfbb39bbe58a3b433f2eeec2 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
@@ -52,7 +52,7 @@
 
 int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-1,-1,1,1},{1,-1,-1,1},{-1,1,1,-1}};
 
-int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
+int lte_dl_ue_spec(PHY_VARS_eNB *eNB,
                    uint8_t UE_id,
                    int32_t *output,
                    short amp,
@@ -64,7 +64,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
   int32_t qpsk[4],nqpsk[4],*qpsk_p,*output_p;
   int16_t a;
   int w,lprime,ind,l,ind_dword,ind_qpsk_symb,nPRB;
-  //  LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0];
+  //  LTE_eNB_DLSCH_t *dlsch = eNB->dlsch_eNB[UE_id][0];
 
   a = (amp*ONE_OVER_SQRT2_Q15)>>15;
   ((short *)&qpsk[0])[0] = a;
@@ -87,13 +87,13 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
 
   if (p>=7) {
     if (SS_flag==0) {
-      if (phy_vars_eNB->lte_frame_parms.Ncp == NORMAL) {
+      if (eNB->frame_parms.Ncp == NORMAL) {
         // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p>=7
 
 
 
         // position output pointer to 5th symbol in slot
-        output_p = output+(60*phy_vars_eNB->lte_frame_parms.N_RB_DL);
+        output_p = output+(60*eNB->frame_parms.N_RB_DL);
 
         // shift to 2nd RE in PRB for p=7,8,11,13
         if ((p==7) || (p==8) || (p==11) || (p==13)) output_p++;
@@ -101,12 +101,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
 
         for (lprime=0; lprime<2; lprime++) {
 
-          ind = 3*lprime*phy_vars_eNB->lte_frame_parms.N_RB_DL;
+          ind = 3*lprime*eNB->frame_parms.N_RB_DL;
           l = lprime + ((Ns&1)<<1);
 
           // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence
           // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP
-          for (nPRB=0; nPRB<phy_vars_eNB->lte_frame_parms.N_RB_DL; nPRB+=2) {
+          for (nPRB=0; nPRB<eNB->frame_parms.N_RB_DL; nPRB+=2) {
 
             // First pilot
             w = Wbar_NCP[p-7][l];
@@ -116,13 +116,13 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=5;
@@ -135,12 +135,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=5;
@@ -152,12 +152,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=2;
@@ -171,13 +171,13 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=5;
@@ -190,12 +190,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=5;
@@ -207,12 +207,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
             ind_dword     = ind>>4;
             ind_qpsk_symb = ind&0xf;
 
-            *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
+            *output_p = qpsk_p[(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3];
 
 #ifdef DEBUG_DL_UESPEC
             LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n",
                   Ns,l,m,mprime_dword,mprime_qpsk_symb);
-            LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
+            LOG_D(PHY,"index = %d\n",(eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3);
 #endif
 
             output_p+=2;
@@ -260,9 +260,9 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue,
   ((short *)&qpsk[3])[0] = -pamp;
   ((short *)&qpsk[3])[1] = pamp;
 
-  mprime = 110 - phy_vars_ue->lte_frame_parms.N_RB_DL;
+  mprime = 110 - phy_vars_ue->frame_parms.N_RB_DL;
 
-  for (m=0;m<phy_vars_ue->lte_frame_parms.N_RB_DL<<1;m++) {
+  for (m=0;m<phy_vars_ue->frame_parms.N_RB_DL<<1;m++) {
 
     mprime_dword     = mprime>>4;
     mprime_qpsk_symb = mprime&0xf;
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index e79f603a49c5245f5bc761ffc808b51b0aacfe68..c0ea61d48e4e828c340f9e34002875a5ad621ecc 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -1686,8 +1686,8 @@ void pdcch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,
 
 int32_t avgP[4];
 
-int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
-                 LTE_UE_PDCCH **lte_ue_pdcch_vars,
+int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
+                 LTE_UE_PDCCH **pdcch_vars,
                  LTE_DL_FRAME_PARMS *frame_parms,
                  uint8_t subframe,
                  uint8_t eNB_id,
@@ -1701,49 +1701,49 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
   uint8_t eNB_id_i=eNB_id+1;//add 1 to eNB_id to separate from wanted signal, chosen as the B/F'd pilots from the SeNB are shifted by 1
 #endif
   int32_t avgs,s;
-  uint8_t n_pdcch_symbols = 3; //lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols;
+  uint8_t n_pdcch_symbols = 3; //pdcch_vars[eNB_id]->num_pdcch_symbols;
   uint8_t mi = get_mi(frame_parms,subframe);
 
   //  printf("In rx_pdcch, subframe %d,  eNB_id %d\n",subframe,eNB_id);
 
   for (s=0; s<n_pdcch_symbols; s++) {
     if (is_secondary_ue == 1) {
-      pdcch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                               lte_ue_common_vars->dl_ch_estimates[eNB_id+1], //add 1 to eNB_id to compensate for the shifted B/F'd pilots from the SeNB
-                               lte_ue_pdcch_vars[eNB_id]->rxdataF_ext,
-                               lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+      pdcch_extract_rbs_single(common_vars->rxdataF,
+                               common_vars->dl_ch_estimates[eNB_id+1], //add 1 to eNB_id to compensate for the shifted B/F'd pilots from the SeNB
+                               pdcch_vars[eNB_id]->rxdataF_ext,
+                               pdcch_vars[eNB_id]->dl_ch_estimates_ext,
                                s,
                                high_speed_flag,
                                frame_parms);
 #ifdef MU_RECEIVER
-      pdcch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                               lte_ue_common_vars->dl_ch_estimates[eNB_id_i - 1],//subtract 1 to eNB_id_i to compensate for the non-shifted pilots from the PeNB
-                               lte_ue_pdcch_vars[eNB_id_i]->rxdataF_ext,//shift by two to simulate transmission from a second antenna
-                               lte_ue_pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,//shift by two to simulate transmission from a second antenna
+      pdcch_extract_rbs_single(common_vars->rxdataF,
+                               common_vars->dl_ch_estimates[eNB_id_i - 1],//subtract 1 to eNB_id_i to compensate for the non-shifted pilots from the PeNB
+                               pdcch_vars[eNB_id_i]->rxdataF_ext,//shift by two to simulate transmission from a second antenna
+                               pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,//shift by two to simulate transmission from a second antenna
                                s,
                                high_speed_flag,
                                frame_parms);
 #endif //MU_RECEIVER
     } else if (frame_parms->nb_antennas_tx_eNB>1) {
-      pdcch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
-                             lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                             lte_ue_pdcch_vars[eNB_id]->rxdataF_ext,
-                             lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+      pdcch_extract_rbs_dual(common_vars->rxdataF,
+                             common_vars->dl_ch_estimates[eNB_id],
+                             pdcch_vars[eNB_id]->rxdataF_ext,
+                             pdcch_vars[eNB_id]->dl_ch_estimates_ext,
                              s,
                              high_speed_flag,
                              frame_parms);
     } else {
-      pdcch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                               lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                               lte_ue_pdcch_vars[eNB_id]->rxdataF_ext,
-                               lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+      pdcch_extract_rbs_single(common_vars->rxdataF,
+                               common_vars->dl_ch_estimates[eNB_id],
+                               pdcch_vars[eNB_id]->rxdataF_ext,
+                               pdcch_vars[eNB_id]->dl_ch_estimates_ext,
                                s,
                                high_speed_flag,
                                frame_parms);
     }
   }
 
-  pdcch_channel_level(lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+  pdcch_channel_level(pdcch_vars[eNB_id]->dl_ch_estimates_ext,
                       frame_parms,
                       avgP,
                       frame_parms->N_RB_DL);
@@ -1761,10 +1761,10 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
 
 
   for (s=0; s<n_pdcch_symbols; s++) {
-    pdcch_channel_compensation(lte_ue_pdcch_vars[eNB_id]->rxdataF_ext,
-                               lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
-                               lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,
-                               (aatx>1) ? lte_ue_pdcch_vars[eNB_id]->rho : NULL,
+    pdcch_channel_compensation(pdcch_vars[eNB_id]->rxdataF_ext,
+                               pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+                               pdcch_vars[eNB_id]->rxdataF_comp,
+                               (aatx>1) ? pdcch_vars[eNB_id]->rho : NULL,
                                frame_parms,
                                s,
                                log2_maxh); // log2_maxh+I0_shift
@@ -1773,7 +1773,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
 #ifdef DEBUG_PHY
 
     if (subframe==5)
-      write_output("rxF_comp_d.m","rxF_c_d",&lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+      write_output("rxF_comp_d.m","rxF_c_d",&pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
 
 #endif
 
@@ -1781,21 +1781,21 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
 
     if (is_secondary_ue) {
       //get MF output for interfering stream
-      pdcch_channel_compensation(lte_ue_pdcch_vars[eNB_id_i]->rxdataF_ext,
-                                 lte_ue_pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                 lte_ue_pdcch_vars[eNB_id_i]->rxdataF_comp,
-                                 (aatx>1) ? lte_ue_pdcch_vars[eNB_id_i]->rho : NULL,
+      pdcch_channel_compensation(pdcch_vars[eNB_id_i]->rxdataF_ext,
+                                 pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                 pdcch_vars[eNB_id_i]->rxdataF_comp,
+                                 (aatx>1) ? pdcch_vars[eNB_id_i]->rho : NULL,
                                  frame_parms,
                                  s,
                                  log2_maxh); // log2_maxh+I0_shift
 #ifdef DEBUG_PHY
-      write_output("rxF_comp_i.m","rxF_c_i",&lte_ue_pdcch_vars[eNB_id_i]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+      write_output("rxF_comp_i.m","rxF_c_i",&pdcch_vars[eNB_id_i]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
 #endif
       pdcch_dual_stream_correlation(frame_parms,
                                     s,
-                                    lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    lte_ue_pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                    lte_ue_pdcch_vars[eNB_id]->dl_ch_rho_ext,
+                                    pdcch_vars[eNB_id]->dl_ch_estimates_ext,
+                                    pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                    pdcch_vars[eNB_id]->dl_ch_rho_ext,
                                     log2_maxh);
     }
 
@@ -1807,54 +1807,54 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
 
       if (is_secondary_ue) {
         pdcch_detection_mrc_i(frame_parms,
-                              lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,
-                              lte_ue_pdcch_vars[eNB_id_i]->rxdataF_comp,
-                              lte_ue_pdcch_vars[eNB_id]->rho,
-                              lte_ue_pdcch_vars[eNB_id]->dl_ch_rho_ext,
+                              pdcch_vars[eNB_id]->rxdataF_comp,
+                              pdcch_vars[eNB_id_i]->rxdataF_comp,
+                              pdcch_vars[eNB_id]->rho,
+                              pdcch_vars[eNB_id]->dl_ch_rho_ext,
                               s);
 #ifdef DEBUG_PHY
-        write_output("rxF_comp_d.m","rxF_c_d",&lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-        write_output("rxF_comp_i.m","rxF_c_i",&lte_ue_pdcch_vars[eNB_id_i]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_d.m","rxF_c_d",&pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_i.m","rxF_c_i",&pdcch_vars[eNB_id_i]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
 #endif
       } else
 #endif //MU_RECEIVER
         pdcch_detection_mrc(frame_parms,
-                            lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,
+                            pdcch_vars[eNB_id]->rxdataF_comp,
                             s);
 
     }
 
     if (mimo_mode == SISO)
-      pdcch_siso(frame_parms,lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,s);
+      pdcch_siso(frame_parms,pdcch_vars[eNB_id]->rxdataF_comp,s);
     else
-      pdcch_alamouti(frame_parms,lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,s);
+      pdcch_alamouti(frame_parms,pdcch_vars[eNB_id]->rxdataF_comp,s);
 
 
 #ifdef MU_RECEIVER
 
     if (is_secondary_ue) {
       pdcch_qpsk_qpsk_llr(frame_parms,
-                          lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,
-                          lte_ue_pdcch_vars[eNB_id_i]->rxdataF_comp,
-                          lte_ue_pdcch_vars[eNB_id]->dl_ch_rho_ext,
-                          lte_ue_pdcch_vars[eNB_id]->llr16, //subsequent function require 16 bit llr, but output must be 8 bit (actually clipped to 4, because of the Viterbi decoder)
-                          lte_ue_pdcch_vars[eNB_id]->llr,
+                          pdcch_vars[eNB_id]->rxdataF_comp,
+                          pdcch_vars[eNB_id_i]->rxdataF_comp,
+                          pdcch_vars[eNB_id]->dl_ch_rho_ext,
+                          pdcch_vars[eNB_id]->llr16, //subsequent function require 16 bit llr, but output must be 8 bit (actually clipped to 4, because of the Viterbi decoder)
+                          pdcch_vars[eNB_id]->llr,
                           s);
       /*
       #ifdef DEBUG_PHY
       if (subframe==5) {
-      write_output("llr8_seq.m","llr8",&lte_ue_pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
-      write_output("llr16_seq.m","llr16",&lte_ue_pdcch_vars[eNB_id]->llr16[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
+      write_output("llr8_seq.m","llr8",&pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
+      write_output("llr16_seq.m","llr16",&pdcch_vars[eNB_id]->llr16[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
       }
       #endif*/
     } else {
 #endif //MU_RECEIVER
       pdcch_llr(frame_parms,
-                lte_ue_pdcch_vars[eNB_id]->rxdataF_comp,
-                (char *)lte_ue_pdcch_vars[eNB_id]->llr,
+                pdcch_vars[eNB_id]->rxdataF_comp,
+                (char *)pdcch_vars[eNB_id]->llr,
                 s);
       /*#ifdef DEBUG_PHY
-      write_output("llr8_seq.m","llr8",&lte_ue_pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
+      write_output("llr8_seq.m","llr8",&pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4);
       #endif*/
 #ifdef MU_RECEIVER
     }
@@ -1866,7 +1866,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
   // decode pcfich here
   n_pdcch_symbols = rx_pcfich(frame_parms,
                               subframe,
-                              lte_ue_pdcch_vars[eNB_id],
+                              pdcch_vars[eNB_id],
                               mimo_mode);
 
   if (n_pdcch_symbols>3)
@@ -1879,24 +1879,24 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
   printf("demapping: subframe %d, mi %d, tdd_config %d\n",subframe,get_mi(frame_parms,subframe),frame_parms->tdd_config);
 #endif
 
-  pdcch_demapping(lte_ue_pdcch_vars[eNB_id]->llr,
-                  lte_ue_pdcch_vars[eNB_id]->wbar,
+  pdcch_demapping(pdcch_vars[eNB_id]->llr,
+                  pdcch_vars[eNB_id]->wbar,
                   frame_parms,
                   n_pdcch_symbols,
                   get_mi(frame_parms,subframe));
 
   pdcch_deinterleaving(frame_parms,
-                       (uint16_t*)lte_ue_pdcch_vars[eNB_id]->e_rx,
-                       lte_ue_pdcch_vars[eNB_id]->wbar,
+                       (uint16_t*)pdcch_vars[eNB_id]->e_rx,
+                       pdcch_vars[eNB_id]->wbar,
                        n_pdcch_symbols,
                        mi);
 
   pdcch_unscrambling(frame_parms,
                      subframe,
-                     lte_ue_pdcch_vars[eNB_id]->e_rx,
+                     pdcch_vars[eNB_id]->e_rx,
                      get_nCCE(n_pdcch_symbols,frame_parms,mi)*72);
 
-  lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols = n_pdcch_symbols;
+  pdcch_vars[eNB_id]->num_pdcch_symbols = n_pdcch_symbols;
 
   return(0);
 }
@@ -2356,7 +2356,7 @@ uint8_t generate_dci_top_emul(PHY_VARS_eNB *phy_vars_eNB,
   LTE_eNB_DLSCH_t *dlsch_eNB;
   uint8_t num_pdcch_symbols = get_num_pdcch_symbols(num_ue_spec_dci+num_common_dci,
                               dci_alloc,
-                              &phy_vars_eNB->lte_frame_parms,
+                              &phy_vars_eNB->frame_parms,
                               subframe);
   eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].cntl.cfi=num_pdcch_symbols;
 
@@ -2542,8 +2542,8 @@ uint16_t get_nCCE_mac(uint8_t Mod_id,uint8_t CC_id,int num_pdcch_symbols,int sub
 
   // check for eNB only !
   return(get_nCCE(num_pdcch_symbols,
-		  &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,
-		  get_mi(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,subframe))); 
+		  &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,
+		  get_mi(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,subframe))); 
 }
 
 
@@ -2647,7 +2647,7 @@ int get_nCCE_offset_l1(int *CCE_table,
 }
 
 
-void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
+void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
 			     int do_common,
 			     uint8_t subframe,
                              DCI_ALLOC_t *dci_alloc,
@@ -2676,7 +2676,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
   unsigned int Yk,nb_candidates = 0,i,m;
   unsigned int CCEmap_cand;
 
-  nCCE = get_nCCE(lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,frame_parms,mi);
+  nCCE = get_nCCE(pdcch_vars[eNB_id]->num_pdcch_symbols,frame_parms,mi);
 
   if (nCCE > get_nCCE(3,frame_parms,1))
     return;
@@ -2691,7 +2691,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
     // 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)lte_ue_pdcch_vars[eNB_id]->crnti;
+    Yk = (unsigned int)pdcch_vars[eNB_id]->crnti;
 
     for (i=0; i<=subframe; i++)
       Yk = (Yk*39827)%65537;
@@ -2777,7 +2777,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
 
       dci_decoding(sizeof_bits,
                    L,
-                   &lte_ue_pdcch_vars[eNB_id]->e_rx[CCEind*72],
+                   &pdcch_vars[eNB_id]->e_rx[CCEind*72],
                    dci_decoded_output);
       /*
         for (i=0;i<3+(sizeof_bits>>3);i++)
@@ -2790,7 +2790,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
 
       if (((L>1) && ((crc == si_rnti)||
                      (crc == ra_rnti)))||
-          (crc == lte_ue_pdcch_vars[eNB_id]->crnti))   {
+          (crc == pdcch_vars[eNB_id]->crnti))   {
         dci_alloc[*dci_cnt].dci_length = sizeof_bits;
         dci_alloc[*dci_cnt].rnti       = crc;
         dci_alloc[*dci_cnt].L          = L;
@@ -2826,28 +2826,28 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
         } else if (crc==ra_rnti) {
           dci_alloc[*dci_cnt].format     = format_ra;
           // store first nCCE of group for PUCCH transmission of ACK/NAK
-          lte_ue_pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
+          pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
           *dci_cnt = *dci_cnt+1;
-        } else if (crc==lte_ue_pdcch_vars[eNB_id]->crnti) {
+        } else if (crc==pdcch_vars[eNB_id]->crnti) {
 
           if ((format_c == format0)&&((dci_decoded_output[0]&0x80)==0)) {// check if pdu is format 0 or 1A
             if (*format0_found == 0) {
               dci_alloc[*dci_cnt].format     = format0;
               *format0_found = 1;
               *dci_cnt = *dci_cnt+1;
-              lte_ue_pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
+              pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
             }
           } else if (format_c == format0) { // this is a format 1A DCI
             dci_alloc[*dci_cnt].format     = format1A;
             *dci_cnt = *dci_cnt+1;
-            lte_ue_pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
+            pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
           } else {
             // store first nCCE of group for PUCCH transmission of ACK/NAK
             if (*format_c_found == 0) {
               dci_alloc[*dci_cnt].format     = format_c;
               *dci_cnt = *dci_cnt+1;
               *format_c_found = 1;
-              lte_ue_pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
+              pdcch_vars[eNB_id]->nCCE[subframe]=CCEind;
             }
           }
         }
@@ -2881,14 +2881,14 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,
 
 #endif
 
-        //  if (crc==lte_ue_pdcch_vars[eNB_id]->crnti)
+        //  if (crc==pdcch_vars[eNB_id]->crnti)
         //    return;
       } // rnti match
     }  // CCEmap_cand == 0
   } // candidate loop
 }
 
-uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
+uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                                 DCI_ALLOC_t *dci_alloc,
                                 int do_common,
                                 int16_t eNB_id,
@@ -2897,12 +2897,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
   uint8_t  dci_cnt=0,old_dci_cnt=0;
   uint32_t CCEmap0=0,CCEmap1=0,CCEmap2=0;
-  LTE_UE_PDCCH **lte_ue_pdcch_vars = phy_vars_ue->lte_ue_pdcch_vars;
-  LTE_DL_FRAME_PARMS *frame_parms  = &phy_vars_ue->lte_frame_parms;
-  uint8_t mi = get_mi(&phy_vars_ue->lte_frame_parms,subframe);
+  LTE_UE_PDCCH **pdcch_vars = ue->pdcch_vars;
+  LTE_DL_FRAME_PARMS *frame_parms  = &ue->frame_parms;
+  uint8_t mi = get_mi(&ue->frame_parms,subframe);
   uint16_t ra_rnti=99;
   uint8_t format0_found=0,format_c_found=0;
-  uint8_t tmode = phy_vars_ue->transmission_mode[eNB_id];
+  uint8_t tmode = ue->transmission_mode[eNB_id];
   uint8_t frame_type = frame_parms->frame_type;
   uint8_t format1A_size_bits=0,format1A_size_bytes=0;
   uint8_t format1C_size_bits=0,format1C_size_bytes=0;
@@ -3107,12 +3107,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
     printf("[DCI search] doing common search/format0 aggregation 4\n");
 #endif
 
-    if (phy_vars_ue->prach_resources[eNB_id])
-      ra_rnti = phy_vars_ue->prach_resources[eNB_id]->ra_RNTI;
+    if (ue->prach_resources[eNB_id])
+      ra_rnti = ue->prach_resources[eNB_id]->ra_RNTI;
 
     // First check common search spaces at aggregation 4 (SI_RNTI and RA_RNTI format 0/1A),
     // and UE_SPEC format0 (PUSCH) too while we're at it
-    dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe,
+    dci_decoding_procedure0(pdcch_vars,1,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3138,7 +3138,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     // Now check common search spaces at aggregation 4 (SI_RNTI and RA_RNTI and C-RNTI format 1C),
     // and UE_SPEC format0 (PUSCH) too while we're at it
-    dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe,
+    dci_decoding_procedure0(pdcch_vars,1,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3168,7 +3168,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 #ifdef DEBUG_DCI_DECODING
     printf("[DCI search] doing common search/format0 aggregation 8\n");
 #endif
-    dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe,
+    dci_decoding_procedure0(pdcch_vars,1,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3194,7 +3194,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     // Now check common search spaces at aggregation 8 (SI_RNTI and RA_RNTI and C-RNTI format 1C),
     // and UE_SPEC format0 (PUSCH) too while we're at it
-    dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe,
+    dci_decoding_procedure0(pdcch_vars,1,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3217,15 +3217,15 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
   }
 
-  if (phy_vars_ue->UE_mode[eNB_id] <= PRACH)
+  if (ue->UE_mode[eNB_id] <= PRACH)
     return(dci_cnt);
 
-  if (phy_vars_ue->prach_resources[eNB_id])
-    ra_rnti = phy_vars_ue->prach_resources[eNB_id]->ra_RNTI;
+  if (ue->prach_resources[eNB_id])
+    ra_rnti = ue->prach_resources[eNB_id]->ra_RNTI;
 
   // Now check UE_SPEC format0/1A ue_spec search spaces at aggregation 8
   //  printf("[DCI search] Format 0/1A aggregation 8\n");
-  dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+  dci_decoding_procedure0(pdcch_vars,0,
                           subframe,
                           dci_alloc,
                           eNB_id,
@@ -3252,7 +3252,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
   //  printf("[DCI search] Format 0 aggregation 4\n");
   // Now check UE_SPEC format 0 search spaces at aggregation 4
-  dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+  dci_decoding_procedure0(pdcch_vars,0,
                           subframe,
                           dci_alloc,
                           eNB_id,
@@ -3283,7 +3283,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
   //  printf("[DCI search] Format 0 aggregation 2\n");
   // Now check UE_SPEC format 0 search spaces at aggregation 2
-  dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+  dci_decoding_procedure0(pdcch_vars,0,
                           subframe,
                           dci_alloc,
                           eNB_id,
@@ -3310,7 +3310,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
   //  printf("[DCI search] Format 0 aggregation 4\n");
   // Now check UE_SPEC format 0 search spaces at aggregation 1
-  dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+  dci_decoding_procedure0(pdcch_vars,0,
                           subframe,
                           dci_alloc,
                           eNB_id,
@@ -3342,7 +3342,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
   if (tmode < 3) {
     // Now check UE_SPEC format 1 search spaces at aggregation 1
     old_dci_cnt=dci_cnt;
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,subframe,
+    dci_decoding_procedure0(pdcch_vars,0,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3371,7 +3371,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     // Now check UE_SPEC format 1 search spaces at aggregation 2
     old_dci_cnt=dci_cnt;
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,subframe,
+    dci_decoding_procedure0(pdcch_vars,0,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3401,7 +3401,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     // Now check UE_SPEC format 1 search spaces at aggregation 4
     old_dci_cnt=dci_cnt;
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,subframe,
+    dci_decoding_procedure0(pdcch_vars,0,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3431,7 +3431,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
     //#ifdef ALL_AGGREGATION
     // Now check UE_SPEC format 1 search spaces at aggregation 8
     old_dci_cnt=dci_cnt;
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,subframe,
+    dci_decoding_procedure0(pdcch_vars,0,subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
@@ -3463,7 +3463,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
 
     // Now check UE_SPEC format 2A_2A search spaces at aggregation 1
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3492,7 +3492,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2 search spaces at aggregation 2
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3521,7 +3521,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 4
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3551,7 +3551,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     //#ifdef ALL_AGGREGATION
     // Now check UE_SPEC format 2_2A search spaces at aggregation 8
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3575,7 +3575,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
   } else if (tmode == 4) {
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 1
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3604,7 +3604,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2 search spaces at aggregation 2
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3633,7 +3633,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 4
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3663,7 +3663,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 
     //#ifdef ALL_AGGREGATION
     // Now check UE_SPEC format 2_2A search spaces at aggregation 8
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3690,7 +3690,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 #ifdef DEBUG_DCI_DECODING
     LOG_I(PHY," MU-MIMO check UE_SPEC format 1E_2A_M10PRB\n");
 #endif
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3720,7 +3720,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces aggregation 2
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3749,7 +3749,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces aggregation 4
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3780,7 +3780,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
     //#ifdef ALL_AGGREGATION
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces at aggregation 8
-    dci_decoding_procedure0(lte_ue_pdcch_vars,0,
+    dci_decoding_procedure0(pdcch_vars,0,
                             subframe,
                             dci_alloc,
                             eNB_id,
@@ -3816,7 +3816,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
 }
 
 #ifdef PHY_ABSTRACTION
-uint16_t dci_decoding_procedure_emul(LTE_UE_PDCCH **lte_ue_pdcch_vars,
+uint16_t dci_decoding_procedure_emul(LTE_UE_PDCCH **pdcch_vars,
                                      uint8_t num_ue_spec_dci,
                                      uint8_t num_common_dci,
                                      DCI_ALLOC_t *dci_alloc_tx,
@@ -3831,10 +3831,10 @@ uint16_t dci_decoding_procedure_emul(LTE_UE_PDCCH **lte_ue_pdcch_vars,
   LOG_D(PHY,"[DCI][EMUL] : num_common_dci %d\n",num_common_dci);
 
   for (i=num_common_dci; i<(num_ue_spec_dci+num_common_dci); i++) {
-    LOG_D(PHY,"[DCI][EMUL] Checking dci %d => %x format %d (bit 0 %d)\n",i,lte_ue_pdcch_vars[eNB_id]->crnti,dci_alloc_tx[i].format,
+    LOG_D(PHY,"[DCI][EMUL] Checking dci %d => %x format %d (bit 0 %d)\n",i,pdcch_vars[eNB_id]->crnti,dci_alloc_tx[i].format,
           dci_alloc_tx[i].dci_pdu[0]&0x80);
 
-    if (dci_alloc_tx[i].rnti == lte_ue_pdcch_vars[eNB_id]->crnti) {
+    if (dci_alloc_tx[i].rnti == pdcch_vars[eNB_id]->crnti) {
       memcpy(dci_alloc_rx+dci_cnt,dci_alloc_tx+i,sizeof(DCI_ALLOC_t));
       dci_cnt++;
     }
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index a163225f03c77dac72e1d808221c577e6bc53dbe..90c67ed70fe817810cb7d58c0893864f2ea287c9 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -6235,7 +6235,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
                                       uint16_t rnti,
                                       uint8_t subframe,
                                       DCI_format_t dci_format,
-                                      PHY_VARS_UE *phy_vars_ue,
+                                      PHY_VARS_UE *ue,
                                       uint16_t si_rnti,
                                       uint16_t ra_rnti,
                                       uint16_t p_rnti,
@@ -6245,13 +6245,13 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 {
 
   uint8_t harq_pid;
-  uint8_t transmission_mode = phy_vars_ue->transmission_mode[eNB_id];
-  ANFBmode_t AckNackFBMode = phy_vars_ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
-  LTE_UE_ULSCH_t *ulsch = phy_vars_ue->ulsch_ue[eNB_id];
-  //  LTE_UE_DLSCH_t **dlsch = phy_vars_ue->dlsch_ue[0];
-  PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
-  //  uint32_t current_dlsch_cqi = phy_vars_ue->current_dlsch_cqi[eNB_id];
+  uint8_t transmission_mode = ue->transmission_mode[eNB_id];
+  ANFBmode_t AckNackFBMode = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
+  LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
+  //  LTE_UE_DLSCH_t **dlsch = ue->dlsch[0];
+  PHY_MEASUREMENTS *meas = &ue->measurements;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
+  //  uint32_t current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id];
 
   uint32_t cqi_req;
   uint32_t dai=0;
@@ -6269,12 +6269,12 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
       harq_pid = 0;
     else
       harq_pid = subframe2harq_pid(frame_parms,
-                                   pdcch_alloc2ul_frame(frame_parms,phy_vars_ue->frame_rx,subframe),
+                                   pdcch_alloc2ul_frame(frame_parms,ue->frame_rx,subframe),
                                    pdcch_alloc2ul_subframe(frame_parms,subframe));
 
     if (harq_pid == 255) {
       LOG_E(PHY, "frame %d, subframe %d, rnti %x, format %d: illegal harq_pid!\n",
-            phy_vars_ue->frame_rx, subframe, rnti, dci_format);
+            ue->frame_rx, subframe, rnti, dci_format);
       return(-1);
     }
 
@@ -6401,7 +6401,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
     if (rballoc > RIV_max) {
       LOG_E(PHY,"frame %d, subframe %d, rnti %x, format %d: FATAL ERROR: generate_ue_ulsch_params_from_dci, rb_alloc > RIV_max\n",
-            phy_vars_ue->frame_rx, subframe, rnti, dci_format);
+            ue->frame_rx, subframe, rnti, dci_format);
       return(-1);
     }
 
@@ -6414,18 +6414,18 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
     ulsch->harq_processes[harq_pid]->TPC                                   = TPC;
 
-    if (phy_vars_ue->ul_power_control_dedicated[eNB_id].accumulationEnabled == 1) {
+    if (ue->ul_power_control_dedicated[eNB_id].accumulationEnabled == 1) {
       LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n",
-            phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_rx,subframe,ulsch->f_pusch,
-            delta_PUSCH_acc[phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC],
-            phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC);
-      ulsch->f_pusch += delta_PUSCH_acc[phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC];
+            ue->Mod_id,harq_pid,ue->frame_rx,subframe,ulsch->f_pusch,
+            delta_PUSCH_acc[ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC],
+            ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC);
+      ulsch->f_pusch += delta_PUSCH_acc[ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC];
     } else {
       LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d: f_pusch (ABS) %d, adjusting to %d (TPC %d)\n",
-            phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_rx,subframe,ulsch->f_pusch,
-            delta_PUSCH_abs[phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC],
-            phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC);
-      ulsch->f_pusch = delta_PUSCH_abs[phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TPC];
+            ue->Mod_id,harq_pid,ue->frame_rx,subframe,ulsch->f_pusch,
+            delta_PUSCH_abs[ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC],
+            ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC);
+      ulsch->f_pusch = delta_PUSCH_abs[ue->ulsch[eNB_id]->harq_processes[harq_pid]->TPC];
     }
 
     if (ulsch->harq_processes[harq_pid]->first_tx==1) {
@@ -6495,7 +6495,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
         // The aperiodic CQI reporting mode is fixed for every transmission mode instead of being configured by higher layer signaling
       case 1:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6516,7 +6516,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else  if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6537,7 +6537,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_nopmi;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6563,7 +6563,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 2:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6584,7 +6584,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6605,7 +6605,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_nopmi;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6631,7 +6631,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 3:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6652,7 +6652,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6673,7 +6673,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_nopmi;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6699,7 +6699,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 4:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6720,7 +6720,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank1_2A_1_5MHz;
             break;
@@ -6741,7 +6741,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = wideband_cqi_rank1_2A;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank2_2A_1_5MHz;
             break;
@@ -6767,7 +6767,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 5:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6788,7 +6788,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank1_2A_1_5MHz;
             break;
@@ -6809,7 +6809,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = wideband_cqi_rank1_2A;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank2_2A_1_5MHz;
             break;
@@ -6835,7 +6835,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 6:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6856,7 +6856,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank1_2A_1_5MHz;
             break;
@@ -6877,7 +6877,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = wideband_cqi_rank1_2A;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_wideband_cqi_rank2_2A_1_5MHz;
             break;
@@ -6903,7 +6903,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
       case 7:
         if ((rnti >= cba_rnti) && (rnti < p_rnti)) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz;
             break;
@@ -6924,7 +6924,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_mcs_CBA;
           ulsch->o_RI[0]                             = 0;
         } else if(meas->rank[eNB_id] == 0) {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6945,7 +6945,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
           ulsch->uci_format                          = HLC_subband_cqi_nopmi;
           ulsch->o_RI[0]                             = 0;
         } else {
-          switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+          switch (ue->frame_parms.N_RB_DL) {
           case 6:
             ulsch->O                                   = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
             break;
@@ -6979,23 +6979,13 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
       ulsch->uci_format                          = HLC_subband_cqi_nopmi;
     }
 
-    print_CQI(ulsch->o,ulsch->uci_format,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL);
+    print_CQI(ulsch->o,ulsch->uci_format,eNB_id,ue->frame_parms.N_RB_DL);
 
-    //FK: moved this part to ulsch_coding to be more recent
-    /*
-      fill_CQI(ulsch->o,ulsch->uci_format,meas,eNB_id,transmission_mode);
-      print_CQI(ulsch->o,ulsch->uci_format,eNB_id);
-
-      // save PUSCH pmi for later (transmission modes 4,5,6)
-      // msg("ulsch: saving pmi for DL %x\n",pmi2hex_2Ar1(((wideband_cqi_rank1_2A_5MHz *)ulsch->o)->pmi));
-      dlsch[0]->pmi_alloc = ((wideband_cqi_rank1_2A_5MHz *)ulsch->o)->pmi;
-    */
 
-    // check this (see comment in generate_ue_ulsch_params_from_dci)
     if (frame_parms->frame_type == FDD) {
       int dl_subframe = (subframe<4) ? (subframe+6) : (subframe-4);
 
-      if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission
+      if (ue->dlsch[eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission
         ulsch->harq_processes[harq_pid]->O_ACK = 1;
       } else {
         ulsch->harq_processes[harq_pid]->O_ACK = 0;
@@ -7009,9 +6999,9 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
       //      ulsch->harq_processes[harq_pid]->V_UL_DAI = dai+1;
     }
 
-    ulsch->beta_offset_cqi_times8                = beta_cqi[phy_vars_ue->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index];//18;
-    ulsch->beta_offset_ri_times8                 = beta_ri[phy_vars_ue->pusch_config_dedicated[eNB_id].betaOffset_RI_Index];//10;
-    ulsch->beta_offset_harqack_times8            = beta_ack[phy_vars_ue->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index];//16;
+    ulsch->beta_offset_cqi_times8                = beta_cqi[ue->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index];//18;
+    ulsch->beta_offset_ri_times8                 = beta_ri[ue->pusch_config_dedicated[eNB_id].betaOffset_RI_Index];//10;
+    ulsch->beta_offset_harqack_times8            = beta_ack[ue->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index];//16;
 
     ulsch->Nsymb_pusch                             = 12-(frame_parms->Ncp<<1)-(use_srs==0?0:1);
     ulsch->srs_active                              = use_srs;
@@ -7044,8 +7034,8 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
       ulsch->harq_processes[harq_pid]->round = 0;
 
       // a Ndi=1 automatically acknowledges previous PUSCH transmission
-      if (phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1)
-        phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] = 0;
+      if (ue->ulsch_Msg3_active[eNB_id] == 1)
+        ue->ulsch_Msg3_active[eNB_id] = 0;
     } else {
       //      printf("Ndi = 0 : Setting RVidx from mcs %d\n",((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->mcs);
       if (mcs>28) ulsch->harq_processes[harq_pid]->rvidx = mcs - 28;
@@ -7054,7 +7044,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
     }
 
     LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d, subframe %d : Programming PUSCH with n_DMRS2 %d (cshift %d), nb_rb %d, first_rb %d, mcs %d, round %d, rv %d\n",
-          phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_rx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift,ulsch->harq_processes[harq_pid]->nb_rb,ulsch->harq_processes[harq_pid]->first_rb,
+          ue->Mod_id,harq_pid,ue->frame_rx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift,ulsch->harq_processes[harq_pid]->nb_rb,ulsch->harq_processes[harq_pid]->first_rb,
           ulsch->harq_processes[harq_pid]->mcs,ulsch->harq_processes[harq_pid]->round,ulsch->harq_processes[harq_pid]->rvidx);
 
     // ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
@@ -7081,7 +7071,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
     return(0);
   } else {
     LOG_E(PHY,"frame %d, subframe %d: FATAL ERROR, generate_ue_ulsch_params_from_dci, Illegal dci_format %d\n",
-          phy_vars_ue->frame_rx, subframe,dci_format);
+          ue->frame_rx, subframe,dci_format);
     return(-1);
   }
 
@@ -7089,10 +7079,10 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
 int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
                                        uint16_t rnti,
-                                       uint8_t sched_subframe,
+                                       uint8_t thread_id,
                                        DCI_format_t dci_format,
                                        uint8_t UE_id,
-                                       PHY_VARS_eNB *phy_vars_eNB,
+                                       PHY_VARS_eNB *eNB,
                                        uint16_t si_rnti,
                                        uint16_t ra_rnti,
                                        uint16_t p_rnti,
@@ -7102,11 +7092,11 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
 
   uint8_t harq_pid;
   uint32_t rb_alloc;
-  uint8_t transmission_mode=phy_vars_eNB->transmission_mode[UE_id];
-  ANFBmode_t AckNackFBMode = phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode;
-  LTE_eNB_ULSCH_t *ulsch=phy_vars_eNB->ulsch_eNB[UE_id];
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
+  uint8_t transmission_mode=eNB->transmission_mode[UE_id];
+  ANFBmode_t AckNackFBMode = eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode;
+  LTE_eNB_ULSCH_t *ulsch=eNB->ulsch[UE_id];
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  int subframe = eNB->proc[thread_id].subframe_tx;
 
   uint32_t cqi_req = 0;
   uint32_t dai = 0;
@@ -7127,11 +7117,11 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
 
     harq_pid = subframe2harq_pid(frame_parms,
                                  pdcch_alloc2ul_frame(frame_parms,
-						      phy_vars_eNB->proc[sched_subframe].frame_tx,
+						      eNB->proc[thread_id].frame_tx,
 						      subframe),
                                  pdcch_alloc2ul_subframe(frame_parms,subframe));
     
-    //    printf("eNB: sched_subframe %d, subframe %d, frame_tx %d\n",sched_subframe,subframe,phy_vars_eNB->proc[sched_subframe].frame_tx);
+    //    printf("eNB: thread_id %d, subframe %d, frame_tx %d\n",thread_id,subframe,eNB->proc[thread_id].frame_tx);
 
     switch (frame_parms->N_RB_DL) {
     case 6:
@@ -7607,7 +7597,7 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
     if (frame_parms->frame_type == FDD) {
       int dl_subframe = (subframe<4) ? (subframe+6) : (subframe-4);
 
-      if (phy_vars_eNB->dlsch_eNB[UE_id][0]->subframe_tx[dl_subframe]>0) { // we have downlink transmission
+      if (eNB->dlsch[UE_id][0]->subframe_tx[dl_subframe]>0) { // we have downlink transmission
         ulsch->harq_processes[harq_pid]->O_ACK = 1;
       } else {
         ulsch->harq_processes[harq_pid]->O_ACK = 0;
@@ -7621,9 +7611,9 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
       ulsch->harq_processes[harq_pid]->V_UL_DAI = dai+1;
     }
 
-    ulsch->beta_offset_cqi_times8                = beta_cqi[phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index];//18;
-    ulsch->beta_offset_ri_times8                 = beta_ri[phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index];//10;
-    ulsch->beta_offset_harqack_times8            = beta_ack[phy_vars_eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index];//16;
+    ulsch->beta_offset_cqi_times8                = beta_cqi[eNB->pusch_config_dedicated[UE_id].betaOffset_CQI_Index];//18;
+    ulsch->beta_offset_ri_times8                 = beta_ri[eNB->pusch_config_dedicated[UE_id].betaOffset_RI_Index];//10;
+    ulsch->beta_offset_harqack_times8            = beta_ack[eNB->pusch_config_dedicated[UE_id].betaOffset_ACK_Index];//16;
 
     ulsch->harq_processes[harq_pid]->Nsymb_pusch                             = 12-(frame_parms->Ncp<<1)-(use_srs==0?0:1);
     ulsch->harq_processes[harq_pid]->srs_active                            = use_srs;
@@ -7649,7 +7639,7 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
 
 
     LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, subframe %d : Programming PUSCH with n_DMRS2 %d (cshift %d)\n",
-          phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift);
+          eNB->Mod_id,harq_pid,eNB->proc[thread_id].frame_tx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift);
 
 
 
@@ -7716,15 +7706,15 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
 }
 
 
-double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id)
+double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
 {
-  uint8_t transmission_mode = phy_vars_ue->transmission_mode[eNB_id];
-  PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
-  LTE_DL_FRAME_PARMS *frame_parms =  &phy_vars_ue->lte_frame_parms;
-  int32_t **dl_channel_est = phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id];
+  uint8_t transmission_mode = ue->transmission_mode[eNB_id];
+  PHY_MEASUREMENTS *meas = &ue->measurements;
+  LTE_DL_FRAME_PARMS *frame_parms =  &ue->frame_parms;
+  int32_t **dl_channel_est = ue->common_vars.dl_ch_estimates[eNB_id];
   double *s_dB;
-  s_dB = phy_vars_ue->sinr_CQI_dB;
-  //  LTE_UE_ULSCH_t *ulsch  = phy_vars_ue->ulsch_ue[eNB_id];
+  s_dB = ue->sinr_CQI_dB;
+  //  LTE_UE_ULSCH_t *ulsch  = ue->ulsch[eNB_id];
   //for the calculation of SINR_eff for CQI calculation
   int count,a_rx,a_tx;
   double abs_channel=0;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index 2e8d70102ffec29619a46849b7d3d80cbae43f86..0739d772f5a2eeea0b321d6f57c84218c81dbc16 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -188,7 +188,8 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
 #ifdef DEBUG_DLSCH_DECODING
   uint16_t i;
 #endif
-#ifdef __AVX2__
+  //#ifdef __AVX2__
+#if 0
   int Kr_last,skipped_last=0;
   uint8_t (*tc_2cw)(int16_t *y,
 		    int16_t *y2,
@@ -249,7 +250,8 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
   }
 
   if (llr8_flag == 0) {
-#ifdef __AVX2__
+    //#ifdef __AVX2__
+#if 0
     tc_2cw = phy_threegpplte_turbo_decoder16avx2;
 #endif
     tc = phy_threegpplte_turbo_decoder16;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index 19ce6b9edc8ed2879c26fbbe7acb2aae35507398..c41262727f37c47ca2e8da1786e05498845654b6 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -78,10 +78,10 @@ unsigned char offset_mumimo_llr_drange[29][3]= {{0, 6, 5},{0, 4, 5},{0, 4, 5},{0
 extern void print_shorts(char *s,int16_t *x);
 
 
-int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
+int rx_pdsch(PHY_VARS_UE *ue,
              PDSCH_t type,
              unsigned char eNB_id,
-             unsigned char eNB_id_i, //if this == phy_vars_ue->n_connected_eNB, we assume MU interference
+             unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference
              uint8_t subframe,
              unsigned char symbol,
              unsigned char first_symbol_flag,
@@ -90,11 +90,11 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
              unsigned char harq_pid)
 {
 
-  LTE_UE_COMMON *lte_ue_common_vars  = &phy_vars_ue->lte_ue_common_vars;
-  LTE_UE_PDSCH **lte_ue_pdsch_vars;
-  LTE_DL_FRAME_PARMS *frame_parms    = &phy_vars_ue->lte_frame_parms;
-  PHY_MEASUREMENTS *phy_measurements = &phy_vars_ue->PHY_measurements;
-  LTE_UE_DLSCH_t   **dlsch_ue;
+  LTE_UE_COMMON *common_vars  = &ue->common_vars;
+  LTE_UE_PDSCH **pdsch_vars;
+  LTE_DL_FRAME_PARMS *frame_parms    = &ue->frame_parms;
+  PHY_MEASUREMENTS *phy_measurements = &ue->measurements;
+  LTE_UE_DLSCH_t   **dlsch;
 
   unsigned char aatx,aarx;
   unsigned short nb_rb;
@@ -104,26 +104,26 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
   switch (type) {
   case SI_PDSCH:
-    lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id];
-    dlsch_ue          = &phy_vars_ue->dlsch_ue_SI[eNB_id];
-    dlsch0_harq       = dlsch_ue[0]->harq_processes[harq_pid];
+    pdsch_vars = &ue->pdsch_vars_SI[eNB_id];
+    dlsch          = &ue->dlsch_SI[eNB_id];
+    dlsch0_harq       = dlsch[0]->harq_processes[harq_pid];
     break;
 
   case RA_PDSCH:
-    lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars_ra[eNB_id];
-    dlsch_ue          = &phy_vars_ue->dlsch_ue_ra[eNB_id];
-    dlsch0_harq       = dlsch_ue[0]->harq_processes[harq_pid];
+    pdsch_vars = &ue->pdsch_vars_ra[eNB_id];
+    dlsch          = &ue->dlsch_ra[eNB_id];
+    dlsch0_harq       = dlsch[0]->harq_processes[harq_pid];
     break;
 
   case PDSCH:
-    lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars[eNB_id];
-    dlsch_ue          = phy_vars_ue->dlsch_ue[eNB_id];
-    dlsch0_harq       = dlsch_ue[0]->harq_processes[harq_pid];
-    dlsch1_harq       = dlsch_ue[1]->harq_processes[harq_pid];
+    pdsch_vars = &ue->pdsch_vars[eNB_id];
+    dlsch          = ue->dlsch[eNB_id];
+    dlsch0_harq       = dlsch[0]->harq_processes[harq_pid];
+    dlsch1_harq       = dlsch[1]->harq_processes[harq_pid];
     break;
 
   default:
-    LOG_E(PHY,"[UE %d][FATAL] Frame %d subframe %d: Unknown PDSCH format %d\n",phy_vars_ue->frame_rx,subframe,type);
+    LOG_E(PHY,"[UE %d][FATAL] Frame %d subframe %d: Unknown PDSCH format %d\n",ue->frame_rx,subframe,type);
     return(-1);
     break;
   }
@@ -134,23 +134,23 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     return(-1);
   }
 
-  if (!lte_ue_common_vars) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null lte_ue_common_vars\n");
+  if (!common_vars) {
+    LOG_W(PHY,"dlsch_demodulation.c: Null common_vars\n");
     return(-1);
   }
 
-  if (!dlsch_ue[0]) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null dlsch_ue pointer\n");
+  if (!dlsch[0]) {
+    LOG_W(PHY,"dlsch_demodulation.c: Null dlsch pointer\n");
     return(-1);
   }
 
-  if (!lte_ue_pdsch_vars) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null lte_ue_pdsch_vars pointer\n");
+  if (!pdsch_vars) {
+    LOG_W(PHY,"dlsch_demodulation.c: Null pdsch_vars pointer\n");
     return(-1);
   }
 
   if (!frame_parms) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null lte_frame_parms\n");
+    LOG_W(PHY,"dlsch_demodulation.c: Null frame_parms\n");
     return(-1);
   }
 
@@ -163,84 +163,84 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
   if (frame_parms->nb_antennas_tx_eNB>1) {
 #ifdef DEBUG_DLSCH_MOD
-    LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]);
+    LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch[0],dlsch0_harq->rb_alloc_even[0]);
 #endif
-    nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
-                                   lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                                   lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                                   lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+    nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
+                                   common_vars->dl_ch_estimates[eNB_id],
+                                   pdsch_vars[eNB_id]->rxdataF_ext,
+                                   pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                                    dlsch0_harq->pmi_alloc,
-                                   lte_ue_pdsch_vars[eNB_id]->pmi_ext,
+                                   pdsch_vars[eNB_id]->pmi_ext,
                                    rballoc,
                                    symbol,
                                    subframe,
-                                   phy_vars_ue->high_speed_flag,
+                                   ue->high_speed_flag,
                                    frame_parms);
 
     if (dual_stream_flag==1) {
-      if (eNB_id_i<phy_vars_ue->n_connected_eNB)
-        nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
-                                       lte_ue_common_vars->dl_ch_estimates[eNB_id_i],
-                                       lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                       lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+      if (eNB_id_i<ue->n_connected_eNB)
+        nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
+                                       common_vars->dl_ch_estimates[eNB_id_i],
+                                       pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                       pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                                        dlsch0_harq->pmi_alloc,
-                                       lte_ue_pdsch_vars[eNB_id_i]->pmi_ext,
+                                       pdsch_vars[eNB_id_i]->pmi_ext,
                                        rballoc,
                                        symbol,
                                        subframe,
-                                       phy_vars_ue->high_speed_flag,
+                                       ue->high_speed_flag,
                                        frame_parms);
       else
-        nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
-                                       lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                                       lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                       lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+        nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
+                                       common_vars->dl_ch_estimates[eNB_id],
+                                       pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                       pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                                        dlsch0_harq->pmi_alloc,
-                                       lte_ue_pdsch_vars[eNB_id_i]->pmi_ext,
+                                       pdsch_vars[eNB_id_i]->pmi_ext,
                                        rballoc,
                                        symbol,
                                        subframe,
-                                       phy_vars_ue->high_speed_flag,
+                                       ue->high_speed_flag,
                                        frame_parms);
     }
   } // if n_tx>1
   else {
-    nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                                     lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                                     lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                                     lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+    nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
+                                     common_vars->dl_ch_estimates[eNB_id],
+                                     pdsch_vars[eNB_id]->rxdataF_ext,
+                                     pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                                      dlsch0_harq->pmi_alloc,
-                                     lte_ue_pdsch_vars[eNB_id]->pmi_ext,
+                                     pdsch_vars[eNB_id]->pmi_ext,
                                      rballoc,
                                      symbol,
                                      subframe,
-                                     phy_vars_ue->high_speed_flag,
+                                     ue->high_speed_flag,
                                      frame_parms);
 
     if (dual_stream_flag==1) {
-      if (eNB_id_i<phy_vars_ue->n_connected_eNB)
-        nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                                         lte_ue_common_vars->dl_ch_estimates[eNB_id_i],
-                                         lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                         lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+      if (eNB_id_i<ue->n_connected_eNB)
+        nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
+                                         common_vars->dl_ch_estimates[eNB_id_i],
+                                         pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                         pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                                          dlsch0_harq->pmi_alloc,
-                                         lte_ue_pdsch_vars[eNB_id_i]->pmi_ext,
+                                         pdsch_vars[eNB_id_i]->pmi_ext,
                                          rballoc,
                                          symbol,
                                          subframe,
-                                         phy_vars_ue->high_speed_flag,
+                                         ue->high_speed_flag,
                                          frame_parms);
       
-        nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF,
-                                         lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                                         lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                         lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+        nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
+                                         common_vars->dl_ch_estimates[eNB_id],
+                                         pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                         pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                                          dlsch0_harq->pmi_alloc,
-                                         lte_ue_pdsch_vars[eNB_id_i]->pmi_ext,
+                                         pdsch_vars[eNB_id_i]->pmi_ext,
                                          rballoc,
                                          symbol,
                                          subframe,
-					 phy_vars_ue->high_speed_flag,
+					 ue->high_speed_flag,
                                          frame_parms);
     }
   } //else n_tx>1
@@ -253,14 +253,14 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
   /*
   // DL power control: Scaling of Channel estimates for PDSCH
-  dlsch_scale_channel(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+  dlsch_scale_channel(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
   frame_parms,
-  dlsch_ue,
+  dlsch,
   symbol,
   nb_rb);
   */
   if (first_symbol_flag==1) {
-    dlsch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+    dlsch_channel_level(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                         frame_parms,
                         avg,
                         symbol,
@@ -281,14 +281,14 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     //  avgs = cmax(avgs,avg[(aarx<<1)+aatx]);
 
 
-    lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2)+1;
+    pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2)+1;
     // + log2_approx(frame_parms->nb_antennas_tx_eNB-1) //-1 because log2_approx counts the number of bits
     //      + log2_approx(frame_parms->nb_antennas_rx-1);
 
     if ((dlsch0_harq->mimo_mode>=UNIFORM_PRECODING11) &&
         (dlsch0_harq->mimo_mode< DUALSTREAM_UNIFORM_PRECODING1) &&
         (dlsch0_harq->dl_power_off==1)) // we are in TM 6
-      lte_ue_pdsch_vars[eNB_id]->log2_maxh++;
+      pdsch_vars[eNB_id]->log2_maxh++;
 
     // this version here applies the factor .5 also to the extra terms. however, it does not work so well as the one above
     /* K = Nb_rx         in TM1
@@ -301,11 +301,11 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
       (dlsch0_harq->dl_power_off==1)) // we are in TM 6
       K *= frame_parms->nb_antennas_tx_eNB;
 
-      lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(K*avgs)/2);
+      pdsch_vars[eNB_id]->log2_maxh = (log2_approx(K*avgs)/2);
     */
 
 #ifdef DEBUG_PHY
-    LOG_D(PHY,"[DLSCH] log2_maxh = %d (%d,%d)\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh,avg[0],avgs);
+    LOG_D(PHY,"[DLSCH] log2_maxh = %d (%d,%d)\n",pdsch_vars[eNB_id]->log2_maxh,avg[0],avgs);
     LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
 #endif
   }
@@ -315,47 +315,47 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
   if (dlsch0_harq->mimo_mode<LARGE_CDD) {// SISO or ALAMOUTI
 
-    dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                               lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                               lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                               lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                               lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                               (aatx>1) ? lte_ue_pdsch_vars[eNB_id]->rho : NULL,
+    dlsch_channel_compensation(pdsch_vars[eNB_id]->rxdataF_ext,
+                               pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                               pdsch_vars[eNB_id]->dl_ch_mag0,
+                               pdsch_vars[eNB_id]->dl_ch_magb0,
+                               pdsch_vars[eNB_id]->rxdataF_comp0,
+                               (aatx>1) ? pdsch_vars[eNB_id]->rho : NULL,
                                frame_parms,
                                symbol,
                                first_symbol_flag,
                                dlsch0_harq->Qm,
                                nb_rb,
-                               lte_ue_pdsch_vars[eNB_id]->log2_maxh,
+                               pdsch_vars[eNB_id]->log2_maxh,
                                phy_measurements); // log2_maxh+I0_shift
 #ifdef DEBUG_PHY
 
     if (symbol==5)
-      write_output("rxF_comp_d.m","rxF_c_d",&lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+      write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
 
 #endif
 
     if ((dual_stream_flag==1) &&
-        (eNB_id_i<phy_vars_ue->n_connected_eNB)) {
+        (eNB_id_i<ue->n_connected_eNB)) {
       // get MF output for interfering stream
-      dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                 lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                 lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                                 lte_ue_pdsch_vars[eNB_id_i]->dl_ch_magb0,
-                                 lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                                 (aatx>1) ? lte_ue_pdsch_vars[eNB_id_i]->rho : NULL,
+      dlsch_channel_compensation(pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                 pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                 pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                                 pdsch_vars[eNB_id_i]->dl_ch_magb0,
+                                 pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                                 (aatx>1) ? pdsch_vars[eNB_id_i]->rho : NULL,
                                  frame_parms,
                                  symbol,
                                  first_symbol_flag,
                                  i_mod,
                                  nb_rb,
-                                 lte_ue_pdsch_vars[eNB_id]->log2_maxh,
+                                 pdsch_vars[eNB_id]->log2_maxh,
                                  phy_measurements); // log2_maxh+I0_shift
 #ifdef DEBUG_PHY
 
       if (symbol == 5) {
-        write_output("rxF_comp_d.m","rxF_c_d",&lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-        write_output("rxF_comp_i.m","rxF_c_i",&lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
       }
 
 #endif
@@ -364,29 +364,29 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
       dlsch_dual_stream_correlation(frame_parms,
                                     symbol,
                                     nb_rb,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                    pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                    pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                                    pdsch_vars[eNB_id]->log2_maxh);
     }
   } else if (dlsch0_harq->mimo_mode == LARGE_CDD) { // TM3
     //   LOG_I(PHY,"Running PDSCH RX for TM3\n");
     if (frame_parms->nb_antennas_tx_eNB == 2) {
       if (first_symbol_flag==1) {
         // effective channel of desired user is always stronger than interfering eff. channel
-        dlsch_channel_level_TM3(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+        dlsch_channel_level_TM3(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                                 frame_parms,
                                 avg, symbol, nb_rb);
 
         //  LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->mcs>>1)-1]);
         avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->Qm>>1)-1];
 
-        lte_ue_pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
-        //  printf("log2_maxh =%d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+        pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
+        //  printf("log2_maxh =%d\n",pdsch_vars[eNB_id]->log2_maxh);
       }
 
       dlsch_channel_compensation_TM3(frame_parms,
-                                     lte_ue_pdsch_vars[eNB_id],
+                                     pdsch_vars[eNB_id],
                                      phy_measurements,
                                      eNB_id,
                                      symbol,
@@ -394,23 +394,23 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                      dlsch1_harq->Qm,
                                      dlsch0_harq->round,
                                      nb_rb,
-                                     lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                                     pdsch_vars[eNB_id]->log2_maxh);
       // compute correlation between signal and interference channels (rho12 and rho21)
       dlsch_dual_stream_correlation(frame_parms,
                                     symbol,
                                     nb_rb,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    &(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                    &(pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
+                                    pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                                    pdsch_vars[eNB_id]->log2_maxh);
       dlsch_dual_stream_correlation(frame_parms,
                                     symbol,
                                     nb_rb,
-                                    &(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->log2_maxh);
-      //printf("TM3 log2_maxh : %d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                                    &(pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
+                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                    pdsch_vars[eNB_id]->dl_ch_rho2_ext,
+                                    pdsch_vars[eNB_id]->log2_maxh);
+      //printf("TM3 log2_maxh : %d\n",pdsch_vars[eNB_id]->log2_maxh);
 
     } else {
       LOG_E(PHY, "only 2 tx antennas supported for TM3\n");
@@ -418,90 +418,90 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
   } else if (dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) { // single-layer precoding (TM5, TM6), potentially TM4 (Single-codeword)
     //    printf("Channel compensation for precoding\n");
     //    if ((dual_stream_flag==1) && (eNB_id_i==NUMBER_OF_CONNECTED_eNB_MAX)) {
-    if ((dual_stream_flag==1) && (eNB_id_i==phy_vars_ue->n_connected_eNB)) {  // TM5 two-user
+    if ((dual_stream_flag==1) && (eNB_id_i==ue->n_connected_eNB)) {  // TM5 two-user
 
       // Scale the channel estimates for interfering stream
 
-      dlsch_scale_channel(lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+      dlsch_scale_channel(pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                           frame_parms,
-                          dlsch_ue,
+                          dlsch,
                           symbol,
                           nb_rb);
 
       /* compute new log2_maxh for effective channel */
       if (first_symbol_flag==1) {
         // effective channel of desired user is always stronger than interfering eff. channel
-        dlsch_channel_level_TM56(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, frame_parms, lte_ue_pdsch_vars[eNB_id]->pmi_ext, avg, symbol, nb_rb);
+        dlsch_channel_level_TM56(pdsch_vars[eNB_id]->dl_ch_estimates_ext, frame_parms, pdsch_vars[eNB_id]->pmi_ext, avg, symbol, nb_rb);
 
         //    LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1]);
         avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1];
 
-        lte_ue_pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
-        //printf("log1_maxh =%d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+        pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
+        //printf("log1_maxh =%d\n",pdsch_vars[eNB_id]->log2_maxh);
       }
 
-      dlsch_channel_compensation_TM56(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                                      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                                      lte_ue_pdsch_vars[eNB_id]->pmi_ext,
+      dlsch_channel_compensation_TM56(pdsch_vars[eNB_id]->rxdataF_ext,
+                                      pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                      pdsch_vars[eNB_id]->dl_ch_mag0,
+                                      pdsch_vars[eNB_id]->dl_ch_magb0,
+                                      pdsch_vars[eNB_id]->rxdataF_comp0,
+                                      pdsch_vars[eNB_id]->pmi_ext,
                                       frame_parms,
                                       phy_measurements,
                                       eNB_id,
                                       symbol,
                                       dlsch0_harq->Qm,
                                       nb_rb,
-                                      lte_ue_pdsch_vars[eNB_id]->log2_maxh,
+                                      pdsch_vars[eNB_id]->log2_maxh,
                                       dlsch0_harq->dl_power_off);
 
       // if interference source is MU interference, assume opposite precoder was used at eNB
 
       // calculate opposite PMI
       for (rb=0; rb<nb_rb; rb++) {
-        switch(lte_ue_pdsch_vars[eNB_id]->pmi_ext[rb]) {
+        switch(pdsch_vars[eNB_id]->pmi_ext[rb]) {
         case 0:
-          lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[rb]=1;
+          pdsch_vars[eNB_id_i]->pmi_ext[rb]=1;
           break;
 
         case 1:
-          lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[rb]=0;
+          pdsch_vars[eNB_id_i]->pmi_ext[rb]=0;
           break;
 
         case 2:
-          lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[rb]=3;
+          pdsch_vars[eNB_id_i]->pmi_ext[rb]=3;
           break;
 
         case 3:
-          lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[rb]=2;
+          pdsch_vars[eNB_id_i]->pmi_ext[rb]=2;
           break;
         }
 
         //  if (rb==0)
-        //    printf("pmi %d, pmi_i %d\n",lte_ue_pdsch_vars[eNB_id]->pmi_ext[rb],lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[rb]);
+        //    printf("pmi %d, pmi_i %d\n",pdsch_vars[eNB_id]->pmi_ext[rb],pdsch_vars[eNB_id_i]->pmi_ext[rb]);
 
       }
 
-      dlsch_channel_compensation_TM56(lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                      lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                      lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                                      lte_ue_pdsch_vars[eNB_id_i]->dl_ch_magb0,
-                                      lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                                      lte_ue_pdsch_vars[eNB_id_i]->pmi_ext,
+      dlsch_channel_compensation_TM56(pdsch_vars[eNB_id_i]->rxdataF_ext,
+                                      pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                      pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                                      pdsch_vars[eNB_id_i]->dl_ch_magb0,
+                                      pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                                      pdsch_vars[eNB_id_i]->pmi_ext,
                                       frame_parms,
                                       phy_measurements,
                                       eNB_id_i,
                                       symbol,
                                       i_mod,
                                       nb_rb,
-                                      lte_ue_pdsch_vars[eNB_id]->log2_maxh,
+                                      pdsch_vars[eNB_id]->log2_maxh,
                                       dlsch0_harq->dl_power_off);
 
 #ifdef DEBUG_PHY
 
       if (symbol==5) {
-        write_output("rxF_comp_d.m","rxF_c_d",&lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-        write_output("rxF_comp_i.m","rxF_c_i",&lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+        write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
       }
 
 #endif
@@ -509,25 +509,25 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
       dlsch_dual_stream_correlation(frame_parms,
                                     symbol,
                                     nb_rb,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                                    lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                    pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
+                                    pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                                    pdsch_vars[eNB_id]->log2_maxh);
 
     } else {
-      dlsch_channel_compensation_TM56(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                                      lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                                      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                                      lte_ue_pdsch_vars[eNB_id]->pmi_ext,
+      dlsch_channel_compensation_TM56(pdsch_vars[eNB_id]->rxdataF_ext,
+                                      pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                                      pdsch_vars[eNB_id]->dl_ch_mag0,
+                                      pdsch_vars[eNB_id]->dl_ch_magb0,
+                                      pdsch_vars[eNB_id]->rxdataF_comp0,
+                                      pdsch_vars[eNB_id]->pmi_ext,
                                       frame_parms,
                                       phy_measurements,
                                       eNB_id,
                                       symbol,
                                       dlsch0_harq->Qm,
                                       nb_rb,
-                                      lte_ue_pdsch_vars[eNB_id]->log2_maxh,
+                                      pdsch_vars[eNB_id]->log2_maxh,
                                       1);
     }
   }
@@ -537,14 +537,14 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     if (dlsch0_harq->mimo_mode == LARGE_CDD) {
       if (frame_parms->nb_antennas_tx_eNB == 2) {
         dlsch_detection_mrc(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->rho,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag1,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_magb1,
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->rho,
+                            pdsch_vars[eNB_id]->dl_ch_mag0,
+                            pdsch_vars[eNB_id]->dl_ch_magb0,
+                            pdsch_vars[eNB_id]->dl_ch_mag1,
+                            pdsch_vars[eNB_id]->dl_ch_magb1,
                             symbol,
                             nb_rb,
                             dual_stream_flag);
@@ -552,14 +552,14 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     } else {
 
       dlsch_detection_mrc(frame_parms,
-                          lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                          lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                          lte_ue_pdsch_vars[eNB_id]->rho,
-                          lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                          lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                          lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                          lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                          lte_ue_pdsch_vars[eNB_id_i]->dl_ch_magb0,
+                          pdsch_vars[eNB_id]->rxdataF_comp0,
+                          pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                          pdsch_vars[eNB_id]->rho,
+                          pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                          pdsch_vars[eNB_id]->dl_ch_mag0,
+                          pdsch_vars[eNB_id]->dl_ch_magb0,
+                          pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                          pdsch_vars[eNB_id_i]->dl_ch_magb0,
                           symbol,
                           nb_rb,
                           dual_stream_flag);
@@ -573,17 +573,17 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
     /*
       dlsch_siso(frame_parms,
-      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp,
-      lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp,
+      pdsch_vars[eNB_id]->rxdataF_comp,
+      pdsch_vars[eNB_id_i]->rxdataF_comp,
       symbol,
       nb_rb);
     */
   } else if (dlsch0_harq->mimo_mode == ALAMOUTI) {
 
     dlsch_alamouti(frame_parms,
-                   lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                   lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                   lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
+                   pdsch_vars[eNB_id]->rxdataF_comp0,
+                   pdsch_vars[eNB_id]->dl_ch_mag0,
+                   pdsch_vars[eNB_id]->dl_ch_magb0,
                    symbol,
                    nb_rb);
 
@@ -603,40 +603,40 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     if (dlsch0_harq->mimo_mode != LARGE_CDD) {
       if (dual_stream_flag == 0)
         dlsch_qpsk_llr(frame_parms,
-                       lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                       lte_ue_pdsch_vars[eNB_id]->llr[0],
+                       pdsch_vars[eNB_id]->rxdataF_comp0,
+                       pdsch_vars[eNB_id]->llr[0],
                        symbol,first_symbol_flag,nb_rb,
                        adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                       lte_ue_pdsch_vars[eNB_id]->llr128);
+                       pdsch_vars[eNB_id]->llr128);
       else if (i_mod == 2) {
         dlsch_qpsk_qpsk_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
       } else if (i_mod == 4) {
         dlsch_qpsk_16qam_llr(frame_parms,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                             lte_ue_pdsch_vars[eNB_id]->llr[0],
+                             pdsch_vars[eNB_id]->rxdataF_comp0,
+                             pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                             pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                             pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                             pdsch_vars[eNB_id]->llr[0],
                              symbol,first_symbol_flag,nb_rb,
                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                             lte_ue_pdsch_vars[eNB_id]->llr128);
+                             pdsch_vars[eNB_id]->llr128);
       } else {
         dlsch_qpsk_64qam_llr(frame_parms,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                             lte_ue_pdsch_vars[eNB_id]->llr[0],
+                             pdsch_vars[eNB_id]->rxdataF_comp0,
+                             pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                             pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                             pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                             pdsch_vars[eNB_id]->llr[0],
                              symbol,first_symbol_flag,nb_rb,
                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                             lte_ue_pdsch_vars[eNB_id]->llr128);
+                             pdsch_vars[eNB_id]->llr128);
 
       }
     } else { // TM3
@@ -644,48 +644,48 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
       if (dlsch1_harq->Qm == 2) {
         /*  dlsch_qpsk_llr(frame_parms,
-	    lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-	    lte_ue_pdsch_vars[eNB_id]->llr[0],
+	    pdsch_vars[eNB_id]->rxdataF_comp0,
+	    pdsch_vars[eNB_id]->llr[0],
 	    symbol,first_symbol_flag,nb_rb,
 	    adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol),
-	    lte_ue_pdsch_vars[eNB_id]->llr128);
+	    pdsch_vars[eNB_id]->llr128);
         */
         dlsch_qpsk_qpsk_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
         dlsch_qpsk_qpsk_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[1],
+                            pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_rho2_ext,
+                            pdsch_vars[eNB_id]->llr[1],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128_2ndstream);
+                            pdsch_vars[eNB_id]->llr128_2ndstream);
       } else if (dlsch1_harq->Qm == 4) {
         dlsch_qpsk_16qam_llr(frame_parms,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_mag1,
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                             lte_ue_pdsch_vars[eNB_id]->llr[0],
+                             pdsch_vars[eNB_id]->rxdataF_comp0,
+                             pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
+                             pdsch_vars[eNB_id]->dl_ch_mag1,
+                             pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                             pdsch_vars[eNB_id]->llr[0],
                              symbol,first_symbol_flag,nb_rb,
                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                             lte_ue_pdsch_vars[eNB_id]->llr128);
+                             pdsch_vars[eNB_id]->llr128);
       } else {
         dlsch_qpsk_64qam_llr(frame_parms,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                             lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_mag1,
-                             lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                             lte_ue_pdsch_vars[eNB_id]->llr[0],
+                             pdsch_vars[eNB_id]->rxdataF_comp0,
+                             pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
+                             pdsch_vars[eNB_id]->dl_ch_mag1,
+                             pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                             pdsch_vars[eNB_id]->llr[0],
                              symbol,first_symbol_flag,nb_rb,
                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                             lte_ue_pdsch_vars[eNB_id]->llr128);
+                             pdsch_vars[eNB_id]->llr128);
 
       }
     }
@@ -695,44 +695,44 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
   case 4 :
     if (dual_stream_flag == 0) {
       dlsch_16qam_llr(frame_parms,
-                      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                      lte_ue_pdsch_vars[eNB_id]->llr[0],
-                      lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
+                      pdsch_vars[eNB_id]->rxdataF_comp0,
+                      pdsch_vars[eNB_id]->llr[0],
+                      pdsch_vars[eNB_id]->dl_ch_mag0,
                       symbol,first_symbol_flag,nb_rb,
                       adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                      lte_ue_pdsch_vars[eNB_id]->llr128);
+                      pdsch_vars[eNB_id]->llr128);
     } else if (i_mod == 2) {
       dlsch_16qam_qpsk_llr(frame_parms,
-                           lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                           lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                           lte_ue_pdsch_vars[eNB_id]->llr[0],
+                           pdsch_vars[eNB_id]->rxdataF_comp0,
+                           pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                           pdsch_vars[eNB_id]->dl_ch_mag0,
+                           pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                           pdsch_vars[eNB_id]->llr[0],
                            symbol,first_symbol_flag,nb_rb,
                            adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                           lte_ue_pdsch_vars[eNB_id]->llr128);
+                           pdsch_vars[eNB_id]->llr128);
     } else if (i_mod == 4) {
       dlsch_16qam_16qam_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_mag0,
+                            pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
     } else {
       dlsch_16qam_64qam_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_mag0,
+                            pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
     }
 
     break;
@@ -740,46 +740,46 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
   case 6 :
     if (dual_stream_flag == 0) {
       dlsch_64qam_llr(frame_parms,
-                      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                      lte_ue_pdsch_vars[eNB_id]->llr[0],
-                      lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                      lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
+                      pdsch_vars[eNB_id]->rxdataF_comp0,
+                      pdsch_vars[eNB_id]->llr[0],
+                      pdsch_vars[eNB_id]->dl_ch_mag0,
+                      pdsch_vars[eNB_id]->dl_ch_magb0,
                       symbol,first_symbol_flag,nb_rb,
                       adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                      lte_ue_pdsch_vars[eNB_id]->llr128);
+                      pdsch_vars[eNB_id]->llr128);
     } else if (i_mod == 2) {
       dlsch_64qam_qpsk_llr(frame_parms,
-                           lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                           lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                           lte_ue_pdsch_vars[eNB_id]->llr[0],
+                           pdsch_vars[eNB_id]->rxdataF_comp0,
+                           pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                           pdsch_vars[eNB_id]->dl_ch_mag0,
+                           pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                           pdsch_vars[eNB_id]->llr[0],
                            symbol,first_symbol_flag,nb_rb,
                            adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                           lte_ue_pdsch_vars[eNB_id]->llr128);
+                           pdsch_vars[eNB_id]->llr128);
     } else if (i_mod == 4) {
       dlsch_64qam_16qam_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_mag0,
+                            pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
 
     } else {
       dlsch_64qam_64qam_llr(frame_parms,
-                            lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                            lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext,
-                            lte_ue_pdsch_vars[eNB_id]->llr[0],
+                            pdsch_vars[eNB_id]->rxdataF_comp0,
+                            pdsch_vars[eNB_id_i]->rxdataF_comp0,
+                            pdsch_vars[eNB_id]->dl_ch_mag0,
+                            pdsch_vars[eNB_id_i]->dl_ch_mag0,
+                            pdsch_vars[eNB_id]->dl_ch_rho_ext,
+                            pdsch_vars[eNB_id]->llr[0],
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                            lte_ue_pdsch_vars[eNB_id]->llr128);
+                            pdsch_vars[eNB_id]->llr128);
     }
 
     break;
@@ -1843,8 +1843,8 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
 }
 
 void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
-                                    LTE_UE_PDSCH *lte_ue_pdsch_vars,
-                                    PHY_MEASUREMENTS *phy_measurements,
+                                    LTE_UE_PDSCH *pdsch_vars,
+                                    PHY_MEASUREMENTS *measurements,
                                     int eNB_id,
                                     unsigned char symbol,
                                     unsigned char mod_order0,
@@ -1861,14 +1861,14 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
   unsigned char aarx=0,symbol_mod,pilots=0;
   int precoded_signal_strength0=0,precoded_signal_strength1=0;
 
-  int **rxdataF_ext           = lte_ue_pdsch_vars->rxdataF_ext;
-  int **dl_ch_estimates_ext   = lte_ue_pdsch_vars->dl_ch_estimates_ext;
-  int **dl_ch_mag0            = lte_ue_pdsch_vars->dl_ch_mag0;
-  int **dl_ch_mag1            = lte_ue_pdsch_vars->dl_ch_mag1;
-  int **dl_ch_magb0           = lte_ue_pdsch_vars->dl_ch_magb0;
-  int **dl_ch_magb1           = lte_ue_pdsch_vars->dl_ch_magb1;
-  int **rxdataF_comp0         = lte_ue_pdsch_vars->rxdataF_comp0;
-  int **rxdataF_comp1         = lte_ue_pdsch_vars->rxdataF_comp1[round]; //?
+  int **rxdataF_ext           = pdsch_vars->rxdataF_ext;
+  int **dl_ch_estimates_ext   = pdsch_vars->dl_ch_estimates_ext;
+  int **dl_ch_mag0            = pdsch_vars->dl_ch_mag0;
+  int **dl_ch_mag1            = pdsch_vars->dl_ch_mag1;
+  int **dl_ch_magb0           = pdsch_vars->dl_ch_magb0;
+  int **dl_ch_magb1           = pdsch_vars->dl_ch_magb1;
+  int **rxdataF_comp0         = pdsch_vars->rxdataF_comp0;
+  int **rxdataF_comp1         = pdsch_vars->rxdataF_comp1[round]; //?
   __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;
 
 
@@ -2178,16 +2178,16 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
   Nre = (pilots==0) ? 12 : 8;
 
   precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-                                 (nb_rb*Nre))) - (phy_measurements->n0_power[aarx]));
+                                 (nb_rb*Nre))) - (measurements->n0_power[aarx]));
 
   precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre],
-                                 (nb_rb*Nre))) - (phy_measurements->n0_power[aarx]));
+                                 (nb_rb*Nre))) - (measurements->n0_power[aarx]));
 
-  phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,phy_measurements->n0_power_tot);
-  phy_measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,phy_measurements->n0_power_tot);
+  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,measurements->n0_power_tot);
+  measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,measurements->n0_power_tot);
 
   //printf("eNB_id %d, symbol %d: precoded CQI %d dB\n",eNB_id,symbol,
-  //   phy_measurements->precoded_cqi_dB[eNB_id][0]);
+  //   measurements->precoded_cqi_dB[eNB_id][0]);
 
   _mm_empty();
   _m_empty();
@@ -2206,14 +2206,14 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
   int16x8_t QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;
   int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift);
   
-  int **rxdataF_ext           = lte_ue_pdsch_vars->rxdataF_ext;
-  int **dl_ch_estimates_ext   = lte_ue_pdsch_vars->dl_ch_estimates_ext;
-  int **dl_ch_mag0            = lte_ue_pdsch_vars->dl_ch_mag0;
-  int **dl_ch_mag1            = lte_ue_pdsch_vars->dl_ch_mag1;
-  int **dl_ch_magb0           = lte_ue_pdsch_vars->dl_ch_magb0;
-  int **dl_ch_magb1           = lte_ue_pdsch_vars->dl_ch_magb1;
-  int **rxdataF_comp0         = lte_ue_pdsch_vars->rxdataF_comp0;
-  int **rxdataF_comp1         = lte_ue_pdsch_vars->rxdataF_comp1[round]; //?
+  int **rxdataF_ext           = pdsch_vars->rxdataF_ext;
+  int **dl_ch_estimates_ext   = pdsch_vars->dl_ch_estimates_ext;
+  int **dl_ch_mag0            = pdsch_vars->dl_ch_mag0;
+  int **dl_ch_mag1            = pdsch_vars->dl_ch_mag1;
+  int **dl_ch_magb0           = pdsch_vars->dl_ch_magb0;
+  int **dl_ch_magb1           = pdsch_vars->dl_ch_magb1;
+  int **rxdataF_comp0         = pdsch_vars->rxdataF_comp0;
+  int **rxdataF_comp1         = pdsch_vars->rxdataF_comp1[round]; //?
   
   int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1};
   
@@ -2461,14 +2461,14 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
   Nre = (pilots==0) ? 12 : 8;
 
   precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-                                 (nb_rb*Nre))) - (phy_measurements->n0_power[aarx]));
+                                 (nb_rb*Nre))) - (measurements->n0_power[aarx]));
 
   precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre],
-                                 (nb_rb*Nre))) - (phy_measurements->n0_power[aarx]));
+                                 (nb_rb*Nre))) - (measurements->n0_power[aarx]));
 
 
-  phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,phy_measurements->n0_power_tot);
-  phy_measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,phy_measurements->n0_power_tot);
+  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,measurements->n0_power_tot);
+  measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,measurements->n0_power_tot);
 
 #endif
 }
@@ -2717,7 +2717,7 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms,
 
 void dlsch_scale_channel(int **dl_ch_estimates_ext,
                          LTE_DL_FRAME_PARMS *frame_parms,
-                         LTE_UE_DLSCH_t **dlsch_ue,
+                         LTE_UE_DLSCH_t **dlsch,
                          uint8_t symbol,
                          unsigned short nb_rb)
 {
@@ -2738,7 +2738,7 @@ void dlsch_scale_channel(int **dl_ch_estimates_ext,
   }
 
   // Determine scaling amplitude based the symbol
-  ch_amp = ((pilots) ? (dlsch_ue[0]->sqrt_rho_b) : (dlsch_ue[0]->sqrt_rho_a));
+  ch_amp = ((pilots) ? (dlsch[0]->sqrt_rho_b) : (dlsch[0]->sqrt_rho_a));
 
   //  LOG_D(PHY,"Scaling PDSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp);
 
@@ -4197,74 +4197,74 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
 
 #ifdef USER_MODE
 
-void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round)
+void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round)
 {
 
-  unsigned int nsymb = (phy_vars_ue->lte_frame_parms.Ncp == 0) ? 14 : 12;
+  unsigned int nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
   char fname[32],vname[32];
-  int N_RB_DL=phy_vars_ue->lte_frame_parms.N_RB_DL;
+  int N_RB_DL=ue->frame_parms.N_RB_DL;
 
   sprintf(fname,"dlsch%d_rxF_r%d_ext0.m",eNB_id,round);
   sprintf(vname,"dl%d_rxF_r%d_ext0",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1);
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1);
 
-  if (phy_vars_ue->lte_frame_parms.nb_antennas_rx >1) {
+  if (ue->frame_parms.nb_antennas_rx >1) {
     sprintf(fname,"dlsch%d_rxF_r%d_ext1.m",eNB_id,round);
     sprintf(vname,"dl%d_rxF_r%d_ext1",eNB_id,round);
-    write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1);
+    write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1);
   }
 
   sprintf(fname,"dlsch%d_ch_r%d_ext00.m",eNB_id,round);
   sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
 
-  if (phy_vars_ue->lte_frame_parms.nb_antennas_rx == 2) {
+  if (ue->frame_parms.nb_antennas_rx == 2) {
     sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round);
     sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round);
-    write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
+    write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
   }
 
-  if (phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB == 2) {
+  if (ue->frame_parms.nb_antennas_tx_eNB == 2) {
     sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round);
     sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round);
-    write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
+    write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
 
-    if (phy_vars_ue->lte_frame_parms.nb_antennas_rx == 2) {
+    if (ue->frame_parms.nb_antennas_rx == 2) {
       sprintf(fname,"dlsch%d_ch_r%d_ext11.m",eNB_id,round);
       sprintf(vname,"dl%d_ch_r%d_ext11",eNB_id,round);
-      write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
+      write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
     }
   }
 
   /*
-    write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
-    write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
-    write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
+    write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
+    write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
+    write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
   */
   sprintf(fname,"dlsch%d_r%d_rho.m",eNB_id,round);
   sprintf(vname,"dl_rho_r%d_%d",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[0],12*N_RB_DL*nsymb,1,1);
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_rho_ext[0],12*N_RB_DL*nsymb,1,1);
 
   sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round);
   sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1);
-  if (phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB == 2) {
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1);
+  if (ue->frame_parms.nb_antennas_tx_eNB == 2) {
     sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round);
     sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round);
-    write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[0][round],12*N_RB_DL*nsymb,1,1);
+    write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_comp1[0][round],12*N_RB_DL*nsymb,1,1);
   }
 
   sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round);
   sprintf(vname,"dl%d_r%d_llr",eNB_id,round);
-  write_output(fname,vname, phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0],coded_bits_per_codeword,1,0);
+  write_output(fname,vname, ue->pdsch_vars[eNB_id]->llr[0],coded_bits_per_codeword,1,0);
   sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round);
   sprintf(vname,"dl%d_r%d_mag1",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
   sprintf(fname,"dlsch%d_r%d_mag2.m",eNB_id,round);
   sprintf(vname,"dl%d_r%d_mag2",eNB_id,round);
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1);
+  write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1);
 
-  //  printf("log2_maxh = %d\n",phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+  //  printf("log2_maxh = %d\n",ue->pdsch_vars[eNB_id]->log2_maxh);
 }
 #endif
 
diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
index 097bcdd691cde68864bb22b4e064b9679a43c7db..2d3b9d3b234453e5e30dc352cc5c09d445355283 100644
--- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
@@ -42,7 +42,7 @@
 #include "PHY/sse_intrin.h"
 //#define DEBUG_DRS
 
-int generate_drs_pusch(PHY_VARS_UE *phy_vars_ue,
+int generate_drs_pusch(PHY_VARS_UE *ue,
                        uint8_t eNB_id,
                        short amp,
                        unsigned int subframe,
@@ -62,26 +62,26 @@ int generate_drs_pusch(PHY_VARS_UE *phy_vars_ue,
   int16_t alpha_im[12] = {0,     16383, 28377, 32767, 28377,   16383,     0,-16384,-28378,-32768,-28378,-16384};
 
   uint8_t cyclic_shift,cyclic_shift0,cyclic_shift1;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
-  int32_t *txdataF = phy_vars_ue->lte_ue_common_vars.txdataF[ant];
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
+  int32_t *txdataF = ue->common_vars.txdataF[ant];
   uint32_t u,v,alpha_ind;
   uint32_t u0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[subframe<<1];
   uint32_t u1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[1+(subframe<<1)];
   uint32_t v0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
   uint32_t v1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
   int32_t ref_re,ref_im;
-  uint8_t harq_pid = subframe2harq_pid(frame_parms,phy_vars_ue->frame_tx,subframe);
+  uint8_t harq_pid = subframe2harq_pid(frame_parms,ue->frame_tx,subframe);
 
   cyclic_shift0 = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                   phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
-                   phy_vars_ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]+
-                   ((phy_vars_ue->ulsch_ue[0]->cooperation_flag==2)?10:0)+
+                   ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
+                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]+
+                   ((ue->ulsch[0]->cooperation_flag==2)?10:0)+
                    ant*6) % 12;
-  //  printf("PUSCH.cyclicShift %d, n_DMRS2 %d, nPRS %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,phy_vars_ue->ulsch_ue[eNB_id]->n_DMRS2,phy_vars_ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]);
+  //  printf("PUSCH.cyclicShift %d, n_DMRS2 %d, nPRS %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,ue->ulsch[eNB_id]->n_DMRS2,ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]);
   cyclic_shift1 = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                   phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
-                   phy_vars_ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+1]+
-                   ((phy_vars_ue->ulsch_ue[0]->cooperation_flag==2)?10:0)+
+                   ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
+                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+1]+
+                   ((ue->ulsch[0]->cooperation_flag==2)?10:0)+
                    ant*6) % 12;
 
   //       cyclic_shift0 = 0;
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index 5a8463a86129888ba733e2dc142e868398a3dde4..673b7a43485f3b1383258c65134605977cf51620 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -44,101 +44,98 @@
 #include "SCHED/extern.h"
 #include "defs.h"
 #include "extern.h"
-#ifdef EXMIMO
-#include "gain_control.h"
-#endif
 
-#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_LMSSDR)
+
 #include "common_lib.h"
 extern openair0_config_t openair0_cfg[];
-#endif
-#define DEBUG_INITIAL_SYNCH
 
-int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) 
-{
+//#define DEBUG_INITIAL_SYNCH
 
-uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
-LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
-char phich_resource[6];
+int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) 
+{
 
+  uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
+  char phich_resource[6];
+  
 #ifdef DEBUG_INITIAL_SYNCH
-  LOG_I(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",phy_vars_ue->Mod_id,
-        phy_vars_ue->rx_offset);
+  LOG_I(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
+        ue->rx_offset);
 #endif
 
   for (l=0; l<frame_parms->symbols_per_tti/2; l++) {
 
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
 	     l,
 	     0,
-	     phy_vars_ue->rx_offset,
+	     ue->rx_offset,
 	     0,
 	     1);
   }  
   for (l=0; l<frame_parms->symbols_per_tti/2; l++) {
 
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
 	     l,
 	     1,
-	     phy_vars_ue->rx_offset,
+	     ue->rx_offset,
 	     0,
 	     1);
   }  
-  slot_fep(phy_vars_ue,
+  slot_fep(ue,
 	   0,
 	   2,
-	   phy_vars_ue->rx_offset,
+	   ue->rx_offset,
 	   0,
 	   1);
 
-  lte_ue_measurements(phy_vars_ue,
-		      phy_vars_ue->rx_offset,
+  lte_ue_measurements(ue,
+		      ue->rx_offset,
 		      0,
 		      0);
   
   
-  if (phy_vars_ue->lte_frame_parms.frame_type == TDD) {
-    ue_rrc_measurements(phy_vars_ue,
+  if (ue->frame_parms.frame_type == TDD) {
+    ue_rrc_measurements(ue,
 			1,
 			0);
   }
   else {
-    ue_rrc_measurements(phy_vars_ue,
+    ue_rrc_measurements(ue,
 			0,
 			0);
   }
 #ifdef DEBUG_INITIAL_SYNCH
   LOG_I(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
-        phy_vars_ue->Mod_id,
-        phy_vars_ue->PHY_measurements.rx_rssi_dBm[0] - ((phy_vars_ue->lte_frame_parms.nb_antennas_rx==2) ? 3 : 0),
-        phy_vars_ue->PHY_measurements.rx_power_dB[0][0],
-        phy_vars_ue->PHY_measurements.rx_power_dB[0][1],
-        phy_vars_ue->PHY_measurements.rx_power[0][0],
-        phy_vars_ue->PHY_measurements.rx_power[0][1],
-        phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],
-        phy_vars_ue->PHY_measurements.rx_power_avg[0],
-        phy_vars_ue->rx_total_gain_dB);
+        ue->Mod_id,
+        ue->measurements.rx_rssi_dBm[0] - ((ue->frame_parms.nb_antennas_rx==2) ? 3 : 0),
+        ue->measurements.rx_power_dB[0][0],
+        ue->measurements.rx_power_dB[0][1],
+        ue->measurements.rx_power[0][0],
+        ue->measurements.rx_power[0][1],
+        ue->measurements.rx_power_avg_dB[0],
+        ue->measurements.rx_power_avg[0],
+        ue->rx_total_gain_dB);
 
   LOG_I(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n",
-        phy_vars_ue->Mod_id,
-        phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
-        phy_vars_ue->PHY_measurements.n0_power_dB[0],
-        phy_vars_ue->PHY_measurements.n0_power_dB[1],
-        phy_vars_ue->PHY_measurements.n0_power[0],
-        phy_vars_ue->PHY_measurements.n0_power[1],
-        phy_vars_ue->PHY_measurements.n0_power_avg_dB,
-        phy_vars_ue->PHY_measurements.n0_power_avg);
+        ue->Mod_id,
+        ue->measurements.n0_power_tot_dBm,
+        ue->measurements.n0_power_dB[0],
+        ue->measurements.n0_power_dB[1],
+        ue->measurements.n0_power[0],
+        ue->measurements.n0_power[1],
+        ue->measurements.n0_power_avg_dB,
+        ue->measurements.n0_power_avg);
 #endif
 
   pbch_decoded = 0;
 
   for (frame_mod4=0; frame_mod4<4; frame_mod4++) {
-    pbch_tx_ant = rx_pbch(&phy_vars_ue->lte_ue_common_vars,
-                          phy_vars_ue->lte_ue_pbch_vars[0],
+    pbch_tx_ant = rx_pbch(&ue->common_vars,
+                          ue->pbch_vars[0],
                           frame_parms,
                           0,
                           SISO,
-                          phy_vars_ue->high_speed_flag,
+                          ue->high_speed_flag,
                           frame_mod4);
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
@@ -146,12 +143,12 @@ char phich_resource[6];
       break;
     }
 
-    pbch_tx_ant = rx_pbch(&phy_vars_ue->lte_ue_common_vars,
-                          phy_vars_ue->lte_ue_pbch_vars[0],
+    pbch_tx_ant = rx_pbch(&ue->common_vars,
+                          ue->pbch_vars[0],
                           frame_parms,
                           0,
                           ALAMOUTI,
-                          phy_vars_ue->high_speed_flag,
+                          ue->high_speed_flag,
                           frame_mod4);
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
@@ -171,12 +168,12 @@ char phich_resource[6];
 
 
     // flip byte endian on 24-bits for MIB
-    //    dummy = phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[0];
-    //    phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[0] = phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2];
-    //    phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2] = dummy;
+    //    dummy = ue->pbch_vars[0]->decoded_output[0];
+    //    ue->pbch_vars[0]->decoded_output[0] = ue->pbch_vars[0]->decoded_output[2];
+    //    ue->pbch_vars[0]->decoded_output[2] = dummy;
 
     // now check for Bandwidth of Cell
-    dummy = (phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2]>>5)&7;
+    dummy = (ue->pbch_vars[0]->decoded_output[2]>>5)&7;
 
     switch (dummy) {
 
@@ -205,15 +202,15 @@ char phich_resource[6];
       break;
 
     default:
-      LOG_E(PHY,"[UE%d] Initial sync: PBCH decoding: Unknown N_RB_DL\n",phy_vars_ue->Mod_id);
+      LOG_E(PHY,"[UE%d] Initial sync: PBCH decoding: Unknown N_RB_DL\n",ue->Mod_id);
       return -1;
       break;
     }
 
 
     // now check for PHICH parameters
-    frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2]>>4)&1);
-    dummy = (phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2]>>2)&3;
+    frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
+    dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
 
     switch (dummy) {
     case 0:
@@ -237,25 +234,25 @@ char phich_resource[6];
       break;
 
     default:
-      LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",phy_vars_ue->Mod_id);
+      LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
       return -1;
       break;
     }
 
-    phy_vars_ue->frame_rx =   (((phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[2]&3)<<6) + (phy_vars_ue->lte_ue_pbch_vars[0]->decoded_output[1]>>2))<<2;
-    phy_vars_ue->frame_rx += frame_mod4;
+    ue->frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
+    ue->frame_rx += frame_mod4;
 
 #ifndef USER_MODE
     // one frame delay
-    phy_vars_ue->frame_rx ++;
+    ue->frame_rx ++;
 #endif
-    phy_vars_ue->frame_tx = phy_vars_ue->frame_rx;
+    ue->frame_tx = ue->frame_rx;
 #ifdef DEBUG_INITIAL_SYNCH
     LOG_I(PHY,"[UE%d] Initial sync: pbch decoded sucessfully mode1_flag %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
-          phy_vars_ue->Mod_id,
+          ue->Mod_id,
           frame_parms->mode1_flag,
           pbch_tx_ant,
-          phy_vars_ue->frame_rx,
+          ue->frame_rx,
           frame_parms->N_RB_DL,
           frame_parms->phich_config_common.phich_duration,
           phich_resource);  //frame_parms->phich_config_common.phich_resource);
@@ -271,7 +268,7 @@ char phich_string[13][4] = {"","1/6","","1/2","","","one","","","","","","two"};
 char duplex_string[2][4] = {"FDD","TDD"};
 char prefix_string[2][9] = {"NORMAL","EXTENDED"};
 
-int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
+int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
 {
 
   int32_t sync_pos,sync_pos2,sync_pos_slot;
@@ -279,7 +276,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
   uint8_t phase_fdd_ncp,phase_fdd_ecp,phase_tdd_ncp,phase_tdd_ecp;
   uint8_t flip_fdd_ncp,flip_fdd_ecp,flip_tdd_ncp,flip_tdd_ecp;
   //  uint16_t Nid_cell_fdd_ncp=0,Nid_cell_fdd_ecp=0,Nid_cell_tdd_ncp=0,Nid_cell_tdd_ecp=0;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
   int ret=-1;
   int aarx,rx_power=0;
   /*#ifdef OAI_USRP
@@ -291,21 +288,21 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
   frame_parms->frame_type=FDD;
   init_frame_parms(frame_parms,1);
   /*
-  write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+  write_output("rxdata0.m","rxd0",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
   exit(-1);
   */
-  sync_pos = lte_sync_time(phy_vars_ue->lte_ue_common_vars.rxdata,
+  sync_pos = lte_sync_time(ue->common_vars.rxdata,
                            frame_parms,
-                           (int *)&phy_vars_ue->lte_ue_common_vars.eNb_id);
+                           (int *)&ue->common_vars.eNb_id);
 
-  //  write_output("rxdata1.m","rxd1",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+  //  write_output("rxdata1.m","rxd1",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
   if (sync_pos >= frame_parms->nb_prefix_samples)
     sync_pos2 = sync_pos - frame_parms->nb_prefix_samples;
   else
     sync_pos2 = sync_pos + FRAME_LENGTH_COMPLEX_SAMPLES - frame_parms->nb_prefix_samples;
 
 #ifdef DEBUG_INITIAL_SYNCH
-  LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",phy_vars_ue->Mod_id,sync_pos,phy_vars_ue->lte_ue_common_vars.eNb_id);
+  LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
 #endif
 
   // SSS detection
@@ -314,25 +311,25 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
   sync_pos_slot = (frame_parms->samples_per_tti>>1) - frame_parms->ofdm_symbol_size - frame_parms->nb_prefix_samples;
 
   if (sync_pos2 >= sync_pos_slot)
-    phy_vars_ue->rx_offset = sync_pos2 - sync_pos_slot;
+    ue->rx_offset = sync_pos2 - sync_pos_slot;
   else
-    phy_vars_ue->rx_offset = FRAME_LENGTH_COMPLEX_SAMPLES + sync_pos2 - sync_pos_slot;
+    ue->rx_offset = FRAME_LENGTH_COMPLEX_SAMPLES + sync_pos2 - sync_pos_slot;
 
   if (((sync_pos2 - sync_pos_slot) >=0 ) &&
       ((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {
 #ifdef DEBUG_INITIAL_SYNCH
     LOG_I(PHY,"Calling sss detection (FDD normal CP)\n");
 #endif
-    rx_sss(phy_vars_ue,&metric_fdd_ncp,&flip_fdd_ncp,&phase_fdd_ncp);
+    rx_sss(ue,&metric_fdd_ncp,&flip_fdd_ncp,&phase_fdd_ncp);
     frame_parms->nushift  = frame_parms->Nid_cell%6;
 
     if (flip_fdd_ncp==1)
-      phy_vars_ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
+      ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
 
-    init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
-    lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
-    ret = pbch_detection(phy_vars_ue,mode);
-    //   write_output("rxdata2.m","rxd2",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+    init_frame_parms(&ue->frame_parms,1);
+    lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
+    ret = pbch_detection(ue,mode);
+    //   write_output("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 
 #ifdef DEBUG_INITIAL_SYNCH
     LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
@@ -361,25 +358,25 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
     sync_pos_slot = (frame_parms->samples_per_tti>>1) - frame_parms->ofdm_symbol_size - (frame_parms->nb_prefix_samples);
 
     if (sync_pos2 >= sync_pos_slot)
-      phy_vars_ue->rx_offset = sync_pos2 - sync_pos_slot;
+      ue->rx_offset = sync_pos2 - sync_pos_slot;
     else
-      phy_vars_ue->rx_offset = FRAME_LENGTH_COMPLEX_SAMPLES + sync_pos2 - sync_pos_slot;
+      ue->rx_offset = FRAME_LENGTH_COMPLEX_SAMPLES + sync_pos2 - sync_pos_slot;
 
-    //msg("nb_prefix_samples %d, rx_offset %d\n",frame_parms->nb_prefix_samples,phy_vars_ue->rx_offset);
+    //msg("nb_prefix_samples %d, rx_offset %d\n",frame_parms->nb_prefix_samples,ue->rx_offset);
 
     if (((sync_pos2 - sync_pos_slot) >=0 ) &&
         ((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {
 
-      rx_sss(phy_vars_ue,&metric_fdd_ecp,&flip_fdd_ecp,&phase_fdd_ecp);
+      rx_sss(ue,&metric_fdd_ecp,&flip_fdd_ecp,&phase_fdd_ecp);
       frame_parms->nushift  = frame_parms->Nid_cell%6;
 
       if (flip_fdd_ecp==1)
-        phy_vars_ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
+        ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
 
-      init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
-      lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
-      ret = pbch_detection(phy_vars_ue,mode);
-      //     write_output("rxdata3.m","rxd3",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+      init_frame_parms(&ue->frame_parms,1);
+      lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
+      ret = pbch_detection(ue,mode);
+      //     write_output("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 #ifdef DEBUG_INITIAL_SYNCH
       LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
             frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
@@ -408,37 +405,26 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
                       (frame_parms->nb_prefix_samples);
 
       if (sync_pos2 >= sync_pos_slot)
-        phy_vars_ue->rx_offset = sync_pos2 - sync_pos_slot;
+        ue->rx_offset = sync_pos2 - sync_pos_slot;
       else
-        phy_vars_ue->rx_offset = (FRAME_LENGTH_COMPLEX_SAMPLES>>1) + sync_pos2 - sync_pos_slot;
+        ue->rx_offset = (FRAME_LENGTH_COMPLEX_SAMPLES>>1) + sync_pos2 - sync_pos_slot;
 
-      /*if (((sync_pos2 - sync_pos_slot) >=0 ) &&
-      ((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {*/
-
-
-      rx_sss(phy_vars_ue,&metric_tdd_ncp,&flip_tdd_ncp,&phase_tdd_ncp);
+      rx_sss(ue,&metric_tdd_ncp,&flip_tdd_ncp,&phase_tdd_ncp);
 
       if (flip_tdd_ncp==1)
-        phy_vars_ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
+        ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
 
       frame_parms->nushift  = frame_parms->Nid_cell%6;
-      init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
+      init_frame_parms(&ue->frame_parms,1);
 
-      lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
-      ret = pbch_detection(phy_vars_ue,mode);
-      //      write_output("rxdata4.m","rxd4",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+      lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
+      ret = pbch_detection(ue,mode);
+      //      write_output("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 
 #ifdef DEBUG_INITIAL_SYNCH
       LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
             frame_parms->Nid_cell,metric_tdd_ncp,phase_tdd_ncp,flip_tdd_ncp,ret);
 #endif
-      /*}
-          else {
-      #ifdef DEBUG_INITIAL_SYNCH
-              LOG_I(PHY,"TDD Normal prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
-      #endif
-      }*/
-
 
       if (ret==-1) {
         // Now TDD extended prefix
@@ -456,35 +442,25 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
         sync_pos_slot = frame_parms->samples_per_tti + (frame_parms->ofdm_symbol_size<<1) + (frame_parms->nb_prefix_samples<<1);
 
         if (sync_pos2 >= sync_pos_slot)
-          phy_vars_ue->rx_offset = sync_pos2 - sync_pos_slot;
+          ue->rx_offset = sync_pos2 - sync_pos_slot;
         else
-          phy_vars_ue->rx_offset = (FRAME_LENGTH_COMPLEX_SAMPLES>>1) + sync_pos2 - sync_pos_slot;
+          ue->rx_offset = (FRAME_LENGTH_COMPLEX_SAMPLES>>1) + sync_pos2 - sync_pos_slot;
 
-        /*if (((sync_pos2 - sync_pos_slot) >=0 ) &&
-          ((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {*/
-
-        rx_sss(phy_vars_ue,&metric_tdd_ecp,&flip_tdd_ecp,&phase_tdd_ecp);
+        rx_sss(ue,&metric_tdd_ecp,&flip_tdd_ecp,&phase_tdd_ecp);
         frame_parms->nushift  = frame_parms->Nid_cell%6;
 
         if (flip_tdd_ecp==1)
-          phy_vars_ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
+          ue->rx_offset += (FRAME_LENGTH_COMPLEX_SAMPLES>>1);
 
-        init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
-        lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
-        ret = pbch_detection(phy_vars_ue,mode);
+        init_frame_parms(&ue->frame_parms,1);
+        lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
+        ret = pbch_detection(ue,mode);
 
-	//	write_output("rxdata5.m","rxd5",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+	//	write_output("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 #ifdef DEBUG_INITIAL_SYNCH
         LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
               frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
 #endif
-        /*}
-        else {
-        #ifdef DEBUG_INITIAL_SYNCH
-          LOG_I(PHY,"TDD Extended prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
-        #endif
-        }*/
-
       }
     }
   }
@@ -492,74 +468,73 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
   if (ret==0) {  // PBCH found so indicate sync to higher layers and configure frame parameters
 
 #ifdef DEBUG_INITIAL_SYNCH
-    LOG_I(PHY,"[UE%d] In synch, rx_offset %d samples\n",phy_vars_ue->Mod_id, phy_vars_ue->rx_offset);
+    LOG_I(PHY,"[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
 #endif
 
-    if (phy_vars_ue->UE_scan_carrier == 0) {
-      if (phy_vars_ue->mac_enabled==1) {
-	LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",phy_vars_ue->Mod_id);
+    if (ue->UE_scan_carrier == 0) {
+      if (ue->mac_enabled==1) {
+	LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id);
 	//mac_resynch();
-	mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,0,1);//phy_vars_ue->lte_ue_common_vars.eNb_id);
-	phy_vars_ue->UE_mode[0] = PRACH;
+	mac_xface->dl_phy_sync_success(ue->Mod_id,ue->frame_rx,0,1);//ue->common_vars.eNb_id);
+	ue->UE_mode[0] = PRACH;
       }
       else {
-	phy_vars_ue->UE_mode[0] = PUSCH;
+	ue->UE_mode[0] = PUSCH;
       }
 
       generate_pcfich_reg_mapping(frame_parms);
       generate_phich_reg_mapping(frame_parms);
-      //    init_prach625(frame_parms);
 
-      //phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors=0;
-      phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_conseq=0;
-    //phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_last=0;
+
+      ue->pbch_vars[0]->pdu_errors_conseq=0;
+
     }
 
-    LOG_I(PHY,"[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm,  rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",phy_vars_ue->Mod_id,
-	  phy_vars_ue->frame_rx,
-	  10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB,
-	  10*log10(phy_vars_ue->PHY_measurements.rssi),
-	  phy_vars_ue->rx_total_gain_dB,
-	  phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
-	  10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB,
-	  (10*log10(phy_vars_ue->PHY_measurements.rsrq[0])));
+    LOG_I(PHY,"[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm,  rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
+	  ue->frame_rx,
+	  10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
+	  10*log10(ue->measurements.rssi),
+	  ue->rx_total_gain_dB,
+	  ue->measurements.n0_power_tot_dBm,
+	  10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
+	  (10*log10(ue->measurements.rsrq[0])));
     
     
     LOG_I(PHY,"[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
-	  phy_vars_ue->Mod_id,
-	  phy_vars_ue->frame_rx,
-	  duplex_string[phy_vars_ue->lte_frame_parms.frame_type],
-	  prefix_string[phy_vars_ue->lte_frame_parms.Ncp],
-	  phy_vars_ue->lte_frame_parms.Nid_cell,
-	  phy_vars_ue->lte_frame_parms.N_RB_DL,
-	  phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration,
-	  phich_string[phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource],
-	  phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB);
-#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_LMSSDR)
+	  ue->Mod_id,
+	  ue->frame_rx,
+	  duplex_string[ue->frame_parms.frame_type],
+	  prefix_string[ue->frame_parms.Ncp],
+	  ue->frame_parms.Nid_cell,
+	  ue->frame_parms.N_RB_DL,
+	  ue->frame_parms.phich_config_common.phich_duration,
+	  phich_string[ue->frame_parms.phich_config_common.phich_resource],
+	  ue->frame_parms.nb_antennas_tx_eNB);
+
     LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
-	  phy_vars_ue->Mod_id,
-	  phy_vars_ue->frame_rx,
-	  openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset,
-	  phy_vars_ue->lte_ue_common_vars.freq_offset);
-#endif
+	  ue->Mod_id,
+	  ue->frame_rx,
+	  openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
+	  ue->common_vars.freq_offset);
+
   } else {
 #ifdef DEBUG_INITIAL_SYNC
-    LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",phy_vars_ue->Mod_id);
-    LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",phy_vars_ue->Mod_id,sync_pos,phy_vars_ue->lte_ue_common_vars.eNb_id);
+    LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id);
+    LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
     /*      LOG_I(PHY,"[UE%d] Initial sync: (metric fdd_ncp %d (%d), metric fdd_ecp %d (%d), metric_tdd_ncp %d (%d), metric_tdd_ecp %d (%d))\n",
-          phy_vars_ue->Mod_id,
+          ue->Mod_id,
           metric_fdd_ncp,Nid_cell_fdd_ncp,
           metric_fdd_ecp,Nid_cell_fdd_ecp,
           metric_tdd_ncp,Nid_cell_tdd_ncp,
           metric_tdd_ecp,Nid_cell_tdd_ecp);*/
-    LOG_I(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",phy_vars_ue->Mod_id,
+    LOG_I(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",ue->Mod_id,
           frame_parms->Nid_cell,frame_parms->frame_type);
 #endif
 
-    phy_vars_ue->UE_mode[0] = NOT_SYNCHED;
-    phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_last=phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors;
-    phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors++;
-    phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_conseq++;
+    ue->UE_mode[0] = NOT_SYNCHED;
+    ue->pbch_vars[0]->pdu_errors_last=ue->pbch_vars[0]->pdu_errors;
+    ue->pbch_vars[0]->pdu_errors++;
+    ue->pbch_vars[0]->pdu_errors_conseq++;
 
   }
 
@@ -569,57 +544,44 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
 
     // do a measurement on the best guess of the PSS
     for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
-      rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][sync_pos2],
+      rx_power += signal_energy(&ue->common_vars.rxdata[aarx][sync_pos2],
 				frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
     
     /*
     // do a measurement on the full frame
     for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
-      rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][0],
+      rx_power += signal_energy(&ue->common_vars.rxdata[aarx][0],
 				frame_parms->samples_per_tti*10);
     */
 
     // we might add a low-pass filter here later
-    phy_vars_ue->PHY_measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx; 
+    ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx; 
 
-    phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] = dB_fixed(phy_vars_ue->PHY_measurements.rx_power_avg[0]);
+    ue->measurements.rx_power_avg_dB[0] = dB_fixed(ue->measurements.rx_power_avg[0]);
 
 #ifdef DEBUG_INITIAL_SYNCH
-  LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
+  LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
 #endif
 
-#ifdef EXMIMO
-  if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
-      (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
-    //phy_adjust_gain(phy_vars_ue,0);
-    gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
-
-#else
 #ifndef OAI_USRP
 #ifndef OAI_BLADERF 
 #ifndef OAI_LMSSDR
-  phy_adjust_gain(phy_vars_ue,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
-#endif
+  phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
 #endif
 #endif
 #endif
+
   }
   else {
-#ifdef EXMIMO
-  if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
-      (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
-    //phy_adjust_gain(phy_vars_ue,0);
-    gain_control_all(dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
 
-#else
 #ifndef OAI_USRP
 #ifndef OAI_BLADERF 
 #ifndef OAI_LMSSDR
-  phy_adjust_gain(phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
-#endif
+  phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
 #endif
 #endif
 #endif
+
   }
 
   //  exit_fun("debug exit");
diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c
index 8b3a6c875884ae2c617af166dc7a6b09d502d1fc..e46fb1756ab3bcb6309bff94606747c25c883a71 100644
--- a/openair1/PHY/LTE_TRANSPORT/phich.c
+++ b/openair1/PHY/LTE_TRANSPORT/phich.c
@@ -1052,18 +1052,18 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
 // This routine demodulates the PHICH and updates PUSCH/ULSCH parameters
 
 
-void rx_phich(PHY_VARS_UE *phy_vars_ue,
+void rx_phich(PHY_VARS_UE *ue,
               uint8_t subframe,
               uint8_t eNB_id)
 {
 
 
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
-  LTE_UE_PDCCH **lte_ue_pdcch_vars = phy_vars_ue->lte_ue_pdcch_vars;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
+  LTE_UE_PDCCH **pdcch_vars = ue->pdcch_vars;
 
   //  uint8_t HI;
-  uint8_t harq_pid = phich_subframe_to_harq_pid(frame_parms,phy_vars_ue->frame_rx,subframe);
-  LTE_UE_ULSCH_t *ulsch = phy_vars_ue->ulsch_ue[eNB_id];
+  uint8_t harq_pid = phich_subframe_to_harq_pid(frame_parms,ue->frame_rx,subframe);
+  LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
   int16_t phich_d[24],*phich_d_ptr,HI16;
   //  unsigned int i,aa;
   int8_t d[24],*dp;
@@ -1074,16 +1074,16 @@ void rx_phich(PHY_VARS_UE *phy_vars_ue,
   uint8_t reset = 1;
   int16_t cs[12];
   uint32_t i,i2,i3,phich_quad;
-  int32_t **rxdataF_comp = lte_ue_pdcch_vars[eNB_id]->rxdataF_comp;
+  int32_t **rxdataF_comp = pdcch_vars[eNB_id]->rxdataF_comp;
   uint8_t Ngroup_PHICH,ngroup_PHICH,nseq_PHICH;
   uint8_t NSF_PHICH = 4;
   uint8_t pusch_subframe;
 
   // check if we're expecting a PHICH in this subframe
-  LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH RX\n",phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_rx,subframe);
+  LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH RX\n",ue->Mod_id,harq_pid,ue->frame_rx,subframe);
 
   if (ulsch->harq_processes[harq_pid]->status == ACTIVE) {
-    LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH RX ACTIVE\n",phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_rx,subframe);
+    LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH RX ACTIVE\n",ue->Mod_id,harq_pid,ue->frame_rx,subframe);
     Ngroup_PHICH = (frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)/48;
 
     if (((frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)%48) > 0)
@@ -1344,35 +1344,35 @@ void rx_phich(PHY_VARS_UE *phy_vars_ue,
 #endif
 
   if (HI16>0) {   //NACK
-    if (phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) {
+    if (ue->ulsch_Msg3_active[eNB_id] == 1) {
       LOG_D(PHY,"[UE  %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n",
-            phy_vars_ue->Mod_id,harq_pid,
-            phy_vars_ue->frame_rx,
+            ue->Mod_id,harq_pid,
+            ue->frame_rx,
             subframe,
             HI16,
             nseq_PHICH,
             ngroup_PHICH);
-      get_Msg3_alloc_ret(&phy_vars_ue->lte_frame_parms,
+      get_Msg3_alloc_ret(&ue->frame_parms,
                          subframe,
-                         phy_vars_ue->frame_rx,
-                         &phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id],
-                         &phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id]);
+                         ue->frame_rx,
+                         &ue->ulsch_Msg3_frame[eNB_id],
+                         &ue->ulsch_Msg3_subframe[eNB_id]);
       ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
       //      ulsch->harq_processes[harq_pid]->Ndi = 0;
       ulsch->harq_processes[harq_pid]->round++;
       ulsch->harq_processes[harq_pid]->rvidx = rv_table[ulsch->harq_processes[harq_pid]->round&3];
 
-      if (ulsch->harq_processes[harq_pid]->round>=phy_vars_ue->lte_frame_parms.maxHARQ_Msg3Tx) {
+      if (ulsch->harq_processes[harq_pid]->round>=ue->frame_parms.maxHARQ_Msg3Tx) {
         ulsch->harq_processes[harq_pid]->subframe_scheduling_flag =0;
         ulsch->harq_processes[harq_pid]->status = IDLE;
         // inform MAC that Msg3 transmission has failed
-        phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] = 0;
+        ue->ulsch_Msg3_active[eNB_id] = 0;
       }
     } else {
       //#ifdef DEBUG_PHICH
       LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH, received NAK (%d) nseq %d, ngroup %d\n",
-            phy_vars_ue->Mod_id,harq_pid,
-            phy_vars_ue->frame_rx,
+            ue->Mod_id,harq_pid,
+            ue->frame_rx,
             subframe,
             HI16,
             nseq_PHICH,
@@ -1389,18 +1389,18 @@ void rx_phich(PHY_VARS_UE *phy_vars_ue,
 
 
   } else {  //ACK
-    if (phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) {
+    if (ue->ulsch_Msg3_active[eNB_id] == 1) {
       LOG_D(PHY,"[UE  %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
-            phy_vars_ue->Mod_id,harq_pid,
-            phy_vars_ue->frame_rx,
+            ue->Mod_id,harq_pid,
+            ue->frame_rx,
             subframe,
             HI16,
             nseq_PHICH,ngroup_PHICH);
     } else {
       //#ifdef PHICH_DEBUG
       LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
-            phy_vars_ue->Mod_id,harq_pid,
-            phy_vars_ue->frame_rx,
+            ue->Mod_id,harq_pid,
+            ue->frame_rx,
             subframe, HI16,
             nseq_PHICH,ngroup_PHICH);
       //#endif
@@ -1410,29 +1410,29 @@ void rx_phich(PHY_VARS_UE *phy_vars_ue,
     ulsch->harq_processes[harq_pid]->status = IDLE;
     ulsch->harq_processes[harq_pid]->round  = 0;
     // inform MAC?
-    phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] = 0;
+    ue->ulsch_Msg3_active[eNB_id] = 0;
   }
 
 }
 
-void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
-                        unsigned char sched_subframe,
+void generate_phich_top(PHY_VARS_eNB *eNB,
+                        unsigned char thread_id,
                         int16_t amp,
                         uint8_t sect_id,
                         uint8_t abstraction_flag)
 {
 
 
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms;
-  LTE_eNB_ULSCH_t **ulsch_eNB = phy_vars_eNB->ulsch_eNB;
-  int32_t **txdataF = phy_vars_eNB->lte_eNB_common_vars.txdataF[sect_id];
+  LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms;
+  LTE_eNB_ULSCH_t **ulsch = eNB->ulsch;
+  int32_t **txdataF = eNB->common_vars.txdataF[sect_id];
   uint8_t harq_pid;
   uint8_t Ngroup_PHICH,ngroup_PHICH,nseq_PHICH;
   uint8_t NSF_PHICH = 4;
   uint8_t pusch_subframe;
   uint8_t UE_id;
   uint32_t pusch_frame;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
+  int subframe = eNB->proc[thread_id].subframe_tx;
 
   // compute Ngroup_PHICH (see formula at beginning of Section 6.9 in 36-211
 
@@ -1444,19 +1444,19 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
   if (frame_parms->Ncp == 1)
     NSF_PHICH = 2;
 
-  pusch_frame = phich_frame2_pusch_frame(frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
+  pusch_frame = phich_frame2_pusch_frame(frame_parms,eNB->proc[thread_id].frame_tx,subframe);
   pusch_subframe = phich_subframe2_pusch_subframe(frame_parms,subframe);
   harq_pid = subframe2harq_pid(frame_parms,pusch_frame,pusch_subframe);
 
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-    if ((ulsch_eNB[UE_id])&&(ulsch_eNB[UE_id]->rnti>0)) {
-      if (ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_active == 1) {
+    if ((ulsch[UE_id])&&(ulsch[UE_id]->rnti>0)) {
+      if (ulsch[UE_id]->harq_processes[harq_pid]->phich_active == 1) {
 
         LOG_D(PHY,"[eNB][PUSCH %d/%x] Frame %d subframe %d (pusch_subframe %d,pusch_frame %d) phich active %d\n",
-              harq_pid,ulsch_eNB[UE_id]->rnti,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,pusch_subframe,pusch_frame,ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_active);
+              harq_pid,ulsch[UE_id]->rnti,eNB->proc[thread_id].frame_tx,subframe,pusch_subframe,pusch_frame,ulsch[UE_id]->harq_processes[harq_pid]->phich_active);
 
-        ngroup_PHICH = (ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb +
-                        ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS)%Ngroup_PHICH;
+        ngroup_PHICH = (ulsch[UE_id]->harq_processes[harq_pid]->first_rb +
+                        ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS)%Ngroup_PHICH;
 
         if ((frame_parms->tdd_config == 0) && (frame_parms->frame_type == TDD) ) {
 
@@ -1464,20 +1464,20 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
             ngroup_PHICH += Ngroup_PHICH;
         }
 
-        nseq_PHICH = ((ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb/Ngroup_PHICH) +
-                      ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS)%(2*NSF_PHICH);
+        nseq_PHICH = ((ulsch[UE_id]->harq_processes[harq_pid]->first_rb/Ngroup_PHICH) +
+                      ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS)%(2*NSF_PHICH);
         LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generating PHICH, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d dci_alloc %d)\n",
-              phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,
+              eNB->Mod_id,harq_pid,eNB->proc[thread_id].frame_tx,
               subframe,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH,
-              ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK,
-              ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb,
-              ulsch_eNB[UE_id]->harq_processes[harq_pid]->dci_alloc);
+              ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK,
+              ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
+              ulsch[UE_id]->harq_processes[harq_pid]->dci_alloc);
 
-        if (ulsch_eNB[UE_id]->Msg3_active == 1) {
+        if (ulsch[UE_id]->Msg3_active == 1) {
           LOG_D(PHY,"[eNB %d][PUSCH %d][RAPROC] Frame %d, subframe %d: Generating Msg3 PHICH for UE %d, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d\n",
-                phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
-                UE_id,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH,ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK,
-                ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb);
+                eNB->Mod_id,harq_pid,eNB->proc[thread_id].frame_tx,subframe,
+                UE_id,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH,ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK,
+                ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
         }
 
         if (abstraction_flag == 0) {
@@ -1485,7 +1485,7 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
                          amp,//amp*2,
                          nseq_PHICH,
                          ngroup_PHICH,
-                         ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK,
+                         ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK,
                          subframe,
                          txdataF);
         } else {
@@ -1493,7 +1493,7 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
           generate_phich_emul(frame_parms,
                   //nseq_PHICH,
                   //ngroup_PHICH,
-                  ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK,
+                  ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK,
                   subframe);
           */
         }
@@ -1501,27 +1501,27 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
         // if no format0 DCI was transmitted by MAC, prepare the
         // MCS parameters for the retransmission
 
-        if ((ulsch_eNB[UE_id]->harq_processes[harq_pid]->dci_alloc == 0) &&
-            (ulsch_eNB[UE_id]->harq_processes[harq_pid]->rar_alloc == 0) ) {
-          if (ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK==0 ) {
+        if ((ulsch[UE_id]->harq_processes[harq_pid]->dci_alloc == 0) &&
+            (ulsch[UE_id]->harq_processes[harq_pid]->rar_alloc == 0) ) {
+          if (ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK==0 ) {
             LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d, subframe %d : PHICH NACK / (no format0 DCI) Setting subframe_scheduling_flag\n",
-                  phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->rvidx = rv_table[ulsch_eNB[UE_id]->harq_processes[harq_pid]->round&3];
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->O_RI                                  = 0;
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or2                                   = 0;
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or1                                   = 0;
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->uci_format                            = HLC_subband_cqi_nopmi;
+                  eNB->Mod_id,harq_pid,eNB->proc[thread_id].frame_tx,subframe);
+            ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
+            ulsch[UE_id]->harq_processes[harq_pid]->rvidx = rv_table[ulsch[UE_id]->harq_processes[harq_pid]->round&3];
+            ulsch[UE_id]->harq_processes[harq_pid]->O_RI                                  = 0;
+            ulsch[UE_id]->harq_processes[harq_pid]->Or2                                   = 0;
+            ulsch[UE_id]->harq_processes[harq_pid]->Or1                                   = 0;
+            ulsch[UE_id]->harq_processes[harq_pid]->uci_format                            = HLC_subband_cqi_nopmi;
 
           } else {
             LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d PHICH ACK (no format0 DCI) Clearing subframe_scheduling_flag, setting round to 0\n",
-                  phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
-            ulsch_eNB[UE_id]->harq_processes[harq_pid]->round=0;
+                  eNB->Mod_id,harq_pid,eNB->proc[thread_id].frame_tx,subframe);
+            ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
+            ulsch[UE_id]->harq_processes[harq_pid]->round=0;
           }
         }
 
-        ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_active=0;
+        ulsch[UE_id]->harq_processes[harq_pid]->phich_active=0;
       } // phich_active==1
     } //ulsch_ue[UE_id] is non-null
   }// UE loop
diff --git a/openair1/PHY/LTE_TRANSPORT/pilots.c b/openair1/PHY/LTE_TRANSPORT/pilots.c
index 66e32fcb4977cfac5dac2534f180534ae6abe6d1..3e84c837475a45dea68718ed5c4e2ae42b439e6e 100644
--- a/openair1/PHY/LTE_TRANSPORT/pilots.c
+++ b/openair1/PHY/LTE_TRANSPORT/pilots.c
@@ -40,13 +40,13 @@
 //#include "defs.h"
 #include "PHY/defs.h"
 
-void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
+void generate_pilots(PHY_VARS_eNB *eNB,
                      int32_t **txdataF,
                      int16_t amp,
                      uint16_t Ntti)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
 
   uint32_t tti,tti_offset,slot_offset,Nsymb,samples_per_symbol;
   uint8_t second_pilot;
@@ -71,7 +71,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
     //Generate Pilots
 
     //antenna 0 symbol 0 slot 0
-    lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset],
+    lte_dl_cell_spec(eNB,&txdataF[0][tti_offset],
                      amp,
                      slot_offset,
                      0,
@@ -80,7 +80,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
 
     //    printf("tti %d : second_pilot offset %d \n",tti,tti_offset+(second_pilot*samples_per_symbol));
     //antenna 0 symbol 3/4 slot 0
-    lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+(second_pilot*samples_per_symbol)],
+    lte_dl_cell_spec(eNB,&txdataF[0][tti_offset+(second_pilot*samples_per_symbol)],
                      amp,
                      slot_offset,
                      1,
@@ -88,7 +88,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
 
     //    printf("tti %d : third_pilot offset %d \n",tti,tti_offset+((Nsymb>>1)*samples_per_symbol));
     //antenna 0 symbol 0 slot 1
-    lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+((Nsymb>>1)*samples_per_symbol)],
+    lte_dl_cell_spec(eNB,&txdataF[0][tti_offset+((Nsymb>>1)*samples_per_symbol)],
                      amp,
                      1+slot_offset,
                      0,
@@ -96,7 +96,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
 
     //    printf("tti %d : third_pilot offset %d \n",tti,tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol));
     //antenna 0 symbol 3/4 slot 1
-    lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
+    lte_dl_cell_spec(eNB,&txdataF[0][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
                      amp,
                      1+slot_offset,
                      1,
@@ -106,28 +106,28 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
     if (frame_parms->nb_antennas_tx > 1) {
       if (frame_parms->mode1_flag) {
         // antenna 1 symbol 0 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset],
                          amp,
                          slot_offset,
                          0,
                          0);
 
         // antenna 1 symbol 3 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)],
                          amp,
                          slot_offset,
                          1,
                          0);
 
         //antenna 1 symbol 0 slot 1
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol],
                          amp,
                          1+slot_offset,
                          0,
                          0);
 
         // antenna 1 symbol 3 slot 1
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
                          amp,
                          1+slot_offset,
                          1,
@@ -136,28 +136,28 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
       } else {
 
         // antenna 1 symbol 0 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset],
                          amp,
                          slot_offset,
                          0,
                          1);
 
         // antenna 1 symbol 3 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)],
                          amp,
                          slot_offset,
                          1,
                          1);
 
         //antenna 1 symbol 0 slot 1
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol],
                          amp,
                          1+slot_offset,
                          0,
                          1);
 
         // antenna 1 symbol 3 slot 1
-        lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
+        lte_dl_cell_spec(eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)],
                          amp,
                          1+slot_offset,
                          1,
@@ -167,14 +167,14 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB,
   }
 }
 
-int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
+int generate_pilots_slot(PHY_VARS_eNB *eNB,
                          int32_t **txdataF,
                          int16_t amp,
                          uint16_t slot,
                          int first_pilot_only)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   uint32_t slot_offset,Nsymb,samples_per_symbol;
   uint8_t second_pilot;
 
@@ -194,7 +194,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
   //Generate Pilots
 
   //antenna 0 symbol 0 slot 0
-  lte_dl_cell_spec(phy_vars_eNB,
+  lte_dl_cell_spec(eNB,
                    &txdataF[0][slot_offset],
                    amp,
                    slot,
@@ -204,7 +204,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
 
   if (first_pilot_only==0) {
     //antenna 0 symbol 3 slot 0
-    lte_dl_cell_spec(phy_vars_eNB,
+    lte_dl_cell_spec(eNB,
                      &txdataF[0][slot_offset+(second_pilot*samples_per_symbol)],
                      amp,
                      slot,
@@ -215,7 +215,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
   if (frame_parms->nb_antennas_tx > 1) {
     if (frame_parms->mode1_flag) {
       // antenna 1 symbol 0 slot 0
-      lte_dl_cell_spec(phy_vars_eNB,
+      lte_dl_cell_spec(eNB,
                        &txdataF[1][slot_offset],
                        amp,
                        slot,
@@ -224,7 +224,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
 
       if (first_pilot_only==0) {
         // antenna 1 symbol 3 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,
+        lte_dl_cell_spec(eNB,
                          &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)],
                          amp,
                          slot,
@@ -234,7 +234,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
     } else {
 
       // antenna 1 symbol 0 slot 0
-      lte_dl_cell_spec(phy_vars_eNB,
+      lte_dl_cell_spec(eNB,
                        &txdataF[1][slot_offset],
                        amp,
                        slot,
@@ -243,7 +243,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB,
 
       if (first_pilot_only == 0) {
         // antenna 1 symbol 3 slot 0
-        lte_dl_cell_spec(phy_vars_eNB,
+        lte_dl_cell_spec(eNB,
                          &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)],
                          amp,
                          slot,
diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
index 168f3db17c08354d20cdb677b290e7d97878f9ec..4e0d6bba02670a0a9487f0c84f29c2d4bd9ae1f5 100644
--- a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
+++ b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
@@ -41,13 +41,13 @@
 #include "PHY/defs.h"
 
 
-int generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB,
+int generate_mbsfn_pilot(PHY_VARS_eNB *eNB,
                          int32_t **txdataF,
                          int16_t amp,
                          uint16_t subframe)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   uint32_t subframe_offset,Nsymb,samples_per_symbol;
 
 
@@ -66,7 +66,7 @@ int generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB,
   //Generate Pilots
 
   //antenna 4 symbol 2 Slot 0
-  lte_dl_mbsfn(phy_vars_eNB,
+  lte_dl_mbsfn(eNB,
                &txdataF[0][subframe_offset+(2*samples_per_symbol)],
                amp,
                subframe,
@@ -75,14 +75,14 @@ int generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB,
 
 
   //antenna 4 symbol 0 slot 1
-  lte_dl_mbsfn(phy_vars_eNB,
+  lte_dl_mbsfn(eNB,
                &txdataF[0][subframe_offset+(6*samples_per_symbol)],
                amp,
                subframe,
                1);
 
   //antenna 4 symbol 4 slot 1
-  lte_dl_mbsfn(phy_vars_eNB,
+  lte_dl_mbsfn(eNB,
                &txdataF[0][subframe_offset+(10*samples_per_symbol)],
                amp,
                subframe,
diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c
index 7b93201dd0f0a8e00d1602e41fe9ef94a0d8fc23..56a01b940e58f1ea02d445c9bcc340caf591cd29 100644
--- a/openair1/PHY/LTE_TRANSPORT/pmch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pmch.c
@@ -48,50 +48,50 @@
 
 
 
-void dump_mch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int subframe)
+void dump_mch(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int subframe)
 {
 
   unsigned int nsymb_pmch=12;
   char fname[32],vname[32];
-  int N_RB_DL=phy_vars_ue->lte_frame_parms.N_RB_DL;
+  int N_RB_DL=ue->frame_parms.N_RB_DL;
 
   sprintf(fname,"mch_rxF_ext0.m");
   sprintf(vname,"pmch_rxF_ext0");
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb_pmch,1,1);
+  write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb_pmch,1,1);
   sprintf(fname,"mch_ch_ext00.m");
   sprintf(vname,"pmch_ch_ext00");
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb_pmch,1,1);
+  write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb_pmch,1,1);
   /*
-    write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb_pmch,1,1);
-    write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb_pmch,1,1);
-    write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb_pmch,1,1);
-    write_output("dlsch%d_rho.m","dl_rho",lte_ue_pdsch_vars[eNB_id]->rho[0],12*N_RB_DL*nsymb_pmch,1,1);
+    write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb_pmch,1,1);
+    write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb_pmch,1,1);
+    write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb_pmch,1,1);
+    write_output("dlsch%d_rho.m","dl_rho",pdsch_vars[eNB_id]->rho[0],12*N_RB_DL*nsymb_pmch,1,1);
   */
   sprintf(fname,"mch_rxF_comp0.m");
   sprintf(vname,"pmch_rxF_comp0");
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb_pmch,1,1);
+  write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb_pmch,1,1);
   sprintf(fname,"mch_rxF_llr.m");
   sprintf(vname,"pmch_llr");
-  write_output(fname,vname, phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->llr[0],coded_bits_per_codeword,1,0);
+  write_output(fname,vname, ue->pdsch_vars_MCH[eNB_id]->llr[0],coded_bits_per_codeword,1,0);
   sprintf(fname,"mch_mag1.m");
   sprintf(vname,"pmch_mag1");
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb_pmch,1,1);
+  write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb_pmch,1,1);
   sprintf(fname,"mch_mag2.m");
   sprintf(vname,"pmch_mag2");
-  write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1);
+  write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1);
 
   write_output("mch00_ch0.m","pmch00_ch0",
-               &(phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][0][0]),
-               phy_vars_ue->lte_frame_parms.ofdm_symbol_size*12,1,1);
+               &(ue->common_vars.dl_ch_estimates[eNB_id][0][0]),
+               ue->frame_parms.ofdm_symbol_size*12,1,1);
 
   write_output("rxsig_mch.m","rxs_mch",
-               &phy_vars_ue->lte_ue_common_vars.rxdata[0][subframe*phy_vars_ue->lte_frame_parms.samples_per_tti],
-               phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+               &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],
+               ue->frame_parms.samples_per_tti,1,1);
 
   if (PHY_vars_eNB_g)
     write_output("txsig_mch.m","txs_mch",
-                 &PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0][subframe*phy_vars_ue->lte_frame_parms.samples_per_tti],
-                 phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+                 &PHY_vars_eNB_g[0][0]->common_vars.txdata[0][0][subframe*ue->frame_parms.samples_per_tti],
+                 ue->frame_parms.samples_per_tti,1,1);
 }
 
 int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_parms)
@@ -190,11 +190,11 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
   return(0);
 }
 
-void fill_eNB_dlsch_MCH(PHY_VARS_eNB *phy_vars_eNB,int mcs,int ndi,int rvidx, int abstraction_flag)
+void fill_eNB_dlsch_MCH(PHY_VARS_eNB *eNB,int mcs,int ndi,int rvidx, int abstraction_flag)
 {
 
-  LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB_MCH;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms;
+  LTE_eNB_DLSCH_t *dlsch = eNB->dlsch_MCH;
+  LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms;
 
   //  dlsch->rnti   = M_RNTI;
   dlsch->harq_processes[0]->mcs   = mcs;
@@ -228,23 +228,23 @@ void fill_eNB_dlsch_MCH(PHY_VARS_eNB *phy_vars_eNB,int mcs,int ndi,int rvidx, in
   }
 
   if (abstraction_flag) {
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].cntl.pmch_flag=1;
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_pmch=1; // assumption: there is always one pmch in each SF
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_common_dci=0;
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_ue_spec_dci=0;
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].dlsch_type[0]=5;// put at the reserved position for PMCH
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].harq_pid[0]=0;
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].ue_id[0]=255;//broadcast
-    eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].tbs[0]=dlsch->harq_processes[0]->TBS>>3;
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].cntl.pmch_flag=1;
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].num_pmch=1; // assumption: there is always one pmch in each SF
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].num_common_dci=0;
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].num_ue_spec_dci=0;
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].dlsch_type[0]=5;// put at the reserved position for PMCH
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].harq_pid[0]=0;
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].ue_id[0]=255;//broadcast
+    eNB_transport_info[eNB->Mod_id][eNB->CC_id].tbs[0]=dlsch->harq_processes[0]->TBS>>3;
   }
 
 }
 
-void fill_UE_dlsch_MCH(PHY_VARS_UE *phy_vars_ue,int mcs,int ndi,int rvidx,int eNB_id)
+void fill_UE_dlsch_MCH(PHY_VARS_UE *ue,int mcs,int ndi,int rvidx,int eNB_id)
 {
 
-  LTE_UE_DLSCH_t *dlsch = phy_vars_ue->dlsch_ue_MCH[eNB_id];
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_UE_DLSCH_t *dlsch = ue->dlsch_MCH[eNB_id];
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
 
   //  dlsch->rnti   = M_RNTI;
   dlsch->harq_processes[0]->mcs   = mcs;
@@ -286,59 +286,59 @@ void fill_UE_dlsch_MCH(PHY_VARS_UE *phy_vars_ue,int mcs,int ndi,int rvidx,int eN
   }
 }
 
-void generate_mch(PHY_VARS_eNB *phy_vars_eNB,int sched_subframe,uint8_t *a,int abstraction_flag)
+void generate_mch(PHY_VARS_eNB *eNB,int thread_id,uint8_t *a,int abstraction_flag)
 {
 
   int G;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
+  int subframe = eNB->proc[thread_id].subframe_tx;
 
   if (abstraction_flag != 0) {
-    if (eNB_transport_info_TB_index[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]!=0)
-      printf("[PHY][EMU] PMCH transport block position is different than zero %d \n", eNB_transport_info_TB_index[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]);
+    if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0)
+      printf("[PHY][EMU] PMCH transport block position is different than zero %d \n", eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]);
 
-    memcpy(phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->b,
+    memcpy(eNB->dlsch_MCH->harq_processes[0]->b,
            a,
-           phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
+           eNB->dlsch_MCH->harq_processes[0]->TBS>>3);
     LOG_D(PHY, "[eNB %d] dlsch_encoding_emul pmch , tbs is %d \n",
-          phy_vars_eNB->Mod_id,
-          phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
+          eNB->Mod_id,
+          eNB->dlsch_MCH->harq_processes[0]->TBS>>3);
 
-    memcpy(&eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].transport_blocks[eNB_transport_info_TB_index[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]],
+    memcpy(&eNB_transport_info[eNB->Mod_id][eNB->CC_id].transport_blocks[eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]],
            a,
-           phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
-    eNB_transport_info_TB_index[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]+= phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3;//=eNB_transport_info[phy_vars_eNB->Mod_id].tbs[0];
+           eNB->dlsch_MCH->harq_processes[0]->TBS>>3);
+    eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]+= eNB->dlsch_MCH->harq_processes[0]->TBS>>3;//=eNB_transport_info[eNB->Mod_id].tbs[0];
   } else {
-    G = get_G(&phy_vars_eNB->lte_frame_parms,
-              phy_vars_eNB->lte_frame_parms.N_RB_DL,
-              phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->rb_alloc,
-              get_Qm(phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->mcs),1,
-              2,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
-
-    generate_mbsfn_pilot(phy_vars_eNB,
-                         phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
+    G = get_G(&eNB->frame_parms,
+              eNB->frame_parms.N_RB_DL,
+              eNB->dlsch_MCH->harq_processes[0]->rb_alloc,
+              get_Qm(eNB->dlsch_MCH->harq_processes[0]->mcs),1,
+              2,eNB->proc[thread_id].frame_tx,subframe);
+
+    generate_mbsfn_pilot(eNB,
+                         eNB->common_vars.txdataF[0],
                          AMP,
                          subframe);
 
     if (dlsch_encoding(a,
-                       &phy_vars_eNB->lte_frame_parms,
+                       &eNB->frame_parms,
                        1,
-                       phy_vars_eNB->dlsch_eNB_MCH,
-                       phy_vars_eNB->proc[sched_subframe].frame_tx,
+                       eNB->dlsch_MCH,
+                       eNB->proc[thread_id].frame_tx,
                        subframe,
-                       &phy_vars_eNB->dlsch_rate_matching_stats,
-                       &phy_vars_eNB->dlsch_turbo_encoding_stats,
-                       &phy_vars_eNB->dlsch_interleaving_stats
+                       &eNB->dlsch_rate_matching_stats,
+                       &eNB->dlsch_turbo_encoding_stats,
+                       &eNB->dlsch_interleaving_stats
                       )<0)
       mac_xface->macphy_exit("problem in dlsch_encoding");
 
-    dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,1,phy_vars_eNB->dlsch_eNB_MCH,G,0,subframe<<1);
+    dlsch_scrambling(&eNB->frame_parms,1,eNB->dlsch_MCH,G,0,subframe<<1);
 
 
-    mch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
+    mch_modulation(eNB->common_vars.txdataF[0],
                    AMP,
                    subframe,
-                   &phy_vars_eNB->lte_frame_parms,
-                   phy_vars_eNB->dlsch_eNB_MCH);
+                   &eNB->frame_parms,
+                   eNB->dlsch_MCH);
   }
 
 }
@@ -962,30 +962,30 @@ void mch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
 }
 
 int avg_pmch[4];
-int rx_pmch(PHY_VARS_UE *phy_vars_ue,
+int rx_pmch(PHY_VARS_UE *ue,
             unsigned char eNB_id,
             uint8_t subframe,
             unsigned char symbol)
 {
 
-  LTE_UE_COMMON *lte_ue_common_vars  = &phy_vars_ue->lte_ue_common_vars;
-  LTE_UE_PDSCH **lte_ue_pdsch_vars   = &phy_vars_ue->lte_ue_pdsch_vars_MCH[eNB_id];
-  LTE_DL_FRAME_PARMS *frame_parms    = &phy_vars_ue->lte_frame_parms;
-  LTE_UE_DLSCH_t   **dlsch_ue        = &phy_vars_ue->dlsch_ue_MCH[eNB_id];
+  LTE_UE_COMMON *common_vars  = &ue->common_vars;
+  LTE_UE_PDSCH **pdsch_vars   = &ue->pdsch_vars_MCH[eNB_id];
+  LTE_DL_FRAME_PARMS *frame_parms    = &ue->frame_parms;
+  LTE_UE_DLSCH_t   **dlsch        = &ue->dlsch_MCH[eNB_id];
   int avgs,aarx;
 
   //printf("*********************mch: symbol %d\n",symbol);
 
-  mch_extract_rbs(lte_ue_common_vars->rxdataF,
-                  lte_ue_common_vars->dl_ch_estimates[eNB_id],
-                  lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                  lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+  mch_extract_rbs(common_vars->rxdataF,
+                  common_vars->dl_ch_estimates[eNB_id],
+                  pdsch_vars[eNB_id]->rxdataF_ext,
+                  pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                   symbol,
                   subframe,
                   frame_parms);
 
   if (symbol == 2) {
-    mch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+    mch_channel_level(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
                       frame_parms,
                       avg_pmch,
                       symbol,
@@ -997,55 +997,55 @@ int rx_pmch(PHY_VARS_UE *phy_vars_ue,
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
     avgs = cmax(avgs,avg_pmch[aarx]);
 
-  if (get_Qm(dlsch_ue[0]->harq_processes[0]->mcs)==2)
-    lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2) ;// + 2
+  if (get_Qm(dlsch[0]->harq_processes[0]->mcs)==2)
+    pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2) ;// + 2
   else
-    lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2); // + 5;// + 2
+    pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2); // + 5;// + 2
 
-  mch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                           lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
-                           lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
+  mch_channel_compensation(pdsch_vars[eNB_id]->rxdataF_ext,
+                           pdsch_vars[eNB_id]->dl_ch_estimates_ext,
+                           pdsch_vars[eNB_id]->dl_ch_mag0,
+                           pdsch_vars[eNB_id]->dl_ch_magb0,
+                           pdsch_vars[eNB_id]->rxdataF_comp0,
                            frame_parms,
                            symbol,
-                           get_Qm(dlsch_ue[0]->harq_processes[0]->mcs),
-                           lte_ue_pdsch_vars[eNB_id]->log2_maxh);
+                           get_Qm(dlsch[0]->harq_processes[0]->mcs),
+                           pdsch_vars[eNB_id]->log2_maxh);
 
 
   if (frame_parms->nb_antennas_rx > 1)
     mch_detection_mrc(frame_parms,
-                      lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                      lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                      lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
+                      pdsch_vars[eNB_id]->rxdataF_comp0,
+                      pdsch_vars[eNB_id]->dl_ch_mag0,
+                      pdsch_vars[eNB_id]->dl_ch_magb0,
                       symbol);
 
-  switch (get_Qm(dlsch_ue[0]->harq_processes[0]->mcs)) {
+  switch (get_Qm(dlsch[0]->harq_processes[0]->mcs)) {
   case 2 :
     mch_qpsk_llr(frame_parms,
-                 lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                 lte_ue_pdsch_vars[eNB_id]->llr[0],
+                 pdsch_vars[eNB_id]->rxdataF_comp0,
+                 pdsch_vars[eNB_id]->llr[0],
                  symbol,
-                 lte_ue_pdsch_vars[eNB_id]->llr128);
+                 pdsch_vars[eNB_id]->llr128);
     break;
 
   case 4:
     mch_16qam_llr(frame_parms,
-                  lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                  lte_ue_pdsch_vars[eNB_id]->llr[0],
-                  lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
+                  pdsch_vars[eNB_id]->rxdataF_comp0,
+                  pdsch_vars[eNB_id]->llr[0],
+                  pdsch_vars[eNB_id]->dl_ch_mag0,
                   symbol,
-                  lte_ue_pdsch_vars[eNB_id]->llr128);
+                  pdsch_vars[eNB_id]->llr128);
     break;
 
   case 6:
     mch_64qam_llr(frame_parms,
-                  lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
-                  lte_ue_pdsch_vars[eNB_id]->llr[0],
-                  lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0,
-                  lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0,
+                  pdsch_vars[eNB_id]->rxdataF_comp0,
+                  pdsch_vars[eNB_id]->llr[0],
+                  pdsch_vars[eNB_id]->dl_ch_mag0,
+                  pdsch_vars[eNB_id]->dl_ch_magb0,
                   symbol,
-                  lte_ue_pdsch_vars[eNB_id]->llr128);
+                  pdsch_vars[eNB_id]->llr128);
     break;
   }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index 5e58b13737c88e1972aeb501af02284eb8472da9..c18982f1703f84deb027a26fc065a38c041c0432 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -595,23 +595,23 @@ int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t su
   return(2==1);
 }
 
-int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf )
+int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf )
 {
 
-  lte_frame_type_t frame_type         = phy_vars_ue->lte_frame_parms.frame_type;
-  //uint8_t tdd_config         = phy_vars_ue->lte_frame_parms.tdd_config;
-  uint16_t rootSequenceIndex = phy_vars_ue->lte_frame_parms.prach_config_common.rootSequenceIndex;
-  uint8_t prach_ConfigIndex  = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
-  uint8_t Ncs_config         = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
-  uint8_t restricted_set     = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
-  //uint8_t n_ra_prboffset     = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
-  uint8_t preamble_index     = phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex;
-  uint8_t tdd_mapindex       = phy_vars_ue->prach_resources[eNB_id]->ra_TDD_map_index;
-  int16_t *prachF           = phy_vars_ue->lte_ue_prach_vars[eNB_id]->prachF;
+  lte_frame_type_t frame_type         = ue->frame_parms.frame_type;
+  //uint8_t tdd_config         = ue->frame_parms.tdd_config;
+  uint16_t rootSequenceIndex = ue->frame_parms.prach_config_common.rootSequenceIndex;
+  uint8_t prach_ConfigIndex  = ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
+  uint8_t Ncs_config         = ue->frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
+  uint8_t restricted_set     = ue->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
+  //uint8_t n_ra_prboffset     = ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
+  uint8_t preamble_index     = ue->prach_resources[eNB_id]->ra_PreambleIndex;
+  uint8_t tdd_mapindex       = ue->prach_resources[eNB_id]->ra_TDD_map_index;
+  int16_t *prachF           = ue->prach_vars[eNB_id]->prachF;
   static int16_t prach_tmp[45600*2] __attribute__((aligned(32)));
   int16_t *prach            = prach_tmp;
   int16_t *prach2;
-  int16_t amp               = phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp;
+  int16_t amp               = ue->prach_vars[eNB_id]->amp;
   int16_t Ncp;
   uint8_t n_ra_prb;
   uint16_t NCS;
@@ -634,23 +634,20 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   int i, prach_len;
   uint16_t first_nonzero_root_idx=0;
 
-#ifdef BIT8_TX
-  prach_start = ((subframe*phy_vars_ue->lte_frame_parms.samples_per_tti)<<1)-phy_vars_ue->N_TA_offset;
-#else
 #if defined(EXMIMO) || defined(OAI_USRP)
-  prach_start =  (phy_vars_ue->rx_offset+subframe*phy_vars_ue->lte_frame_parms.samples_per_tti-phy_vars_ue->hw_timing_advance-phy_vars_ue->N_TA_offset);
+  prach_start =  (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
 
   if (prach_start<0)
-    prach_start+=(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
+    prach_start+=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
 
-  if (prach_start>=(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
-    prach_start-=(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
+  if (prach_start>=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
+    prach_start-=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
 
 #else //normal case (simulation)
-  prach_start = subframe*phy_vars_ue->lte_frame_parms.samples_per_tti-phy_vars_ue->N_TA_offset;
-#endif
+  prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset;
 #endif
 
+
   // First compute physical root sequence
   if (restricted_set == 0) {
     if (Ncs_config > 15) {
@@ -670,7 +667,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
     NCS = NCS_restricted[Ncs_config];
   }
 
-  n_ra_prb = get_prach_prb_offset(&(phy_vars_ue->lte_frame_parms), tdd_mapindex, Nf);
+  n_ra_prb = get_prach_prb_offset(&(ue->frame_parms), tdd_mapindex, Nf);
   prach_root_sequence_map = (prach_fmt<4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
 
   /*
@@ -678,7 +675,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   if (frame_type == TDD) { // TDD
 
     if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) {
-      LOG_E( PHY, "[PHY][UE %"PRIu8"] Illegal prach_ConfigIndex %"PRIu8" for ", phy_vars_ue->Mod_id, prach_ConfigIndex );
+      LOG_E( PHY, "[PHY][UE %"PRIu8"] Illegal prach_ConfigIndex %"PRIu8" for ", ue->Mod_id, prach_ConfigIndex );
     }
 
     // adjust n_ra_prboffset for frequency multiplexing (p.36 36.211)
@@ -688,7 +685,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
       if ((f_ra&1) == 0) {
         n_ra_prb = n_ra_prboffset + 6*(f_ra>>1);
       } else {
-        n_ra_prb = phy_vars_ue->lte_frame_parms.N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
+        n_ra_prb = ue->frame_parms.N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
       }
     } else {
       if ((tdd_config >2) && (tdd_config<6))
@@ -699,7 +696,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
       if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) {
         n_ra_prb = 6*f_ra;
       } else {
-        n_ra_prb = phy_vars_ue->lte_frame_parms.N_RB_UL - 6*(f_ra+1);
+        n_ra_prb = ue->frame_parms.N_RB_UL - 6*(f_ra+1);
       }
     }
   }
@@ -715,7 +712,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   } else { // This is the high-speed case
 
 #ifdef PRACH_DEBUG
-    LOG_D(PHY,"[UE %d] High-speed mode, NCS_config %d\n",phy_vars_ue->Mod_id,Ncs_config);
+    LOG_D(PHY,"[UE %d] High-speed mode, NCS_config %d\n",ue->Mod_id,Ncs_config);
 #endif
 
     not_found = 1;
@@ -785,24 +782,24 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   //  nsymb = (frame_parms->Ncp==0) ? 14:12;
   //  subframe_offset = (unsigned int)frame_parms->ofdm_symbol_size*subframe*nsymb;
 
-  k = (12*n_ra_prb) - 6*phy_vars_ue->lte_frame_parms.N_RB_UL;
+  k = (12*n_ra_prb) - 6*ue->frame_parms.N_RB_UL;
 
   if (k<0)
-    k+=phy_vars_ue->lte_frame_parms.ofdm_symbol_size;
+    k+=ue->frame_parms.ofdm_symbol_size;
 
   k*=12;
   k+=13;
 
-  Xu = (int16_t*)phy_vars_ue->X_u[preamble_offset-first_nonzero_root_idx];
+  Xu = (int16_t*)ue->X_u[preamble_offset-first_nonzero_root_idx];
 
   /*
-    k+=(12*phy_vars_ue->lte_frame_parms.first_carrier_offset);
-    if (k>(12*phy_vars_ue->lte_frame_parms.ofdm_symbol_size))
-    k-=(12*phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
+    k+=(12*ue->frame_parms.first_carrier_offset);
+    if (k>(12*ue->frame_parms.ofdm_symbol_size))
+    k-=(12*ue->frame_parms.ofdm_symbol_size);
   */
   k*=2;
 
-  switch (phy_vars_ue->lte_frame_parms.N_RB_UL) {
+  switch (ue->frame_parms.N_RB_UL) {
   case 6:
     memset((void*)prachF,0,4*1536);
     break;
@@ -838,7 +835,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
     prachF[k++]= ((Xu_re*ru[offset2<<1]) - (Xu_im*ru[1+(offset2<<1)]))>>15;
     prachF[k++]= ((Xu_im*ru[offset2<<1]) + (Xu_re*ru[1+(offset2<<1)]))>>15;
 
-    if (k==(12*2*phy_vars_ue->lte_frame_parms.ofdm_symbol_size))
+    if (k==(12*2*ue->frame_parms.ofdm_symbol_size))
       k=0;
   }
 
@@ -865,7 +862,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
     break;
   }
 
-  switch (phy_vars_ue->lte_frame_parms.N_RB_UL) {
+  switch (ue->frame_parms.N_RB_UL) {
   case 6:
     Ncp>>=4;
     prach+=4; // makes prach2 aligned to 128-bit
@@ -891,7 +888,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   prach2 = prach+(Ncp<<1);
 
   // do IDFT
-  switch (phy_vars_ue->lte_frame_parms.N_RB_UL) {
+  switch (ue->frame_parms.N_RB_UL) {
   case 6:
     if (prach_fmt == 4) {
       idft256(prachF,prach2,1);
@@ -1015,34 +1012,34 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
   } else {
 #if defined(EXMIMO) || defined(OAI_USRP)
     int j;
-    int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_ue->lte_frame_parms.samples_per_tti;
+    int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
     LOG_D( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
 
-    for (i=prach_start,j=0; i<min(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
-      ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i] = prach[2*j]<<4;
-      ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i+1] = prach[2*j+1]<<4;
+    for (i=prach_start,j=0; i<min(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
+      ((int16_t*)ue->common_vars.txdata[0])[2*i] = prach[2*j]<<4;
+      ((int16_t*)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1]<<4;
     }
 
     for (i=0; i<overflow; i++,j++) {
-      ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i] = prach[2*j]<<4;
-      ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i+1] = prach[2*j+1]<<4;
+      ((int16_t*)ue->common_vars.txdata[0])[2*i] = prach[2*j]<<4;
+      ((int16_t*)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1]<<4;
     }
 #if defined(EXMIMO)
 	    // handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
-	    for (k=prach_start - (phy_vars_ue->lte_frame_parms.samples_per_tti>>1) ; k<prach_start ; k++) {
+	    for (k=prach_start - (ue->frame_parms.samples_per_tti>>1) ; k<prach_start ; k++) {
 	      if (k<0)
-		phy_vars_ue->lte_ue_common_vars.txdata[0][k+phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
-	      else if (k>(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
-		phy_vars_ue->lte_ue_common_vars.txdata[0][k-phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+		ue->common_vars.txdata[0][k+ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+	      else if (k>(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
+		ue->common_vars.txdata[0][k-ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
 	      else
-		phy_vars_ue->lte_ue_common_vars.txdata[0][k] &= 0xFFFEFFFE;
+		ue->common_vars.txdata[0][k] &= 0xFFFEFFFE;
 	    }
 #endif
 #else
 
     for (i=0; i<prach_len; i++) {
-      ((int16_t*)(&phy_vars_ue->lte_ue_common_vars.txdata[0][prach_start]))[2*i] = prach[2*i];
-      ((int16_t*)(&phy_vars_ue->lte_ue_common_vars.txdata[0][prach_start]))[2*i+1] = prach[2*i+1];
+      ((int16_t*)(&ue->common_vars.txdata[0][prach_start]))[2*i] = prach[2*i];
+      ((int16_t*)(&ue->common_vars.txdata[0][prach_start]))[2*i+1] = prach[2*i+1];
     }
 
 #endif
@@ -1058,7 +1055,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
 }
 //__m128i mmtmpX0,mmtmpX1,mmtmpX2,mmtmpX3;
 
-void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
+void rx_prach(PHY_VARS_eNB *eNB,
 	      uint8_t subframe,
 	      uint16_t *preamble_energy_list, 
 	      uint16_t *preamble_delay_list, 
@@ -1067,16 +1064,16 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
 {
 
   int i;
-  lte_frame_type_t frame_type = phy_vars_eNB->lte_frame_parms.frame_type;
-
-  uint16_t rootSequenceIndex  = phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex;
-  uint8_t prach_ConfigIndex   = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
-  uint8_t Ncs_config          = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
-  uint8_t restricted_set      = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
-  int16_t *prachF             = phy_vars_eNB->lte_eNB_prach_vars.prachF;
-  int16_t **rxsigF            = phy_vars_eNB->lte_eNB_prach_vars.rxsigF;
-  int16_t **prach_ifft        = phy_vars_eNB->lte_eNB_prach_vars.prach_ifft;
-  int16_t *prach[4];
+  lte_frame_type_t frame_type = eNB->frame_parms.frame_type;
+
+  uint16_t rootSequenceIndex  = eNB->frame_parms.prach_config_common.rootSequenceIndex;
+  uint8_t prach_ConfigIndex   = eNB->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
+  uint8_t Ncs_config          = eNB->frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
+  uint8_t restricted_set      = eNB->frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
+  int16_t *prachF             = eNB->prach_vars.prachF;
+  int16_t **rxsigF            = eNB->prach_vars.rxsigF;
+  int16_t **prach_ifft        = eNB->prach_vars.prach_ifft;
+  int16_t *prach[eNB->frame_parms.nb_antennas_rx];
   int16_t *prach2;
   uint8_t n_ra_prb;
   uint8_t preamble_index;
@@ -1102,10 +1099,10 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
   int32_t lev;
   int16_t levdB;
   int fft_size,log2_ifft_size;
-  uint8_t nb_ant_rx = 1; //phy_vars_eNB->lte_frame_parms.nb_antennas_rx;
+  uint8_t nb_ant_rx = 1; //eNB->frame_parms.nb_antennas_rx;
 
   for (aa=0; aa<nb_ant_rx; aa++) {
-    prach[aa] = (int16_t*)&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][aa][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti-phy_vars_eNB->N_TA_offset];
+    prach[aa] = (int16_t*)&eNB->common_vars.rxdata[0][aa][subframe*eNB->frame_parms.samples_per_tti-eNB->N_TA_offset];
   }
 
   // First compute physical root sequence
@@ -1127,9 +1124,9 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
     NCS = NCS_restricted[Ncs_config];
   }
 
-  start_meas(&phy_vars_eNB->rx_prach);
+  start_meas(&eNB->rx_prach);
 
-  n_ra_prb = get_prach_prb_offset(&(phy_vars_eNB->lte_frame_parms),tdd_mapindex,Nf);
+  n_ra_prb = get_prach_prb_offset(&(eNB->frame_parms),tdd_mapindex,Nf);
   prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
 
   // PDP is oversampled, e.g. 1024 sample instead of 839
@@ -1162,7 +1159,7 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
     break;
   }
 
-  switch (phy_vars_eNB->lte_frame_parms.N_RB_UL) {
+  switch (eNB->frame_parms.N_RB_UL) {
   case 6:
     Ncp>>=4;
     break;
@@ -1184,23 +1181,123 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
     break;
   }
 
+
+  if ((eNB->node_function == eNodeB_3GPP) ||
+      (eNB->node_function == NGFI_RRU_IF4)) { // compute the DFTs of the PRACH temporal resources
+    // Do forward transform
+    for (aa=0; aa<nb_ant_rx; aa++) {
+      prach2 = prach[aa] + (Ncp<<1);
+  
+      // do DFT
+      switch (eNB->frame_parms.N_RB_UL) {
+      case 6:
+	if (prach_fmt == 4) {
+	  dft256(prach2,rxsigF[aa],1);
+	} else {
+	  dft1536(prach2,rxsigF[aa],1);
+	  
+	  if (prach_fmt>1)
+	    dft1536(prach2+3072,rxsigF[aa]+3072,1);
+	}
+	
+	break;
+	
+      case 15:
+	if (prach_fmt == 4) {
+	  dft256(prach2,rxsigF[aa],1);
+	} else {
+	  dft3072(prach2,rxsigF[aa]);
+	  
+	  if (prach_fmt>1)
+	    dft3072(prach2+6144,rxsigF[aa]+6144);
+	}
+	
+	break;
+	
+      case 25:
+      default:
+	if (prach_fmt == 4) {
+	  dft1024(prach2,rxsigF[aa],1);
+	  fft_size = 1024;
+	} else {
+	  dft6144(prach2,rxsigF[aa]);
+	  
+	  if (prach_fmt>1)
+	    dft6144(prach2+12288,rxsigF[aa]+12288);
+	  
+	  fft_size = 6144;
+	}
+	
+	break;
+	
+      case 50:
+	if (prach_fmt == 4) {
+	  dft2048(prach2,rxsigF[aa],1);
+	} else {
+	  dft12288(prach2,rxsigF[aa]);
+	  
+	  if (prach_fmt>1)
+	    dft12288(prach2+24576,rxsigF[aa]+24576);
+	}
+	
+	break;
+	
+      case 75:
+	if (prach_fmt == 4) {
+	  dft3072(prach2,rxsigF[aa]);
+	} else {
+	  dft18432(prach2,rxsigF[aa]);
+	  
+	  if (prach_fmt>1)
+	    dft18432(prach2+36864,rxsigF[aa]+36864);
+	}
+	
+	break;
+	
+      case 100:
+	if (prach_fmt == 4) {
+	  dft4096(prach2,rxsigF[aa],1);
+	} else {
+	  dft24576(prach2,rxsigF[aa]);
+	  
+	  if (prach_fmt>1)
+	    dft24576(prach2+49152,rxsigF[aa]+49152);
+	}
+	
+	break;
+      }
+    }
+  }
+
+  if (eNB->node_function == NGFI_RRU_IF4) {
+    //send prachF to RCC
+    return;
+  }
+  else if (eNB->node_function == NGFI_RCC_IF4) {
+    //wait for prachF from RRU and continue with PRACH processing
+  }
+
+
+
+  // here onwards is for eNodeB_3GPP or NGFI_RCC_IF4
+
   preamble_offset_old = 99;
 
   for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
     if (restricted_set == 0) {
       // This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
       preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
-
+      
       if (preamble_offset != preamble_offset_old) {
         preamble_offset_old = preamble_offset;
         new_dft = 1;
         // This is the \nu corresponding to the preamble index
         preamble_shift  = 0;
       }
-
+      
       else {
         preamble_shift  -= NCS;
-
+	
         if (preamble_shift < 0)
           preamble_shift+=N_ZC;
       }
@@ -1277,187 +1374,111 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
 
     if (new_dft == 1) {
       new_dft = 0;
-      Xu=(int16_t*)phy_vars_eNB->X_u[preamble_offset-first_nonzero_root_idx];
-
-      for (aa=0; aa<nb_ant_rx; aa++) {
-        prach2 = prach[aa] + (Ncp<<1);
-
-        k = (12*n_ra_prb) - 6*phy_vars_eNB->lte_frame_parms.N_RB_UL;
-
-        if (k<0)
-          k+=(phy_vars_eNB->lte_frame_parms.ofdm_symbol_size);
-
-        k*=12;
-        k+=13; // phi + K/2
-        //      k+=(12*phy_vars_eNB->lte_frame_parms.first_carrier_offset);
-        //      if (k>(12*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size))
-        //  k-=(12*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size);
-
-        // printf("First prach carrier : k %d\n",k);
-        k*=2;
-
-        // do DFT
-        switch (phy_vars_eNB->lte_frame_parms.N_RB_UL) {
-        case 6:
-          if (prach_fmt == 4) {
-            dft256(prach2,rxsigF[aa],1);
-          } else {
-            dft1536(prach2,rxsigF[aa],1);
-
-            if (prach_fmt>1)
-              dft1536(prach2+3072,rxsigF[aa]+3072,1);
-          }
-
-          break;
-
-        case 15:
-          if (prach_fmt == 4) {
-            dft256(prach2,rxsigF[aa],1);
-          } else {
-            dft3072(prach2,rxsigF[aa]);
-
-            if (prach_fmt>1)
-              dft3072(prach2+6144,rxsigF[aa]+6144);
-          }
-
-          break;
-
-        case 25:
-        default:
-          if (prach_fmt == 4) {
-            dft1024(prach2,rxsigF[aa],1);
-            fft_size = 1024;
-          } else {
-            dft6144(prach2,rxsigF[aa]);
-
-            if (prach_fmt>1)
-              dft6144(prach2+12288,rxsigF[aa]+12288);
-
-            fft_size = 6144;
-          }
-
-          break;
-
-        case 50:
-          if (prach_fmt == 4) {
-            dft2048(prach2,rxsigF[aa],1);
-          } else {
-            dft12288(prach2,rxsigF[aa]);
-
-            if (prach_fmt>1)
-              dft12288(prach2+24576,rxsigF[aa]+24576);
-          }
-
-          break;
-
-        case 75:
-          if (prach_fmt == 4) {
-            dft3072(prach2,rxsigF[aa]);
-          } else {
-            dft18432(prach2,rxsigF[aa]);
-
-            if (prach_fmt>1)
-              dft18432(prach2+36864,rxsigF[aa]+36864);
-          }
-
-          break;
-
-        case 100:
-          if (prach_fmt == 4) {
-            dft4096(prach2,rxsigF[aa],1);
-          } else {
-            dft24576(prach2,rxsigF[aa]);
-
-            if (prach_fmt>1)
-              dft24576(prach2+49152,rxsigF[aa]+49152);
-          }
-
-          break;
-        }
-
-        memset( prachF, 0, sizeof(int16_t)*2*1024 );
+      Xu=(int16_t*)eNB->X_u[preamble_offset-first_nonzero_root_idx];
+      
+
+
+      
+      k = (12*n_ra_prb) - 6*eNB->frame_parms.N_RB_UL;
+      
+      if (k<0)
+	k+=(eNB->frame_parms.ofdm_symbol_size);
+      
+      k*=12;
+      k+=13; // phi + K/2
+      //      k+=(12*eNB->frame_parms.first_carrier_offset);
+      //      if (k>(12*eNB->frame_parms.ofdm_symbol_size))
+      //  k-=(12*eNB->frame_parms.ofdm_symbol_size);
+      
+      // printf("First prach carrier : k %d\n",k);
+      k*=2;
+      
+
+      
+      memset( prachF, 0, sizeof(int16_t)*2*1024 );
 #ifdef PRACH_DEBUG
-	write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
+      write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
 #endif
-        // write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
-	//       write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
-        // write_output("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
-
-        // Do componentwise product with Xu*
-        for (offset=0; offset<(N_ZC<<1); offset+=2) {
-          prachF[offset]   = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k]   + (int32_t)Xu[offset+1]*rxsigF[aa][k+1])>>15);
-          prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k+1] - (int32_t)Xu[offset+1]*rxsigF[aa][k])>>15);
-          /*
-          if (offset<16)
-            printf("Xu[%d] %d %d, rxsigF[%d][%d] %d %d\n",offset,Xu[offset],Xu[offset+1],aa,k,rxsigF[aa][k],rxsigF[aa][k+1]);
-          */
-          /*
-              mmtmpX0 = _mm_madd_epi16(*(__m128i*)&Xu[offset],*(__m128i*)&rxsigF[aa][k<<1]);
-              mmtmpX1 = _mm_shufflelo_epi16(*(__m128i*)&Xu[offset],_MM_SHUFFLE(2,3,0,1));
-              mmtmpX1 = _mm_shufflehi_epi16(mmtmpX1,_MM_SHUFFLE(2,3,0,1));
-              mmtmpX1 = _mm_sign_epi16(mmtmpX1,*(__m128i*)&conjugate[0]);
-              mmtmpX1 = _mm_madd_epi16(mmtmpX1,*(__m128i*)&rxsigF[aa][k<<1]);
-              mmtmpX0 = _mm_srai_epi32(mmtmpX0,15);
-              mmtmpX1 = _mm_srai_epi32(mmtmpX1,15);
-              mmtmpX2 = _mm_unpacklo_epi32(mmtmpX0,mmtmpX1);
-              mmtmpX3 = _mm_unpackhi_epi32(mmtmpX0,mmtmpX1);
-              *(__m128i*)&prachF[offset] = _mm_packs_epi32(mmtmpX2,mmtmpX3);
-              */
-          k+=2;
-
-          if (k==(12*2*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size))
-            k=0;
-        }
-
-        // Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
-        if (N_ZC == 839) {
-          log2_ifft_size = 10;
-          idft1024(prachF,prach_ifft[aa],1);
-        } else {
-          idft256(prachF,prach_ifft[aa],1);
-          log2_ifft_size = 8;
-        }
+      // write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
+      //       write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
+      // write_output("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
+
+      for (aa=0;aa<nb_ant_rx; aa++) {
+      // Do componentwise product with Xu*
+	
+	for (offset=0; offset<(N_ZC<<1); offset+=2) {
+	  prachF[offset]   = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k]   + (int32_t)Xu[offset+1]*rxsigF[aa][k+1])>>15);
+	  prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][k+1] - (int32_t)Xu[offset+1]*rxsigF[aa][k])>>15);
+	  /*
+	    if (offset<16)
+	    printf("Xu[%d] %d %d, rxsigF[%d][%d] %d %d\n",offset,Xu[offset],Xu[offset+1],aa,k,rxsigF[aa][k],rxsigF[aa][k+1]);
+	  */
+	  /*
+	    mmtmpX0 = _mm_madd_epi16(*(__m128i*)&Xu[offset],*(__m128i*)&rxsigF[aa][k<<1]);
+	    mmtmpX1 = _mm_shufflelo_epi16(*(__m128i*)&Xu[offset],_MM_SHUFFLE(2,3,0,1));
+	    mmtmpX1 = _mm_shufflehi_epi16(mmtmpX1,_MM_SHUFFLE(2,3,0,1));
+	    mmtmpX1 = _mm_sign_epi16(mmtmpX1,*(__m128i*)&conjugate[0]);
+	    mmtmpX1 = _mm_madd_epi16(mmtmpX1,*(__m128i*)&rxsigF[aa][k<<1]);
+	    mmtmpX0 = _mm_srai_epi32(mmtmpX0,15);
+	    mmtmpX1 = _mm_srai_epi32(mmtmpX1,15);
+	    mmtmpX2 = _mm_unpacklo_epi32(mmtmpX0,mmtmpX1);
+	    mmtmpX3 = _mm_unpackhi_epi32(mmtmpX0,mmtmpX1);
+	    *(__m128i*)&prachF[offset] = _mm_packs_epi32(mmtmpX2,mmtmpX3);
+	    */
+	  k+=2;
+	  
+	  if (k==(12*2*eNB->frame_parms.ofdm_symbol_size))
+	    k=0;
+	}
+	
+	// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
+	if (N_ZC == 839) {
+	  log2_ifft_size = 10;
+	  idft1024(prachF,prach_ifft[aa],1);
+	} else {
+	  idft256(prachF,prach_ifft[aa],1);
+	  log2_ifft_size = 8;
+	}
 #ifdef PRACH_DEBUG
-        write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
+	if (aa==0) write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
 #endif
-        // write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
-
+      // if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
       }// antennas_rx
 #ifdef PRACH_DEBUG
       write_output("prach_ifft0.m","prach_t0",prach_ifft[0],2048,1,1);
 #endif
       // write_output("prach_ifft1.m","prach_t1",prach_ifft[1],2048,1,1);
-
+      
     } // new dft
-
+    
     // check energy in nth time shift
     preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
     preamble_energy_list[preamble_index] = 0;
-
+    
     for (i=0; i<NCS2; i++) {
       lev = 0;
-
+      
       for (aa=0; aa<nb_ant_rx; aa++) {
-        lev += (int32_t)prach_ifft[aa][(preamble_shift2+i)<<1]*prach_ifft[aa][(preamble_shift2+i)<<1] + (int32_t)prach_ifft[aa][1+((preamble_shift2+i)<<1)]*prach_ifft[aa][1+((preamble_shift2+i)<<1)];
+	lev += (int32_t)prach_ifft[aa][(preamble_shift2+i)<<1]*prach_ifft[aa][(preamble_shift2+i)<<1] + (int32_t)prach_ifft[aa][1+((preamble_shift2+i)<<1)]*prach_ifft[aa][1+((preamble_shift2+i)<<1)];
       }
-
+      
       levdB = dB_fixed_times10(lev);
-
+      
       if (levdB>preamble_energy_list[preamble_index] ) {
-        preamble_energy_list[preamble_index]  = levdB;
-        preamble_delay_list[preamble_index]   = (i*fft_size)>>log2_ifft_size;
+	preamble_energy_list[preamble_index]  = levdB;
+	preamble_delay_list[preamble_index]   = (i*fft_size)>>log2_ifft_size;
       }
     }
-
+    
 #ifdef PRACH_DEBUG
     LOG_D(PHY,"[RAPROC] Preamble %d => %d dB, %d (shift %d (%d), NCS2 %d(%d), Ncp %d)\n",preamble_index,preamble_energy_list[preamble_index],preamble_delay_list[preamble_index],preamble_shift2,
-          preamble_shift, NCS2,NCS,Ncp);
+	  preamble_shift, NCS2,NCS,Ncp);
 #endif
     //  exit(-1);
   }// preamble_index
-
-  stop_meas(&phy_vars_eNB->rx_prach);
-
+  
+  stop_meas(&eNB->rx_prach);
+  
 }
 
 void init_prach_tables(int N_ZC)
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 16cc75b290dd615fd28a99ebccd200cb7513bd70..9297d91376e214aedb2c4638db19c6570ef26130 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -55,7 +55,7 @@ extern int mac_get_rrc_status(uint8_t Mod_id,uint8_t eNB_flag,uint8_t index);
 extern openair0_config_t openair0_cfg[];
 #endif
 
-int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t mode, int input_level_dBm)
+int dump_ue_stats(PHY_VARS_UE *ue, char* buffer, int length, runmode_t mode, int input_level_dBm)
 {
 
   uint8_t eNB=0;
@@ -63,493 +63,493 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
   int len=length;
   int harq_pid,round;
 
-  if (phy_vars_ue==NULL)
+  if (ue==NULL)
     return 0;
 
   if ((mode == normal_txrx) || (mode == no_L2_connect)) {
-    len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",phy_vars_ue->Mod_id, phy_vars_ue->lte_ue_pdcch_vars[0]->crnti);
+    len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",ue->Mod_id, ue->pdcch_vars[0]->crnti);
      len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE (NF %.1f dB)\n",
-		    10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB,
-		    10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB, 
-		    10*log10(phy_vars_ue->PHY_measurements.rsrq[0]),
-		    phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
-		    (double)phy_vars_ue->PHY_measurements.n0_power_tot_dBm+132.24);
+		    10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
+		    10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB, 
+		    10*log10(ue->measurements.rsrq[0]),
+		    ue->measurements.n0_power_tot_dBm,
+		    (double)ue->measurements.n0_power_tot_dBm+132.24);
 
     /*
     len += sprintf(&buffer[len],
                    "[UE PROC] Frame count: %d\neNB0 RSSI %d dBm/RE (%d dB, %d dB)\neNB1 RSSI %d dBm/RE (%d dB, %d dB)neNB2 RSSI %d dBm/RE (%d dB, %d dB)\nN0 %d dBm/RE, %f dBm/%dPRB (%d dB, %d dB)\n",
-                   phy_vars_ue->frame_rx,
-                   phy_vars_ue->PHY_measurements.rx_rssi_dBm[0],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[0][0],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[0][1],
-                   phy_vars_ue->PHY_measurements.rx_rssi_dBm[1],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[1][0],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[1][1],
-                   phy_vars_ue->PHY_measurements.rx_rssi_dBm[2],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[2][0],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[2][1],
-                   phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
-                   phy_vars_ue->PHY_measurements.n0_power_tot_dBm+10*log10(12*phy_vars_ue->lte_frame_parms.N_RB_DL),
-                   phy_vars_ue->lte_frame_parms.N_RB_DL,
-                   phy_vars_ue->PHY_measurements.n0_power_dB[0],
-                   phy_vars_ue->PHY_measurements.n0_power_dB[1]);
+                   ue->frame_rx,
+                   ue->measurements.rx_rssi_dBm[0],
+                   ue->measurements.rx_power_dB[0][0],
+                   ue->measurements.rx_power_dB[0][1],
+                   ue->measurements.rx_rssi_dBm[1],
+                   ue->measurements.rx_power_dB[1][0],
+                   ue->measurements.rx_power_dB[1][1],
+                   ue->measurements.rx_rssi_dBm[2],
+                   ue->measurements.rx_power_dB[2][0],
+                   ue->measurements.rx_power_dB[2][1],
+                   ue->measurements.n0_power_tot_dBm,
+                   ue->measurements.n0_power_tot_dBm+10*log10(12*ue->frame_parms.N_RB_DL),
+                   ue->frame_parms.N_RB_DL,
+                   ue->measurements.n0_power_dB[0],
+                   ue->measurements.n0_power_dB[1]);
     */
 
 #ifdef EXMIMO
-    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, openair0_cfg[0].rxg_mode[0],(int)openair0_cfg[0].rx_gain[0]);
+    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",ue->rx_total_gain_dB, openair0_cfg[0].rxg_mode[0],(int)openair0_cfg[0].rx_gain[0]);
 #endif
 #if defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
-    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB);
+    len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",ue->rx_total_gain_dB);
 #endif
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
-    len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz, estimated carrier frequency %f Hz\n",phy_vars_ue->lte_ue_common_vars.freq_offset,openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset);
+    len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz, estimated carrier frequency %f Hz\n",ue->common_vars.freq_offset,openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset);
 #endif
-    len += sprintf(&buffer[len], "[UE PROC] UE mode = %s (%d)\n",mode_string[phy_vars_ue->UE_mode[0]],phy_vars_ue->UE_mode[0]);
-    len += sprintf(&buffer[len], "[UE PROC] timing_advance = %d\n",phy_vars_ue->timing_advance);
-    if (phy_vars_ue->UE_mode[0]==PUSCH) {
+    len += sprintf(&buffer[len], "[UE PROC] UE mode = %s (%d)\n",mode_string[ue->UE_mode[0]],ue->UE_mode[0]);
+    len += sprintf(&buffer[len], "[UE PROC] timing_advance = %d\n",ue->timing_advance);
+    if (ue->UE_mode[0]==PUSCH) {
       len += sprintf(&buffer[len], "[UE PROC] Po_PUSCH = %d dBm (PL %d dB, Po_NOMINAL_PUSCH %d dBm, PHR %d dB)\n", 
-		     phy_vars_ue->ulsch_ue[0]->Po_PUSCH,
-		     get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0),
-		     phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH,
-		     phy_vars_ue->ulsch_ue[0]->PHR);
+		     ue->ulsch[0]->Po_PUSCH,
+		     get_PL(ue->Mod_id,ue->CC_id,0),
+		     ue->frame_parms.ul_power_control_config_common.p0_NominalPUSCH,
+		     ue->ulsch[0]->PHR);
       len += sprintf(&buffer[len], "[UE PROC] Po_PUCCH = %d dBm (Po_NOMINAL_PUCCH %d dBm, g_pucch %d dB)\n", 
-		     get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0)+
-		     phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
-		     phy_vars_ue->dlsch_ue[0][0]->g_pucch,
-		     phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-		     phy_vars_ue->dlsch_ue[0][0]->g_pucch);
+		     get_PL(ue->Mod_id,ue->CC_id,0)+
+		     ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
+		     ue->dlsch[0][0]->g_pucch,
+		     ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
+		     ue->dlsch[0][0]->g_pucch);
     }
     //for (eNB=0;eNB<NUMBER_OF_eNB_MAX;eNB++) {
     for (eNB=0; eNB<1; eNB++) {
       len += sprintf(&buffer[len], "[UE PROC] RX spatial power eNB%d: [%d %d; %d %d] dB\n",
                      eNB,
-                     phy_vars_ue->PHY_measurements.rx_spatial_power_dB[eNB][0][0],
-                     phy_vars_ue->PHY_measurements.rx_spatial_power_dB[eNB][0][1],
-                     phy_vars_ue->PHY_measurements.rx_spatial_power_dB[eNB][1][0],
-                     phy_vars_ue->PHY_measurements.rx_spatial_power_dB[eNB][1][1]);
-
-      len += sprintf(&buffer[len], "[UE PROC] RX total power eNB%d: %d dB, avg: %d dB\n",eNB,phy_vars_ue->PHY_measurements.rx_power_tot_dB[eNB],phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB]);
-      len += sprintf(&buffer[len], "[UE PROC] RX total power lin: %d, avg: %d, RX total noise lin: %d, avg: %d\n",phy_vars_ue->PHY_measurements.rx_power_tot[eNB],
-                     phy_vars_ue->PHY_measurements.rx_power_avg[eNB], phy_vars_ue->PHY_measurements.n0_power_tot, phy_vars_ue->PHY_measurements.n0_power_avg);
-      len += sprintf(&buffer[len], "[UE PROC] effective SINR %.2f dB\n",phy_vars_ue->sinr_eff);
-      len += sprintf(&buffer[len], "[UE PROC] Wideband CQI eNB %d: %d dB, avg: %d dB\n",eNB,phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB],phy_vars_ue->PHY_measurements.wideband_cqi_avg[eNB]);
-
-      switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
+                     ue->measurements.rx_spatial_power_dB[eNB][0][0],
+                     ue->measurements.rx_spatial_power_dB[eNB][0][1],
+                     ue->measurements.rx_spatial_power_dB[eNB][1][0],
+                     ue->measurements.rx_spatial_power_dB[eNB][1][1]);
+
+      len += sprintf(&buffer[len], "[UE PROC] RX total power eNB%d: %d dB, avg: %d dB\n",eNB,ue->measurements.rx_power_tot_dB[eNB],ue->measurements.rx_power_avg_dB[eNB]);
+      len += sprintf(&buffer[len], "[UE PROC] RX total power lin: %d, avg: %d, RX total noise lin: %d, avg: %d\n",ue->measurements.rx_power_tot[eNB],
+                     ue->measurements.rx_power_avg[eNB], ue->measurements.n0_power_tot, ue->measurements.n0_power_avg);
+      len += sprintf(&buffer[len], "[UE PROC] effective SINR %.2f dB\n",ue->sinr_eff);
+      len += sprintf(&buffer[len], "[UE PROC] Wideband CQI eNB %d: %d dB, avg: %d dB\n",eNB,ue->measurements.wideband_cqi_tot[eNB],ue->measurements.wideband_cqi_avg[eNB]);
+
+      switch (ue->frame_parms.N_RB_DL) {
       case 6:
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5]);
+                       ue->measurements.subband_cqi_dB[eNB][0][0],
+                       ue->measurements.subband_cqi_dB[eNB][0][1],
+                       ue->measurements.subband_cqi_dB[eNB][0][2],
+                       ue->measurements.subband_cqi_dB[eNB][0][3],
+                       ue->measurements.subband_cqi_dB[eNB][0][4],
+                       ue->measurements.subband_cqi_dB[eNB][0][5]);
 
 
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5]);
+                       ue->measurements.subband_cqi_dB[eNB][1][0],
+                       ue->measurements.subband_cqi_dB[eNB][1][1],
+                       ue->measurements.subband_cqi_dB[eNB][1][2],
+                       ue->measurements.subband_cqi_dB[eNB][1][3],
+                       ue->measurements.subband_cqi_dB[eNB][1][4],
+                       ue->measurements.subband_cqi_dB[eNB][1][5]);
 
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0]);
+                       ue->measurements.subband_pmi_re[eNB][0][0],
+                       ue->measurements.subband_pmi_im[eNB][0][0],
+                       ue->measurements.subband_pmi_re[eNB][1][0],
+                       ue->measurements.subband_pmi_im[eNB][1][0],
+                       ue->measurements.subband_pmi_re[eNB][2][0],
+                       ue->measurements.subband_pmi_im[eNB][2][0],
+                       ue->measurements.subband_pmi_re[eNB][3][0],
+                       ue->measurements.subband_pmi_im[eNB][3][0],
+                       ue->measurements.subband_pmi_re[eNB][4][0],
+                       ue->measurements.subband_pmi_im[eNB][4][0],
+                       ue->measurements.subband_pmi_re[eNB][5][0],
+                       ue->measurements.subband_pmi_im[eNB][5][0]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1]);
+                       ue->measurements.subband_pmi_re[eNB][0][1],
+                       ue->measurements.subband_pmi_im[eNB][0][1],
+                       ue->measurements.subband_pmi_re[eNB][1][1],
+                       ue->measurements.subband_pmi_im[eNB][1][1],
+                       ue->measurements.subband_pmi_re[eNB][2][1],
+                       ue->measurements.subband_pmi_im[eNB][2][1],
+                       ue->measurements.subband_pmi_re[eNB][3][1],
+                       ue->measurements.subband_pmi_im[eNB][3][1],
+                       ue->measurements.subband_pmi_re[eNB][4][1],
+                       ue->measurements.subband_pmi_im[eNB][4][1],
+                       ue->measurements.subband_pmi_re[eNB][5][1],
+                       ue->measurements.subband_pmi_im[eNB][5][1]);
 
         len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5]);
-
-        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,6)));
+                       ue->measurements.selected_rx_antennas[eNB][0],
+                       ue->measurements.selected_rx_antennas[eNB][1],
+                       ue->measurements.selected_rx_antennas[eNB][2],
+                       ue->measurements.selected_rx_antennas[eNB][3],
+                       ue->measurements.selected_rx_antennas[eNB][4],
+                       ue->measurements.selected_rx_antennas[eNB][5]);
+
+        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&ue->measurements,eNB,6)));
         len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %jx,%jx\n",eNB,
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,6)),
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,6)));
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,0,6)),
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,1,6)));
         break;
 
       case 25:
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6]);
+                       ue->measurements.subband_cqi_dB[eNB][0][0],
+                       ue->measurements.subband_cqi_dB[eNB][0][1],
+                       ue->measurements.subband_cqi_dB[eNB][0][2],
+                       ue->measurements.subband_cqi_dB[eNB][0][3],
+                       ue->measurements.subband_cqi_dB[eNB][0][4],
+                       ue->measurements.subband_cqi_dB[eNB][0][5],
+                       ue->measurements.subband_cqi_dB[eNB][0][6]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6]);
+                       ue->measurements.subband_cqi_dB[eNB][1][0],
+                       ue->measurements.subband_cqi_dB[eNB][1][1],
+                       ue->measurements.subband_cqi_dB[eNB][1][2],
+                       ue->measurements.subband_cqi_dB[eNB][1][3],
+                       ue->measurements.subband_cqi_dB[eNB][1][4],
+                       ue->measurements.subband_cqi_dB[eNB][1][5],
+                       ue->measurements.subband_cqi_dB[eNB][1][6]);
 
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0]);
+                       ue->measurements.subband_pmi_re[eNB][0][0],
+                       ue->measurements.subband_pmi_im[eNB][0][0],
+                       ue->measurements.subband_pmi_re[eNB][1][0],
+                       ue->measurements.subband_pmi_im[eNB][1][0],
+                       ue->measurements.subband_pmi_re[eNB][2][0],
+                       ue->measurements.subband_pmi_im[eNB][2][0],
+                       ue->measurements.subband_pmi_re[eNB][3][0],
+                       ue->measurements.subband_pmi_im[eNB][3][0],
+                       ue->measurements.subband_pmi_re[eNB][4][0],
+                       ue->measurements.subband_pmi_im[eNB][4][0],
+                       ue->measurements.subband_pmi_re[eNB][5][0],
+                       ue->measurements.subband_pmi_im[eNB][5][0],
+                       ue->measurements.subband_pmi_re[eNB][6][0],
+                       ue->measurements.subband_pmi_im[eNB][6][0]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1]);
+                       ue->measurements.subband_pmi_re[eNB][0][1],
+                       ue->measurements.subband_pmi_im[eNB][0][1],
+                       ue->measurements.subband_pmi_re[eNB][1][1],
+                       ue->measurements.subband_pmi_im[eNB][1][1],
+                       ue->measurements.subband_pmi_re[eNB][2][1],
+                       ue->measurements.subband_pmi_im[eNB][2][1],
+                       ue->measurements.subband_pmi_re[eNB][3][1],
+                       ue->measurements.subband_pmi_im[eNB][3][1],
+                       ue->measurements.subband_pmi_re[eNB][4][1],
+                       ue->measurements.subband_pmi_im[eNB][4][1],
+                       ue->measurements.subband_pmi_re[eNB][5][1],
+                       ue->measurements.subband_pmi_im[eNB][5][1],
+                       ue->measurements.subband_pmi_re[eNB][6][1],
+                       ue->measurements.subband_pmi_im[eNB][6][1]);
 
         len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6]);
-
-        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,7)));
+                       ue->measurements.selected_rx_antennas[eNB][0],
+                       ue->measurements.selected_rx_antennas[eNB][1],
+                       ue->measurements.selected_rx_antennas[eNB][2],
+                       ue->measurements.selected_rx_antennas[eNB][3],
+                       ue->measurements.selected_rx_antennas[eNB][4],
+                       ue->measurements.selected_rx_antennas[eNB][5],
+                       ue->measurements.selected_rx_antennas[eNB][6]);
+
+        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&ue->measurements,eNB,7)));
         len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %jx,%jx\n",eNB,
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,7)),
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,7)));
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,0,7)),
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,1,7)));
         break;
 
       case 50:
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][7],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][8]);
+                       ue->measurements.subband_cqi_dB[eNB][0][0],
+                       ue->measurements.subband_cqi_dB[eNB][0][1],
+                       ue->measurements.subband_cqi_dB[eNB][0][2],
+                       ue->measurements.subband_cqi_dB[eNB][0][3],
+                       ue->measurements.subband_cqi_dB[eNB][0][4],
+                       ue->measurements.subband_cqi_dB[eNB][0][5],
+                       ue->measurements.subband_cqi_dB[eNB][0][6],
+                       ue->measurements.subband_cqi_dB[eNB][0][7],
+                       ue->measurements.subband_cqi_dB[eNB][0][8]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][7],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][8]);
+                       ue->measurements.subband_cqi_dB[eNB][1][0],
+                       ue->measurements.subband_cqi_dB[eNB][1][1],
+                       ue->measurements.subband_cqi_dB[eNB][1][2],
+                       ue->measurements.subband_cqi_dB[eNB][1][3],
+                       ue->measurements.subband_cqi_dB[eNB][1][4],
+                       ue->measurements.subband_cqi_dB[eNB][1][5],
+                       ue->measurements.subband_cqi_dB[eNB][1][6],
+                       ue->measurements.subband_cqi_dB[eNB][1][7],
+                       ue->measurements.subband_cqi_dB[eNB][1][8]);
 
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][0]);
+                       ue->measurements.subband_pmi_re[eNB][0][0],
+                       ue->measurements.subband_pmi_im[eNB][0][0],
+                       ue->measurements.subband_pmi_re[eNB][1][0],
+                       ue->measurements.subband_pmi_im[eNB][1][0],
+                       ue->measurements.subband_pmi_re[eNB][2][0],
+                       ue->measurements.subband_pmi_im[eNB][2][0],
+                       ue->measurements.subband_pmi_re[eNB][3][0],
+                       ue->measurements.subband_pmi_im[eNB][3][0],
+                       ue->measurements.subband_pmi_re[eNB][4][0],
+                       ue->measurements.subband_pmi_im[eNB][4][0],
+                       ue->measurements.subband_pmi_re[eNB][5][0],
+                       ue->measurements.subband_pmi_im[eNB][5][0],
+                       ue->measurements.subband_pmi_re[eNB][6][0],
+                       ue->measurements.subband_pmi_im[eNB][6][0],
+                       ue->measurements.subband_pmi_re[eNB][7][0],
+                       ue->measurements.subband_pmi_im[eNB][7][0],
+                       ue->measurements.subband_pmi_re[eNB][8][0],
+                       ue->measurements.subband_pmi_im[eNB][8][0]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][1]);
+                       ue->measurements.subband_pmi_re[eNB][0][1],
+                       ue->measurements.subband_pmi_im[eNB][0][1],
+                       ue->measurements.subband_pmi_re[eNB][1][1],
+                       ue->measurements.subband_pmi_im[eNB][1][1],
+                       ue->measurements.subband_pmi_re[eNB][2][1],
+                       ue->measurements.subband_pmi_im[eNB][2][1],
+                       ue->measurements.subband_pmi_re[eNB][3][1],
+                       ue->measurements.subband_pmi_im[eNB][3][1],
+                       ue->measurements.subband_pmi_re[eNB][4][1],
+                       ue->measurements.subband_pmi_im[eNB][4][1],
+                       ue->measurements.subband_pmi_re[eNB][5][1],
+                       ue->measurements.subband_pmi_im[eNB][5][1],
+                       ue->measurements.subband_pmi_re[eNB][6][1],
+                       ue->measurements.subband_pmi_im[eNB][6][1],
+                       ue->measurements.subband_pmi_re[eNB][7][1],
+                       ue->measurements.subband_pmi_im[eNB][7][1],
+                       ue->measurements.subband_pmi_re[eNB][8][1],
+                       ue->measurements.subband_pmi_im[eNB][8][1]);
 
         len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][7],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][8]);
-
-        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,9)));
+                       ue->measurements.selected_rx_antennas[eNB][0],
+                       ue->measurements.selected_rx_antennas[eNB][1],
+                       ue->measurements.selected_rx_antennas[eNB][2],
+                       ue->measurements.selected_rx_antennas[eNB][3],
+                       ue->measurements.selected_rx_antennas[eNB][4],
+                       ue->measurements.selected_rx_antennas[eNB][5],
+                       ue->measurements.selected_rx_antennas[eNB][6],
+                       ue->measurements.selected_rx_antennas[eNB][7],
+                       ue->measurements.selected_rx_antennas[eNB][8]);
+
+        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&ue->measurements,eNB,9)));
         len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %jx,%jx\n",eNB,
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,9)),
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,9)));
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,0,9)),
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,1,9)));
         break;
 
       case 100:
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][7],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][8],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][9],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][10],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][11],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][12]);
+                       ue->measurements.subband_cqi_dB[eNB][0][0],
+                       ue->measurements.subband_cqi_dB[eNB][0][1],
+                       ue->measurements.subband_cqi_dB[eNB][0][2],
+                       ue->measurements.subband_cqi_dB[eNB][0][3],
+                       ue->measurements.subband_cqi_dB[eNB][0][4],
+                       ue->measurements.subband_cqi_dB[eNB][0][5],
+                       ue->measurements.subband_cqi_dB[eNB][0][6],
+                       ue->measurements.subband_cqi_dB[eNB][0][7],
+                       ue->measurements.subband_cqi_dB[eNB][0][8],
+                       ue->measurements.subband_cqi_dB[eNB][0][9],
+                       ue->measurements.subband_cqi_dB[eNB][0][10],
+                       ue->measurements.subband_cqi_dB[eNB][0][11],
+                       ue->measurements.subband_cqi_dB[eNB][0][12]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][7],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][8],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][9],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][10],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][11],
-                       phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][12]);
+                       ue->measurements.subband_cqi_dB[eNB][1][0],
+                       ue->measurements.subband_cqi_dB[eNB][1][1],
+                       ue->measurements.subband_cqi_dB[eNB][1][2],
+                       ue->measurements.subband_cqi_dB[eNB][1][3],
+                       ue->measurements.subband_cqi_dB[eNB][1][4],
+                       ue->measurements.subband_cqi_dB[eNB][1][5],
+                       ue->measurements.subband_cqi_dB[eNB][1][6],
+                       ue->measurements.subband_cqi_dB[eNB][1][7],
+                       ue->measurements.subband_cqi_dB[eNB][1][8],
+                       ue->measurements.subband_cqi_dB[eNB][1][9],
+                       ue->measurements.subband_cqi_dB[eNB][1][10],
+                       ue->measurements.subband_cqi_dB[eNB][1][11],
+                       ue->measurements.subband_cqi_dB[eNB][1][12]);
 
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][9][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][9][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][10][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][10][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][11][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][11][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][12][0],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][12][0]);
+                       ue->measurements.subband_pmi_re[eNB][0][0],
+                       ue->measurements.subband_pmi_im[eNB][0][0],
+                       ue->measurements.subband_pmi_re[eNB][1][0],
+                       ue->measurements.subband_pmi_im[eNB][1][0],
+                       ue->measurements.subband_pmi_re[eNB][2][0],
+                       ue->measurements.subband_pmi_im[eNB][2][0],
+                       ue->measurements.subband_pmi_re[eNB][3][0],
+                       ue->measurements.subband_pmi_im[eNB][3][0],
+                       ue->measurements.subband_pmi_re[eNB][4][0],
+                       ue->measurements.subband_pmi_im[eNB][4][0],
+                       ue->measurements.subband_pmi_re[eNB][5][0],
+                       ue->measurements.subband_pmi_im[eNB][5][0],
+                       ue->measurements.subband_pmi_re[eNB][6][0],
+                       ue->measurements.subband_pmi_im[eNB][6][0],
+                       ue->measurements.subband_pmi_re[eNB][7][0],
+                       ue->measurements.subband_pmi_im[eNB][7][0],
+                       ue->measurements.subband_pmi_re[eNB][8][0],
+                       ue->measurements.subband_pmi_im[eNB][8][0],
+                       ue->measurements.subband_pmi_re[eNB][9][0],
+                       ue->measurements.subband_pmi_im[eNB][9][0],
+                       ue->measurements.subband_pmi_re[eNB][10][0],
+                       ue->measurements.subband_pmi_im[eNB][10][0],
+                       ue->measurements.subband_pmi_re[eNB][11][0],
+                       ue->measurements.subband_pmi_im[eNB][11][0],
+                       ue->measurements.subband_pmi_re[eNB][12][0],
+                       ue->measurements.subband_pmi_im[eNB][12][0]);
 
         len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][9][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][9][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][10][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][10][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][11][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][11][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][12][1],
-                       phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][12][1]);
+                       ue->measurements.subband_pmi_re[eNB][0][1],
+                       ue->measurements.subband_pmi_im[eNB][0][1],
+                       ue->measurements.subband_pmi_re[eNB][1][1],
+                       ue->measurements.subband_pmi_im[eNB][1][1],
+                       ue->measurements.subband_pmi_re[eNB][2][1],
+                       ue->measurements.subband_pmi_im[eNB][2][1],
+                       ue->measurements.subband_pmi_re[eNB][3][1],
+                       ue->measurements.subband_pmi_im[eNB][3][1],
+                       ue->measurements.subband_pmi_re[eNB][4][1],
+                       ue->measurements.subband_pmi_im[eNB][4][1],
+                       ue->measurements.subband_pmi_re[eNB][5][1],
+                       ue->measurements.subband_pmi_im[eNB][5][1],
+                       ue->measurements.subband_pmi_re[eNB][6][1],
+                       ue->measurements.subband_pmi_im[eNB][6][1],
+                       ue->measurements.subband_pmi_re[eNB][7][1],
+                       ue->measurements.subband_pmi_im[eNB][7][1],
+                       ue->measurements.subband_pmi_re[eNB][8][1],
+                       ue->measurements.subband_pmi_im[eNB][8][1],
+                       ue->measurements.subband_pmi_re[eNB][9][1],
+                       ue->measurements.subband_pmi_im[eNB][9][1],
+                       ue->measurements.subband_pmi_re[eNB][10][1],
+                       ue->measurements.subband_pmi_im[eNB][10][1],
+                       ue->measurements.subband_pmi_re[eNB][11][1],
+                       ue->measurements.subband_pmi_im[eNB][11][1],
+                       ue->measurements.subband_pmi_re[eNB][12][1],
+                       ue->measurements.subband_pmi_im[eNB][12][1]);
 
         len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d %d %d %d %d]\n",
                        eNB,
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][7],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][8],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][9],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][10],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][11],
-                       phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][12]);
-
-        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,13)));
+                       ue->measurements.selected_rx_antennas[eNB][0],
+                       ue->measurements.selected_rx_antennas[eNB][1],
+                       ue->measurements.selected_rx_antennas[eNB][2],
+                       ue->measurements.selected_rx_antennas[eNB][3],
+                       ue->measurements.selected_rx_antennas[eNB][4],
+                       ue->measurements.selected_rx_antennas[eNB][5],
+                       ue->measurements.selected_rx_antennas[eNB][6],
+                       ue->measurements.selected_rx_antennas[eNB][7],
+                       ue->measurements.selected_rx_antennas[eNB][8],
+                       ue->measurements.selected_rx_antennas[eNB][9],
+                       ue->measurements.selected_rx_antennas[eNB][10],
+                       ue->measurements.selected_rx_antennas[eNB][11],
+                       ue->measurements.selected_rx_antennas[eNB][12]);
+
+        len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %jx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&ue->measurements,eNB,13)));
         len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %jx,%jx\n",eNB,
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,13)),
-                       pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,13)));
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,0,13)),
+                       pmi2hex_2Ar1(quantize_subband_pmi2(&ue->measurements,eNB,1,13)));
         break;
       }
 
 #ifdef OPENAIR2
-      RRC_status = mac_UE_get_rrc_status(phy_vars_ue->Mod_id, 0);
+      RRC_status = mac_UE_get_rrc_status(ue->Mod_id, 0);
       len += sprintf(&buffer[len],"[UE PROC] RRC status = %d\n",RRC_status);
 #endif
 
  
-      len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",phy_vars_ue->transmission_mode[eNB],phy_vars_ue->lte_frame_parms.mode1_flag);
+      len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",ue->transmission_mode[eNB],ue->frame_parms.mode1_flag);
       len += sprintf(&buffer[len], "[UE PROC] PBCH err conseq %d, PBCH error total %d, PBCH FER %d\n",
-                     phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors_conseq,
-                     phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors,
-                     phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_fer);
+                     ue->pbch_vars[eNB]->pdu_errors_conseq,
+                     ue->pbch_vars[eNB]->pdu_errors,
+                     ue->pbch_vars[eNB]->pdu_fer);
 
-      if (phy_vars_ue->transmission_mode[eNB] == 6)
-        len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,phy_vars_ue->PHY_measurements.precoded_cqi_dB[eNB][0]);
+      if (ue->transmission_mode[eNB] == 6)
+        len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,ue->measurements.precoded_cqi_dB[eNB][0]);
 
       for (harq_pid=0;harq_pid<8;harq_pid++) {
-	len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 0 harq_pid %d, mcs %d:",eNB,harq_pid,phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->mcs);
+	len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 0 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][0]->harq_processes[harq_pid]->mcs);
 	for (round=0;round<8;round++)
 	  len+=sprintf(&buffer[len],"%d/%d ",
-		       phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->errors[round],
-		       phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->trials[round]);
+		       ue->dlsch[0][0]->harq_processes[harq_pid]->errors[round],
+		       ue->dlsch[0][0]->harq_processes[harq_pid]->trials[round]);
 	len+=sprintf(&buffer[len],"\n");
       }
-      if (phy_vars_ue->dlsch_ue[0] && phy_vars_ue->dlsch_ue[0][0] && phy_vars_ue->dlsch_ue[0][1]) {
-        len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %jx (%p)\n",eNB,pmi2hex_2Ar1(phy_vars_ue->dlsch_ue[0][0]->pmi_alloc),phy_vars_ue->dlsch_ue[0][0]);
+      if (ue->dlsch[0] && ue->dlsch[0][0] && ue->dlsch[0][1]) {
+        len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %jx (%p)\n",eNB,pmi2hex_2Ar1(ue->dlsch[0][0]->pmi_alloc),ue->dlsch[0][0]);
 
-        len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,phy_vars_ue->dlsch_ue[0][0]->harq_processes[0]->dl_power_off);
+        len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,ue->dlsch[0][0]->harq_processes[0]->dl_power_off);
 
 	for (harq_pid=0;harq_pid<8;harq_pid++) {
-	  len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 1 harq_pid %d, mcs %d:",eNB,harq_pid,phy_vars_ue->dlsch_ue[0][1]->harq_processes[0]->mcs);
+	  len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 1 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][1]->harq_processes[0]->mcs);
 	  for (round=0;round<8;round++)
 	    len+=sprintf(&buffer[len],"%d/%d ",
-			 phy_vars_ue->dlsch_ue[0][1]->harq_processes[harq_pid]->errors[round],
-			 phy_vars_ue->dlsch_ue[0][1]->harq_processes[harq_pid]->trials[round]);
+			 ue->dlsch[0][1]->harq_processes[harq_pid]->errors[round],
+			 ue->dlsch[0][1]->harq_processes[harq_pid]->trials[round]);
 	  len+=sprintf(&buffer[len],"\n");
 	}
       }
 
-      len += sprintf(&buffer[len], "[UE PROC] DLSCH Total %d, Error %d, FER %d\n",phy_vars_ue->dlsch_received[0],phy_vars_ue->dlsch_errors[0],phy_vars_ue->dlsch_fer[0]);
-      len += sprintf(&buffer[len], "[UE PROC] DLSCH (SI) Total %d, Error %d\n",phy_vars_ue->dlsch_SI_received[0],phy_vars_ue->dlsch_SI_errors[0]);
-      len += sprintf(&buffer[len], "[UE PROC] DLSCH (RA) Total %d, Error %d\n",phy_vars_ue->dlsch_ra_received[0],phy_vars_ue->dlsch_ra_errors[0]);
+      len += sprintf(&buffer[len], "[UE PROC] DLSCH Total %d, Error %d, FER %d\n",ue->dlsch_received[0],ue->dlsch_errors[0],ue->dlsch_fer[0]);
+      len += sprintf(&buffer[len], "[UE PROC] DLSCH (SI) Total %d, Error %d\n",ue->dlsch_SI_received[0],ue->dlsch_SI_errors[0]);
+      len += sprintf(&buffer[len], "[UE PROC] DLSCH (RA) Total %d, Error %d\n",ue->dlsch_ra_received[0],ue->dlsch_ra_errors[0]);
 #ifdef Rel10
       int i=0;
 
-      //len += sprintf(&buffer[len], "[UE PROC] MCH  Total %d\n", phy_vars_ue->dlsch_mch_received[0]);
-      for(i=0; i <phy_vars_ue->lte_frame_parms.num_MBSFN_config; i++ ) {
+      //len += sprintf(&buffer[len], "[UE PROC] MCH  Total %d\n", ue->dlsch_mch_received[0]);
+      for(i=0; i <ue->frame_parms.num_MBSFN_config; i++ ) {
         len += sprintf(&buffer[len], "[UE PROC] MCH (MCCH MBSFN %d) Total %d, Error %d, Trials %d\n",
-                       i, phy_vars_ue->dlsch_mcch_received[i][0],phy_vars_ue->dlsch_mcch_errors[i][0],phy_vars_ue->dlsch_mcch_trials[i][0]);
+                       i, ue->dlsch_mcch_received[i][0],ue->dlsch_mcch_errors[i][0],ue->dlsch_mcch_trials[i][0]);
         len += sprintf(&buffer[len], "[UE PROC] MCH (MTCH MBSFN %d) Total %d, Error %d, Trials %d\n",
-                       i, phy_vars_ue->dlsch_mtch_received[i][0],phy_vars_ue->dlsch_mtch_errors[i][0],phy_vars_ue->dlsch_mtch_trials[i][0]);
+                       i, ue->dlsch_mtch_received[i][0],ue->dlsch_mtch_errors[i][0],ue->dlsch_mtch_trials[i][0]);
       }
 
 #endif
-      len += sprintf(&buffer[len], "[UE PROC] DLSCH Bitrate %dkbps\n",(phy_vars_ue->bitrate[0]/1000));
-      len += sprintf(&buffer[len], "[UE PROC] Total Received Bits %dkbits\n",(phy_vars_ue->total_received_bits[0]/1000));
-      len += sprintf(&buffer[len], "[UE PROC] IA receiver %d\n",phy_vars_ue->use_ia_receiver);
+      len += sprintf(&buffer[len], "[UE PROC] DLSCH Bitrate %dkbps\n",(ue->bitrate[0]/1000));
+      len += sprintf(&buffer[len], "[UE PROC] Total Received Bits %dkbits\n",(ue->total_received_bits[0]/1000));
+      len += sprintf(&buffer[len], "[UE PROC] IA receiver %d\n",ue->use_ia_receiver);
 
     }
 
   } else {
     len += sprintf(&buffer[len], "[UE PROC] Frame count: %d, RSSI %3.2f dB (%d dB, %d dB), N0 %3.2f dB (%d dB, %d dB)\n",
-                   phy_vars_ue->frame_rx,
-                   10*log10(phy_vars_ue->PHY_measurements.rssi),
-                   phy_vars_ue->PHY_measurements.rx_power_dB[0][0],
-                   phy_vars_ue->PHY_measurements.rx_power_dB[0][1],
-                   10*log10(phy_vars_ue->PHY_measurements.n0_power_tot),
-                   phy_vars_ue->PHY_measurements.n0_power_dB[0],
-                   phy_vars_ue->PHY_measurements.n0_power_dB[1]);
+                   ue->frame_rx,
+                   10*log10(ue->measurements.rssi),
+                   ue->measurements.rx_power_dB[0][0],
+                   ue->measurements.rx_power_dB[0][1],
+                   10*log10(ue->measurements.n0_power_tot),
+                   ue->measurements.n0_power_dB[0],
+                   ue->measurements.n0_power_dB[1]);
 #ifdef EXMIMO
-    phy_vars_ue->rx_total_gain_dB = ((int)(10*log10(phy_vars_ue->PHY_measurements.rssi)))-input_level_dBm;
+    ue->rx_total_gain_dB = ((int)(10*log10(ue->measurements.rssi)))-input_level_dBm;
     len += sprintf(&buffer[len], "[UE PROC] rxg_mode %d, input level (set by user) %d dBm, VGA gain %d dB ==> total gain %3.2f dB, noise figure %3.2f dB\n",
                    openair0_cfg[0].rxg_mode[0],
                    input_level_dBm,
                    (int)openair0_cfg[0].rx_gain[0],
-                   10*log10(phy_vars_ue->PHY_measurements.rssi)-input_level_dBm,
-                   10*log10(phy_vars_ue->PHY_measurements.n0_power_tot)-phy_vars_ue->rx_total_gain_dB+105);
+                   10*log10(ue->measurements.rssi)-input_level_dBm,
+                   10*log10(ue->measurements.n0_power_tot)-ue->rx_total_gain_dB+105);
 #endif
   }
 
@@ -559,137 +559,137 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
 } // is_clusterhead
 
 
-int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
+int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length)
 {
 
   unsigned int success=0;
-  uint8_t eNB,UE_id,i,j,number_of_cards_l=1;
+  uint8_t eNB_id,UE_id,i,j,number_of_cards_l=1;
   uint32_t ulsch_errors=0,dlsch_errors=0;
   uint32_t ulsch_round_attempts[4]= {0,0,0,0},ulsch_round_errors[4]= {0,0,0,0};
   uint32_t dlsch_round_attempts[4]= {0,0,0,0},dlsch_round_errors[4]= {0,0,0,0};
   uint32_t UE_id_mac, RRC_status;
 
-  if (phy_vars_eNB==NULL)
+  if (eNB==NULL)
     return 0;
 
   int len = length;
 
-  //  if(phy_vars_eNB->frame==0){
-  phy_vars_eNB->total_dlsch_bitrate = 0;//phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_bitrate + phy_vars_eNB->total_dlsch_bitrate;
-  phy_vars_eNB->total_transmitted_bits = 0;// phy_vars_eNB->eNB_UE_stats[UE_id].total_transmitted_bits +  phy_vars_eNB->total_transmitted_bits;
-  phy_vars_eNB->total_system_throughput = 0;//phy_vars_eNB->eNB_UE_stats[UE_id].total_transmitted_bits + phy_vars_eNB->total_system_throughput;
+  //  if(eNB->frame==0){
+  eNB->total_dlsch_bitrate = 0;//eNB->UE_stats[UE_id].dlsch_bitrate + eNB->total_dlsch_bitrate;
+  eNB->total_transmitted_bits = 0;// eNB->UE_stats[UE_id].total_transmitted_bits +  eNB->total_transmitted_bits;
+  eNB->total_system_throughput = 0;//eNB->UE_stats[UE_id].total_transmitted_bits + eNB->total_system_throughput;
   // }
 
-  for (eNB=0; eNB<number_of_cards_l; eNB++) {
+  for (eNB_id=0; eNB_id<number_of_cards_l; eNB_id++) {
     len += sprintf(&buffer[len],"eNB %d/%d Frame %d: RX Gain %d dB, I0 %d dBm (%d,%d) dB \n",
-                   eNB,number_of_cards_l,
-                   phy_vars_eNB->proc[0].frame_tx,
-                   phy_vars_eNB->rx_total_gain_eNB_dB,
-                   phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_tot_dBm,
-                   phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_dB[0],
-                   phy_vars_eNB->PHY_measurements_eNB[eNB].n0_power_dB[1]);
+                   eNB_id,number_of_cards_l,
+                   eNB->proc[0].frame_tx,
+                   eNB->rx_total_gain_dB,
+                   eNB->measurements[eNB_id].n0_power_tot_dBm,
+                   eNB->measurements[eNB_id].n0_power_dB[0],
+                   eNB->measurements[eNB_id].n0_power_dB[1]);
 
     len += sprintf(&buffer[len],"PRB I0 (%X.%X.%X.%X): ",
-		   phy_vars_eNB->rb_mask_ul[0],
-		   phy_vars_eNB->rb_mask_ul[1],phy_vars_eNB->rb_mask_ul[2],phy_vars_eNB->rb_mask_ul[3]);
+		   eNB->rb_mask_ul[0],
+		   eNB->rb_mask_ul[1],eNB->rb_mask_ul[2],eNB->rb_mask_ul[3]);
 
-    for (i=0; i<phy_vars_eNB->lte_frame_parms.N_RB_UL; i++) {
+    for (i=0; i<eNB->frame_parms.N_RB_UL; i++) {
       len += sprintf(&buffer[len],"%4d ",
-                     phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dBm[i]);
+                     eNB->measurements[eNB_id].n0_subband_power_tot_dBm[i]);
       if ((i>0) && ((i%25) == 0)) 
 	len += sprintf(&buffer[len],"\n");
     }
     len += sprintf(&buffer[len],"\n");
     len += sprintf(&buffer[len],"\nPERFORMANCE PARAMETERS\n");
     /*
-    len += sprintf(&buffer[len],"[eNB PROC] Total DLSCH Bitrate for the System %dkbps\n",((phy_vars_eNB->eNB_UE_stats[0].dlsch_bitrate + phy_vars_eNB->eNB_UE_stats[1].dlsch_bitrate)/1000));
-    len += sprintf(&buffer[len],"[eNB PROC] Total Bits successfully transitted %dKbits in %dframe(s)\n",((phy_vars_eNB->eNB_UE_stats[0].total_transmitted_bits + phy_vars_eNB->eNB_UE_stats[1].total_transmitted_bits)/1000),phy_vars_eNB->frame+1);
-    len += sprintf(&buffer[len],"[eNB PROC] Average System Throughput %dKbps\n",(phy_vars_eNB->eNB_UE_stats[0].total_transmitted_bits + phy_vars_eNB->eNB_UE_stats[1].total_transmitted_bits)/((phy_vars_eNB->frame+1)*10));
+    len += sprintf(&buffer[len],"[eNB PROC] Total DLSCH Bitrate for the System %dkbps\n",((eNB->UE_stats[0].dlsch_bitrate + eNB->UE_stats[1].dlsch_bitrate)/1000));
+    len += sprintf(&buffer[len],"[eNB PROC] Total Bits successfully transitted %dKbits in %dframe(s)\n",((eNB->UE_stats[0].total_transmitted_bits + eNB->UE_stats[1].total_transmitted_bits)/1000),eNB->frame+1);
+    len += sprintf(&buffer[len],"[eNB PROC] Average System Throughput %dKbps\n",(eNB->UE_stats[0].total_transmitted_bits + eNB->UE_stats[1].total_transmitted_bits)/((eNB->frame+1)*10));
     */
 
     for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-      if ((phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti>0)&&
-	  (phy_vars_eNB->eNB_UE_stats[UE_id].mode == PUSCH)) {	
+      if ((eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&&
+	  (eNB->UE_stats[UE_id].mode == PUSCH)) {	
 
-        phy_vars_eNB->total_dlsch_bitrate = phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_bitrate + phy_vars_eNB->total_dlsch_bitrate;
-        phy_vars_eNB->total_transmitted_bits = phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS + phy_vars_eNB->total_transmitted_bits;
+        eNB->total_dlsch_bitrate = eNB->UE_stats[UE_id].dlsch_bitrate + eNB->total_dlsch_bitrate;
+        eNB->total_transmitted_bits = eNB->UE_stats[UE_id].total_TBS + eNB->total_transmitted_bits;
 
-        //phy_vars_eNB->total_system_throughput = phy_vars_eNB->eNB_UE_stats[UE_id].total_transmitted_bits + phy_vars_eNB->total_system_throughput;
+        //eNB->total_system_throughput = eNB->UE_stats[UE_id].total_transmitted_bits + eNB->total_system_throughput;
          
 	for (i=0; i<8; i++)
-	  success = success + (phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][0] - phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_l2_errors[i]);
+	  success = success + (eNB->UE_stats[UE_id].dlsch_trials[i][0] - eNB->UE_stats[UE_id].dlsch_l2_errors[i]);
 
     
 	
-	len += sprintf(&buffer[len],"Total DLSCH %d kbits / %d frames ",(phy_vars_eNB->total_transmitted_bits/1000),phy_vars_eNB->proc[0].frame_tx+1);
-	len += sprintf(&buffer[len],"Total DLSCH throughput %d kbps ",(phy_vars_eNB->total_dlsch_bitrate/1000));
-	len += sprintf(&buffer[len],"Total DLSCH trans %d / %d frames\n",success,phy_vars_eNB->proc[0].frame_tx+1);
-	//len += sprintf(&buffer[len],"[eNB PROC] FULL MU-MIMO Transmissions/Total Transmissions = %d/%d\n",phy_vars_eNB->FULL_MUMIMO_transmissions,phy_vars_eNB->check_for_total_transmissions);
-	//len += sprintf(&buffer[len],"[eNB PROC] MU-MIMO Transmissions/Total Transmissions = %d/%d\n",phy_vars_eNB->check_for_MUMIMO_transmissions,phy_vars_eNB->check_for_total_transmissions);
-	//len += sprintf(&buffer[len],"[eNB PROC] SU-MIMO Transmissions/Total Transmissions = %d/%d\n",phy_vars_eNB->check_for_SUMIMO_transmissions,phy_vars_eNB->check_for_total_transmissions);
+	len += sprintf(&buffer[len],"Total DLSCH %d kbits / %d frames ",(eNB->total_transmitted_bits/1000),eNB->proc[0].frame_tx+1);
+	len += sprintf(&buffer[len],"Total DLSCH throughput %d kbps ",(eNB->total_dlsch_bitrate/1000));
+	len += sprintf(&buffer[len],"Total DLSCH trans %d / %d frames\n",success,eNB->proc[0].frame_tx+1);
+	//len += sprintf(&buffer[len],"[eNB PROC] FULL MU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->FULL_MUMIMO_transmissions,eNB->check_for_total_transmissions);
+	//len += sprintf(&buffer[len],"[eNB PROC] MU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->check_for_MUMIMO_transmissions,eNB->check_for_total_transmissions);
+	//len += sprintf(&buffer[len],"[eNB PROC] SU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->check_for_SUMIMO_transmissions,eNB->check_for_total_transmissions);
 	
 	len += sprintf(&buffer[len],"UE %d (%x) Power: (%d,%d) dB, Po_PUSCH: (%d,%d) dBm, Po_PUCCH (%d/%d) dBm, Po_PUCCH1 (%d,%d) dBm,  PUCCH1 Thres %d dBm \n",
 		       UE_id,
-		       phy_vars_eNB->eNB_UE_stats[UE_id].crnti,
-		       dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->ulsch_power[0]),
-		       dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->ulsch_power[1]),
-		       phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[0],
-		       phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[1],
-		       dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
-		       phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-		       dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
-		       dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above/phy_vars_eNB->lte_frame_parms.N_RB_UL)-phy_vars_eNB->rx_total_gain_eNB_dB,
-		       PUCCH1_THRES+phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm-dB_fixed(phy_vars_eNB->lte_frame_parms.N_RB_UL));
+		       eNB->UE_stats[UE_id].crnti,
+		       dB_fixed(eNB->pusch_vars[UE_id]->ulsch_power[0]),
+		       dB_fixed(eNB->pusch_vars[UE_id]->ulsch_power[1]),
+		       eNB->UE_stats[UE_id].UL_rssi[0],
+		       eNB->UE_stats[UE_id].UL_rssi[1],
+		       dB_fixed(eNB->UE_stats[UE_id].Po_PUCCH/eNB->frame_parms.N_RB_UL)-eNB->rx_total_gain_dB,
+		       eNB->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
+		       dB_fixed(eNB->UE_stats[UE_id].Po_PUCCH1_below/eNB->frame_parms.N_RB_UL)-eNB->rx_total_gain_dB,
+		       dB_fixed(eNB->UE_stats[UE_id].Po_PUCCH1_above/eNB->frame_parms.N_RB_UL)-eNB->rx_total_gain_dB,
+		       PUCCH1_THRES+eNB->measurements[0].n0_power_tot_dBm-dB_fixed(eNB->frame_parms.N_RB_UL));
 	
 	len+= sprintf(&buffer[len],"DL mcs %d, UL mcs %d, UL rb %d, delta_TF %d, ",
-		      phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[0]->mcs,
-		      phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[0]->mcs,
-		      phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[0]->nb_rb,
-		      phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[0]->delta_TF);
+		      eNB->dlsch[(uint8_t)UE_id][0]->harq_processes[0]->mcs,
+		      eNB->ulsch[(uint8_t)UE_id]->harq_processes[0]->mcs,
+		      eNB->ulsch[(uint8_t)UE_id]->harq_processes[0]->nb_rb,
+		      eNB->ulsch[(uint8_t)UE_id]->harq_processes[0]->delta_TF);
 	
 	len += sprintf(&buffer[len],"Wideband CQI: (%d,%d) dB\n",
-		       phy_vars_eNB->PHY_measurements_eNB[eNB].wideband_cqi_dB[UE_id][0],
-		       phy_vars_eNB->PHY_measurements_eNB[eNB].wideband_cqi_dB[UE_id][1]);
+		       eNB->measurements[eNB_id].wideband_cqi_dB[UE_id][0],
+		       eNB->measurements[eNB_id].wideband_cqi_dB[UE_id][1]);
 	
 	/*	len += sprintf(&buffer[len],"[eNB PROC] Subband CQI:    ");
 	
-	for (i=0; i<phy_vars_eNB->lte_frame_parms.N_RB_DL; i++)
+	for (i=0; i<eNB->frame_parms.N_RB_DL; i++)
 	  len += sprintf(&buffer[len],"%2d ",
-			 phy_vars_eNB->PHY_measurements_eNB[eNB].subband_cqi_tot_dB[UE_id][i]);
+			 eNB->measurements[eNB_id].subband_cqi_tot_dB[UE_id][i]);
 	
 	len += sprintf(&buffer[len],"\n");
 	*/
 
 	len += sprintf(&buffer[len],"DL TM %d, DL_cqi %d, DL_pmi_single %jx ",
-		       phy_vars_eNB->transmission_mode[UE_id],
-		       phy_vars_eNB->eNB_UE_stats[UE_id].DL_cqi[0],
-		       pmi2hex_2Ar1(phy_vars_eNB->eNB_UE_stats[UE_id].DL_pmi_single));
+		       eNB->transmission_mode[UE_id],
+		       eNB->UE_stats[UE_id].DL_cqi[0],
+		       pmi2hex_2Ar1(eNB->UE_stats[UE_id].DL_pmi_single));
 
 	len += sprintf(&buffer[len],"Timing advance %d samples (%d 16Ts), update %d ",
-		       phy_vars_eNB->eNB_UE_stats[UE_id].UE_timing_offset,
-		       phy_vars_eNB->eNB_UE_stats[UE_id].UE_timing_offset>>2,
-		       phy_vars_eNB->eNB_UE_stats[UE_id].timing_advance_update);
+		       eNB->UE_stats[UE_id].UE_timing_offset,
+		       eNB->UE_stats[UE_id].UE_timing_offset>>2,
+		       eNB->UE_stats[UE_id].timing_advance_update);
 	
 	len += sprintf(&buffer[len],"Mode = %s(%d) ",
-		       mode_string[phy_vars_eNB->eNB_UE_stats[UE_id].mode],
-		       phy_vars_eNB->eNB_UE_stats[UE_id].mode);
-	UE_id_mac = find_UE_id(phy_vars_eNB->Mod_id,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti);
+		       mode_string[eNB->UE_stats[UE_id].mode],
+		       eNB->UE_stats[UE_id].mode);
+	UE_id_mac = find_UE_id(eNB->Mod_id,eNB->dlsch[(uint8_t)UE_id][0]->rnti);
 	
 	if (UE_id_mac != -1) {
-	  RRC_status = mac_eNB_get_rrc_status(phy_vars_eNB->Mod_id,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti);
+	  RRC_status = mac_eNB_get_rrc_status(eNB->Mod_id,eNB->dlsch[(uint8_t)UE_id][0]->rnti);
 	  len += sprintf(&buffer[len],"UE_id_mac = %d, RRC status = %d\n",UE_id_mac,RRC_status);
 	} else
 	  len += sprintf(&buffer[len],"UE_id_mac = -1\n");
 	
         len += sprintf(&buffer[len],"SR received/total: %d/%d (diff %d)\n",
-                       phy_vars_eNB->eNB_UE_stats[UE_id].sr_received,
-                       phy_vars_eNB->eNB_UE_stats[UE_id].sr_total,
-                       phy_vars_eNB->eNB_UE_stats[UE_id].sr_total-phy_vars_eNB->eNB_UE_stats[UE_id].sr_received);
+                       eNB->UE_stats[UE_id].sr_received,
+                       eNB->UE_stats[UE_id].sr_total,
+                       eNB->UE_stats[UE_id].sr_total-eNB->UE_stats[UE_id].sr_received);
 	
 	len += sprintf(&buffer[len],"DL Subband CQI: ");
 
 	int nb_sb;
-	switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+	switch (eNB->frame_parms.N_RB_DL) {
 	case 6:
 	  nb_sb=0;
 	  break;
@@ -713,7 +713,7 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
 	}	
 	for (i=0; i<nb_sb; i++)
 	  len += sprintf(&buffer[len],"%2d ",
-			 phy_vars_eNB->eNB_UE_stats[UE_id].DL_subband_cqi[0][i]);
+			 eNB->UE_stats[UE_id].DL_subband_cqi[0][i]);
 	len += sprintf(&buffer[len],"\n");
 	
 
@@ -730,25 +730,25 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
         for (i=0; i<8; i++) {
           len += sprintf(&buffer[len],"   harq %d: %d/%d (fer %d) (%d/%d, %d/%d, %d/%d, %d/%d) ",
                          i,
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_errors[i],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_fer[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_errors[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_errors[i][1],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][1],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_errors[i][2],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][2],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_errors[i][3],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][3]);
+                         eNB->UE_stats[UE_id].ulsch_errors[i],
+                         eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][0],
+                         eNB->UE_stats[UE_id].ulsch_round_fer[i][0],
+                         eNB->UE_stats[UE_id].ulsch_round_errors[i][0],
+                         eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][0],
+                         eNB->UE_stats[UE_id].ulsch_round_errors[i][1],
+                         eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][1],
+                         eNB->UE_stats[UE_id].ulsch_round_errors[i][2],
+                         eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][2],
+                         eNB->UE_stats[UE_id].ulsch_round_errors[i][3],
+                         eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][3]);
 	  if ((i&1) == 1)
 	    len += sprintf(&buffer[len],"\n");
 	    
-          ulsch_errors+=phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_errors[i];
+          ulsch_errors+=eNB->UE_stats[UE_id].ulsch_errors[i];
 
           for (j=0; j<4; j++) {
-            ulsch_round_attempts[j]+=phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_decoding_attempts[i][j];
-            ulsch_round_errors[j]+=phy_vars_eNB->eNB_UE_stats[UE_id].ulsch_round_errors[i][j];
+            ulsch_round_attempts[j]+=eNB->UE_stats[UE_id].ulsch_decoding_attempts[i][j];
+            ulsch_round_errors[j]+=eNB->UE_stats[UE_id].ulsch_round_errors[i][j];
           }
         }
 
@@ -772,29 +772,29 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
         for (i=0; i<8; i++) {
           len += sprintf(&buffer[len],"   harq %d: %d/%d (%d/%d/%d, %d/%d/%d, %d/%d/%d, %d/%d/%d) ",
                          i,
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_l2_errors[i],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_ACK[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_NAK[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][0],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_ACK[i][1],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_NAK[i][1],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][1],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_ACK[i][2],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_NAK[i][2],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][2],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_ACK[i][3],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_NAK[i][3],
-                         phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][3]);
+                         eNB->UE_stats[UE_id].dlsch_l2_errors[i],
+                         eNB->UE_stats[UE_id].dlsch_trials[i][0],
+                         eNB->UE_stats[UE_id].dlsch_ACK[i][0],
+                         eNB->UE_stats[UE_id].dlsch_NAK[i][0],
+                         eNB->UE_stats[UE_id].dlsch_trials[i][0],
+                         eNB->UE_stats[UE_id].dlsch_ACK[i][1],
+                         eNB->UE_stats[UE_id].dlsch_NAK[i][1],
+                         eNB->UE_stats[UE_id].dlsch_trials[i][1],
+                         eNB->UE_stats[UE_id].dlsch_ACK[i][2],
+                         eNB->UE_stats[UE_id].dlsch_NAK[i][2],
+                         eNB->UE_stats[UE_id].dlsch_trials[i][2],
+                         eNB->UE_stats[UE_id].dlsch_ACK[i][3],
+                         eNB->UE_stats[UE_id].dlsch_NAK[i][3],
+                         eNB->UE_stats[UE_id].dlsch_trials[i][3]);
 	  if ((i&1) == 1)
 	    len += sprintf(&buffer[len],"\n");
 
 
-          dlsch_errors+=phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_l2_errors[i];
+          dlsch_errors+=eNB->UE_stats[UE_id].dlsch_l2_errors[i];
 
           for (j=0; j<4; j++) {
-            dlsch_round_attempts[j]+=phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_trials[i][j];
-            dlsch_round_errors[j]+=phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_NAK[i][j];
+            dlsch_round_attempts[j]+=eNB->UE_stats[UE_id].dlsch_trials[i][j];
+            dlsch_round_errors[j]+=eNB->UE_stats[UE_id].dlsch_NAK[i][j];
           }
         }
 
@@ -806,15 +806,15 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
                        dlsch_round_errors[3],dlsch_round_attempts[3]);
 
 
-        len += sprintf(&buffer[len],"DLSCH total bits from MAC: %dkbit ",(phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS_MAC)/1000);
-        len += sprintf(&buffer[len],"DLSCH total bits ack'ed: %dkbit ",(phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS)/1000);
-        len += sprintf(&buffer[len],"DLSCH Average throughput (100 frames): %dkbps\n",(phy_vars_eNB->eNB_UE_stats[UE_id].dlsch_bitrate/1000));
-	//        len += sprintf(&buffer[len],"[eNB PROC] Transmission Mode %d\n",phy_vars_eNB->transmission_mode[UE_id]);
+        len += sprintf(&buffer[len],"DLSCH total bits from MAC: %dkbit ",(eNB->UE_stats[UE_id].total_TBS_MAC)/1000);
+        len += sprintf(&buffer[len],"DLSCH total bits ack'ed: %dkbit ",(eNB->UE_stats[UE_id].total_TBS)/1000);
+        len += sprintf(&buffer[len],"DLSCH Average throughput (100 frames): %dkbps\n",(eNB->UE_stats[UE_id].dlsch_bitrate/1000));
+	//        len += sprintf(&buffer[len],"[eNB PROC] Transmission Mode %d\n",eNB->transmission_mode[UE_id]);
 	/*
-        if(phy_vars_eNB->transmission_mode[UE_id] == 5) {
-          if(phy_vars_eNB->mu_mimo_mode[UE_id].dl_pow_off == 0)
+        if(eNB->transmission_mode[UE_id] == 5) {
+          if(eNB->mu_mimo_mode[UE_id].dl_pow_off == 0)
             len += sprintf(&buffer[len],"[eNB PROC] ****UE %d is in MU-MIMO mode****\n",UE_id);
-          else if(phy_vars_eNB->mu_mimo_mode[UE_id].dl_pow_off == 1)
+          else if(eNB->mu_mimo_mode[UE_id].dl_pow_off == 1)
             len += sprintf(&buffer[len],"[eNB PROC] ****UE %d is in SU-MIMO mode****\n",UE_id);
           else
             len += sprintf(&buffer[len],"[eNB PROC] ****UE %d is not scheduled****\n",UE_id);
@@ -823,13 +823,13 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
 	/*
         len += sprintf(&buffer[len],"[eNB PROC] RB Allocation on Sub-bands: ");
 
-        //  for (j=0;j< mac_xface->lte_frame_parms->N_RBGS;j++)
+        //  for (j=0;j< mac_xface->frame_parms->N_RBGS;j++)
         for (j=0; j<7; j++)
           len += sprintf(&buffer[len],"%d ",
-                         phy_vars_eNB->mu_mimo_mode[UE_id].rballoc_sub[j]);
+                         eNB->mu_mimo_mode[UE_id].rballoc_sub[j]);
 
         len += sprintf(&buffer[len],"\n");
-        len += sprintf(&buffer[len],"[eNB PROC] Total Number of Allocated PRBs = %d\n",phy_vars_eNB->mu_mimo_mode[UE_id].pre_nb_available_rbs);
+        len += sprintf(&buffer[len],"[eNB PROC] Total Number of Allocated PRBs = %d\n",eNB->mu_mimo_mode[UE_id].pre_nb_available_rbs);
 	*/
       }
     }
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index e723eb67a48c096ca079e16362b11473007cfd78..75ebcdfbfeeda23ac31a8752ad9b979ebd689e1c 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -400,7 +400,7 @@ void generate_pucch(int32_t **txdataF,
 
 }
 
-void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
+void generate_pucch_emul(PHY_VARS_UE *ue,
                          PUCCH_FMT_t format,
                          uint8_t ncs1,
                          uint8_t *pucch_payload,
@@ -408,32 +408,32 @@ void generate_pucch_emul(PHY_VARS_UE *phy_vars_ue,
                          uint8_t subframe)
 {
 
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pucch_flag    = format;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pucch_Ncs1    = ncs1;
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pucch_flag    = format;
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pucch_Ncs1    = ncs1;
 
 
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.sr            = sr;
-  // the value of phy_vars_ue->pucch_sel[subframe] is set by get_n1_pucch
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pucch_sel      = phy_vars_ue->pucch_sel[subframe];
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.sr            = sr;
+  // the value of ue->pucch_sel[subframe] is set by get_n1_pucch
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pucch_sel      = ue->pucch_sel[subframe];
 
-  // LOG_I(PHY,"subframe %d emu tx pucch_sel is %d sr is %d \n", subframe, UE_transport_info[phy_vars_ue->Mod_id].cntl.pucch_sel, sr);
+  // LOG_I(PHY,"subframe %d emu tx pucch_sel is %d sr is %d \n", subframe, UE_transport_info[ue->Mod_id].cntl.pucch_sel, sr);
 
   if (format == pucch_format1a) {
 
-    phy_vars_ue->pucch_payload[0] = pucch_payload[0];
-    UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pucch_payload = pucch_payload[0];
+    ue->pucch_payload[0] = pucch_payload[0];
+    UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pucch_payload = pucch_payload[0];
   } else if (format == pucch_format1b) {
-    phy_vars_ue->pucch_payload[0] = pucch_payload[0] + (pucch_payload[1]<<1);
-    UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pucch_payload = pucch_payload[0] + (pucch_payload[1]<<1);
+    ue->pucch_payload[0] = pucch_payload[0] + (pucch_payload[1]<<1);
+    UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pucch_payload = pucch_payload[0] + (pucch_payload[1]<<1);
   } else if (format == pucch_format1) {
-    LOG_D(PHY,"[UE %d] Frame %d subframe %d Generating PUCCH for SR %d\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,sr);
+    LOG_D(PHY,"[UE %d] Frame %d subframe %d Generating PUCCH for SR %d\n",ue->Mod_id,ue->frame_tx,subframe,sr);
   }
 
-  phy_vars_ue->sr[subframe] = sr;
+  ue->sr[subframe] = sr;
 
 }
 
-uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
+uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 		  PUCCH_FMT_t fmt,
 		  uint8_t UE_id,
 		  uint16_t n1_pucch,
@@ -446,15 +446,15 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
 
 
   static int first_call=1;
-  LTE_eNB_COMMON *eNB_common_vars                = &phy_vars_eNB->lte_eNB_common_vars;
-  LTE_DL_FRAME_PARMS *frame_parms                    = &phy_vars_eNB->lte_frame_parms;
-  //  PUCCH_CONFIG_DEDICATED *pucch_config_dedicated = &phy_vars_eNB->pucch_config_dedicated[UE_id];
-  int8_t sigma2_dB                                   = phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dB[0]-10;
-  uint32_t *Po_PUCCH                                  = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH);
-  int32_t *Po_PUCCH_dBm                              = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_dBm);
-  uint32_t *Po_PUCCH1_below                           = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below);
-  uint32_t *Po_PUCCH1_above                           = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above);
-  int32_t *Po_PUCCH_update                           = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_update);
+  LTE_eNB_COMMON *common_vars                = &eNB->common_vars;
+  LTE_DL_FRAME_PARMS *frame_parms                    = &eNB->frame_parms;
+  //  PUCCH_CONFIG_DEDICATED *pucch_config_dedicated = &eNB->pucch_config_dedicated[UE_id];
+  int8_t sigma2_dB                                   = eNB->measurements[0].n0_subband_power_tot_dB[0]-10;
+  uint32_t *Po_PUCCH                                  = &(eNB->UE_stats[UE_id].Po_PUCCH);
+  int32_t *Po_PUCCH_dBm                              = &(eNB->UE_stats[UE_id].Po_PUCCH_dBm);
+  uint32_t *Po_PUCCH1_below                           = &(eNB->UE_stats[UE_id].Po_PUCCH1_below);
+  uint32_t *Po_PUCCH1_above                           = &(eNB->UE_stats[UE_id].Po_PUCCH1_above);
+  int32_t *Po_PUCCH_update                           = &(eNB->UE_stats[UE_id].Po_PUCCH_update);
   uint32_t u,v,n,aa;
   uint32_t z[12*14];
   int16_t *zptr;
@@ -486,8 +486,8 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
   if (first_call == 1) {
     for (i=0;i<10;i++) {
       for (j=0;j<NUMBER_OF_UE_MAX;j++) {
-	phy_vars_eNB->pucch1_stats_cnt[j][i]=0;
-	phy_vars_eNB->pucch1ab_stats_cnt[j][i]=0;
+	eNB->pucch1_stats_cnt[j][i]=0;
+	eNB->pucch1ab_stats_cnt[j][i]=0;
       }
     }
     first_call=0;
@@ -585,7 +585,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
     //loop over symbols in slot
     for (l=0; l<N_UL_symb; l++) {
       // Compute n_cs (36.211 p. 18)
-      n_cs = phy_vars_eNB->ncs_cell[ns][l];
+      n_cs = eNB->ncs_cell[ns][l];
 
       if (frame_parms->Ncp==0) { // normal CP
         n_cs = ((uint16_t)n_cs + (nprime*deltaPUCCH_Shift + (n_oc%deltaPUCCH_Shift))%Nprime)%12;
@@ -700,7 +700,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
         re_offset -= (frame_parms->ofdm_symbol_size);
 
       symbol_offset = (unsigned int)frame_parms->ofdm_symbol_size*l;
-      rxptr = (int16_t *)&eNB_common_vars->rxdataF[0][aa][symbol_offset];
+      rxptr = (int16_t *)&common_vars->rxdataF[0][aa][symbol_offset];
 
       for (i=0; i<12; i++,j+=2,re_offset++) {
         rxcomp[aa][j]   = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[j])>>15)   - ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[1+j])>>15);
@@ -789,17 +789,17 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
 #endif
 
 #ifdef DEBUG_PUCCH_RX
-    LOG_I(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
+    LOG_I(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements[0].n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
 #endif
 
-    phy_vars_eNB->pucch1_stats[UE_id][(subframe<<10)+phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]] = stat_max;
-    phy_vars_eNB->pucch1_stats_thres[UE_id][(subframe<<10)+phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]] = sigma2_dB+pucch1_thres;
-    phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]+1)&1023;
+    eNB->pucch1_stats[UE_id][(subframe<<10)+eNB->pucch1_stats_cnt[UE_id][subframe]] = stat_max;
+    eNB->pucch1_stats_thres[UE_id][(subframe<<10)+eNB->pucch1_stats_cnt[UE_id][subframe]] = sigma2_dB+pucch1_thres;
+    eNB->pucch1_stats_cnt[UE_id][subframe] = (eNB->pucch1_stats_cnt[UE_id][subframe]+1)&1023;
 
     /*
-    if (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe] == 0) {
+    if (eNB->pucch1_stats_cnt[UE_id][subframe] == 0) {
       write_output("pucch_debug.m","pucch_energy",
-		   &phy_vars_eNB->pucch1_stats[UE_id][(subframe<<10)],
+		   &eNB->pucch1_stats[UE_id][(subframe<<10)],
 		   1024,1,2);
       AssertFatal(0,"Exiting for PUCCH 1 debug\n");
 
@@ -810,13 +810,13 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
     if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres))  {
       *payload = 1;
       *Po_PUCCH1_above = ((*Po_PUCCH1_above<<9) + (stat_max<<9)+1024)>>10;
-      //LOG_I(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max);
+      //LOG_I(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max);
     }
     else {
       *payload = 0;
       *Po_PUCCH1_below = ((*Po_PUCCH1_below<<9) + (stat_max<<9)+1024)>>10;
     }
-    LOG_D(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_subband_power_tot_dBm[6],pucch1_thres,dB_fixed(*Po_PUCCH1_below),dB_fixed(*Po_PUCCH1_above));
+    LOG_D(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements[0].n0_subband_power_tot_dBm[6],pucch1_thres,dB_fixed(*Po_PUCCH1_below),dB_fixed(*Po_PUCCH1_above));
     *Po_PUCCH_update = 1;
     if (UE_id==0) {
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_ENERGY,dB_fixed(stat_max));
@@ -910,7 +910,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
     stat_im=0;
     LOG_D(PHY,"PUCCH1A : Po_PUCCH before %d dB (%d)\n",dB_fixed(*Po_PUCCH),*Po_PUCCH);
     *Po_PUCCH = ((*Po_PUCCH>>1) + ((stat_max)>>1));
-    *Po_PUCCH_dBm = dB_fixed(*Po_PUCCH/frame_parms->N_RB_UL) - phy_vars_eNB->rx_total_gain_eNB_dB;
+    *Po_PUCCH_dBm = dB_fixed(*Po_PUCCH/frame_parms->N_RB_UL) - eNB->rx_total_gain_dB;
     *Po_PUCCH_update = 1;
  
     LOG_D(PHY,"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d\n",
@@ -1030,12 +1030,12 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
 
 #ifdef DEBUG_PUCCH_RX
       LOG_I(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
-	    (subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]));
+	    (subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe]));
 #endif
 
-	phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re);
-	phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im);
-	phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+	eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re);
+	eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im);
+	eNB->pucch1ab_stats_cnt[UE_id][subframe] = (eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
 
 
 	  
@@ -1045,9 +1045,9 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
         *(1+payload) = (stat_im<0) ? 1 : 0;
     } else { // insufficient energy on PUCCH so NAK
       *payload = 0;
-      ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re);
-      ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])])[1] = (int16_t)(stat_im);
-      phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+      ((int16_t*)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re);
+      ((int16_t*)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[1] = (int16_t)(stat_im);
+      eNB->pucch1ab_stats_cnt[UE_id][subframe] = (eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
 
       *payload = (stat_re<0) ? 1 : 0;
 
@@ -1063,22 +1063,22 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
 }
 
 
-int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB,
+int32_t rx_pucch_emul(PHY_VARS_eNB *eNB,
                       uint8_t UE_index,
                       PUCCH_FMT_t fmt,
                       uint8_t n1_pucch_sel,
                       uint8_t *payload,
-                      uint8_t sched_subframe)
+                      uint8_t thread_id)
 {
   uint8_t UE_id;
   uint16_t rnti;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
-  uint8_t CC_id = phy_vars_eNB->CC_id;
+  int subframe = eNB->proc[thread_id].subframe_rx;
+  uint8_t CC_id = eNB->CC_id;
 
-  rnti = phy_vars_eNB->ulsch_eNB[UE_index]->rnti;
+  rnti = eNB->ulsch[UE_index]->rnti;
 
   for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
-    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti)
+    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti)
       break;
   }
 
@@ -1095,7 +1095,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB,
     payload[0] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[0];
     payload[1] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[1];
   } else
-    LOG_E(PHY,"[eNB] Frame %d: Can't handle formats 2/2a/2b\n",phy_vars_eNB->proc[sched_subframe].frame_rx);
+    LOG_E(PHY,"[eNB] Frame %d: Can't handle formats 2/2a/2b\n",eNB->proc[thread_id].frame_rx);
 
   if (PHY_vars_UE_g[UE_id][CC_id]->pucch_sel[subframe] == n1_pucch_sel)
     return(99);
diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c
index 40dec0ec6f4eca97d85620557855c6642cce3d3f..dbac1e22809ef6b049e29d59b8b1b6512054e4f8 100644
--- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c
@@ -174,27 +174,28 @@ int generate_eNB_ulsch_params_from_rar(unsigned char *rar_pdu,
 
 int8_t delta_PUSCH_msg2[8] = {-6,-4,-2,0,2,4,6,8};
 
-int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
+int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
                                       unsigned char eNB_id )
 {
 
   //  RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)rar_pdu;
-  uint8_t transmission_mode = phy_vars_ue->transmission_mode[eNB_id];
-  unsigned char *rar_pdu = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b;
-  unsigned char subframe = phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id];
-  LTE_UE_ULSCH_t *ulsch  = phy_vars_ue->ulsch_ue[eNB_id];
-  PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
-  LTE_DL_FRAME_PARMS *frame_parms =  &phy_vars_ue->lte_frame_parms;
-  //  int current_dlsch_cqi = phy_vars_ue->current_dlsch_cqi[eNB_id];
+  uint8_t transmission_mode = ue->transmission_mode[eNB_id];
+  unsigned char *rar_pdu = ue->dlsch_ra[eNB_id]->harq_processes[0]->b;
+  unsigned char subframe = ue->ulsch_Msg3_subframe[eNB_id];
+  LTE_UE_ULSCH_t *ulsch  = ue->ulsch[eNB_id];
+  PHY_MEASUREMENTS *meas = &ue->measurements;
+
+  LTE_DL_FRAME_PARMS *frame_parms =  &ue->frame_parms;
+  //  int current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id];
 
   uint8_t *rar = (uint8_t *)(rar_pdu+1);
-  uint8_t harq_pid = subframe2harq_pid(frame_parms,phy_vars_ue->frame_tx,subframe);
+  uint8_t harq_pid = subframe2harq_pid(frame_parms,ue->frame_tx,subframe);
   uint16_t rballoc;
   uint8_t cqireq;
   uint16_t *RIV2nb_rb_LUT, *RIV2first_rb_LUT;
   uint16_t RIV_max = 0;
 
-  LOG_D(PHY,"[eNB][RAPROC] Frame %d: generate_ue_ulsch_params_from_rar: subframe %d (harq_pid %d)\n",phy_vars_ue->frame_tx,subframe,harq_pid);
+  LOG_D(PHY,"[eNB][RAPROC] Frame %d: generate_ue_ulsch_params_from_rar: subframe %d (harq_pid %d)\n",ue->frame_tx,subframe,harq_pid);
 
   switch (frame_parms->N_RB_DL) {
   case 6:
@@ -269,10 +270,10 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
     }
 
     ulsch->uci_format = HLC_subband_cqi_nopmi;
-    fill_CQI(ulsch,meas,eNB_id,0,phy_vars_ue->lte_frame_parms.N_RB_DL,0, transmission_mode,phy_vars_ue->sinr_eff);
+    fill_CQI(ulsch,meas,eNB_id,0,ue->frame_parms.N_RB_DL,0, transmission_mode,ue->sinr_eff);
 
-    if (((phy_vars_ue->frame_tx % 100) == 0) || (phy_vars_ue->frame_tx < 10))
-      print_CQI(ulsch->o,ulsch->uci_format,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL);
+    if (((ue->frame_tx % 100) == 0) || (ue->frame_tx < 10))
+      print_CQI(ulsch->o,ulsch->uci_format,eNB_id,ue->frame_parms.N_RB_DL);
   } else {
     ulsch->O_RI                                = 0;
     ulsch->O                                   = 0;
@@ -304,10 +305,10 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
 
   // initialize power control based on PRACH power
   ulsch->f_pusch = delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC] +
-                   mac_xface->get_deltaP_rampup(phy_vars_ue->Mod_id,phy_vars_ue->CC_id);
+                   mac_xface->get_deltaP_rampup(ue->Mod_id,ue->CC_id);
   LOG_D(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n",
-        phy_vars_ue->Mod_id,ulsch->f_pusch,ulsch->harq_processes[harq_pid]->TPC,delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC],
-        mac_xface->get_deltaP_rampup(phy_vars_ue->Mod_id,phy_vars_ue->CC_id));
+        ue->Mod_id,ulsch->f_pusch,ulsch->harq_processes[harq_pid]->TPC,delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC],
+        mac_xface->get_deltaP_rampup(ue->Mod_id,ue->CC_id));
 
 
   //#ifdef DEBUG_RAR
diff --git a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
index 249fd81ee45d2547f3633156c7c8a0d4ae313168..cb5d6539099387cad941c3d40a3a98b79d40004e 100644
--- a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
@@ -129,15 +129,15 @@ int compareints (const void * a, const void * b)
 }
 
 
-int32_t generate_srs_tx(PHY_VARS_UE *phy_vars_ue,
+int32_t generate_srs_tx(PHY_VARS_UE *ue,
                         uint8_t eNB_id,
                         int16_t amp,
                         uint32_t subframe)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
-  SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated=&phy_vars_ue->soundingrs_ul_config_dedicated[eNB_id];
-  int32_t *txdataF = phy_vars_ue->lte_ue_common_vars.txdataF[0];
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
+  SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
+  int32_t *txdataF = ue->common_vars.txdataF[0];
   uint16_t msrsb=0,Nb=0,nb,b,msrs0=0,k,Msc_RS,Msc_RS_idx,carrier_pos,symbol_offset;
   uint16_t *Msc_idx_ptr;
   int32_t k0;
diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c
index 34d55daaea4fc66c9a4abf8626753097d34a2035..97fe212ac5de03839c114bdb4abbb604f63bdd96 100644
--- a/openair1/PHY/LTE_TRANSPORT/sss.c
+++ b/openair1/PHY/LTE_TRANSPORT/sss.c
@@ -90,7 +90,7 @@ int generate_sss(int32_t **txdataF,
   return(0);
 }
 
-int pss_ch_est(PHY_VARS_UE *phy_vars_ue,
+int pss_ch_est(PHY_VARS_UE *ue,
                int32_t pss_ext[4][72],
                int32_t sss_ext[4][72])
 {
@@ -98,9 +98,9 @@ int pss_ch_est(PHY_VARS_UE *phy_vars_ue,
   int16_t *pss;
   int16_t *pss_ext2,*sss_ext2,*sss_ext3,tmp_re,tmp_im,tmp_re2,tmp_im2;
   uint8_t aarx,i;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
 
-  switch (phy_vars_ue->lte_ue_common_vars.eNb_id) {
+  switch (ue->common_vars.eNb_id) {
 
   case 0:
     pss = &primary_synch0[10];
@@ -154,7 +154,7 @@ int pss_ch_est(PHY_VARS_UE *phy_vars_ue,
 }
 
 
-int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
+int pss_sss_extract(PHY_VARS_UE *ue,
                     int32_t pss_ext[4][72],
                     int32_t sss_ext[4][72])
 {
@@ -165,12 +165,12 @@ int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
   uint8_t i,aarx;
   int32_t *pss_rxF,*pss_rxF_ext;
   int32_t *sss_rxF,*sss_rxF_ext;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
 
   int rx_offset = frame_parms->ofdm_symbol_size-3*12;
   uint8_t pss_symb,sss_symb;
 
-  int32_t **rxdataF =  phy_vars_ue->lte_ue_common_vars.rxdataF;
+  int32_t **rxdataF =  ue->common_vars.rxdataF;
 
   if (frame_parms->frame_type == FDD) {
     pss_symb = 6-frame_parms->Ncp;
@@ -219,74 +219,74 @@ int16_t phase_re[7] = {16383, 25101, 30791, 32767, 30791, 25101, 16383};
 int16_t phase_im[7] = {-28378, -21063, -11208, 0, 11207, 21062, 28377};
 
 
-int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_max)
+int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_max)
 {
 
   uint8_t i;
   int32_t pss_ext[4][72];
   int32_t sss0_ext[4][72],sss5_ext[4][72];
-  uint8_t Nid2 = phy_vars_ue->lte_ue_common_vars.eNb_id;
+  uint8_t Nid2 = ue->common_vars.eNb_id;
   uint8_t flip,phase;
   uint16_t Nid1;
   int16_t *sss0,*sss5;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   int32_t metric;
   int16_t *d0,*d5;
 
-  if (phy_vars_ue->lte_frame_parms.frame_type == FDD) {
+  if (frame_parms->frame_type == FDD) {
 #ifdef DEBUG_SSS
 
-    if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL)
-      msg("[PHY][UE%d] Doing SSS for FDD Normal Prefix\n",phy_vars_ue->Mod_id);
+    if (frame_parms->Ncp == NORMAL)
+      msg("[PHY][UE%d] Doing SSS for FDD Normal Prefix\n",ue->Mod_id);
     else
-      msg("[PHY][UE%d] Doing SSS for FDD Extended Prefix\n",phy_vars_ue->Mod_id);
+      msg("[PHY][UE%d] Doing SSS for FDD Extended Prefix\n",ue->Mod_id);
 
 #endif
     // Do FFTs for SSS/PSS
     // SSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti/2)-2, // second to last symbol of
              0,                                  // slot 0
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
     // PSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti/2)-1, // last symbol of
              0,                                  // slot 0
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
   } else { // TDD
 #ifdef DEBUG_SSS
-    if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL)
-      msg("[PHY][UE%d] Doing SSS for TDD Normal Prefix\n",phy_vars_ue->Mod_id);
+    if (ue->frame_parms->Ncp == NORMAL)
+      msg("[PHY][UE%d] Doing SSS for TDD Normal Prefix\n",ue->Mod_id);
     else
-      msg("[PHY][UE%d] Doing SSS for TDD Extended Prefix\n",phy_vars_ue->Mod_id);
+      msg("[PHY][UE%d] Doing SSS for TDD Extended Prefix\n",ue->Mod_id);
 
 #endif
     // SSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti>>1)-1,  // last symbol of
              1,                                    // slot 1
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
     // PSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              2,                                   // symbol 2 of
              2,                                   // slot 2
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
   }
 
-  pss_sss_extract(phy_vars_ue,
+  pss_sss_extract(ue,
                   pss_ext,
                   sss0_ext);
   /*
-  write_output("rxsig0.m","rxs0",&phy_vars_ue->lte_ue_common_vars.rxdata[0][0],phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
-  write_output("rxdataF0.m","rxF0",&phy_vars_ue->lte_ue_common_vars.rxdataF[0][0],2*14*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1);
+  write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1);
+  write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1);
   write_output("pss_ext0.m","pssext0",pss_ext,72,1,1);
   write_output("sss0_ext0.m","sss0ext0",sss0_ext,72,1,1);
   */
@@ -294,44 +294,44 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_
   // get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
   // and do channel estimation and compensation based on PSS
 
-  pss_ch_est(phy_vars_ue,
+  pss_ch_est(ue,
              pss_ext,
              sss0_ext);
 
   //  write_output("sss0_comp0.m","sss0comp0",sss0_ext,72,1,1);
 
-  if (phy_vars_ue->lte_frame_parms.frame_type == FDD) { // FDD
+  if (ue->frame_parms.frame_type == FDD) { // FDD
 
     // SSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti/2)-2,
              10,
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,1);
     // PSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti/2)-1,
              10,
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,1);
   } else { // TDD
     // SSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              (frame_parms->symbols_per_tti>>1)-1,
              11,
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
     // PSS
-    slot_fep(phy_vars_ue,
+    slot_fep(ue,
              2,
              12,
-             phy_vars_ue->rx_offset,
+             ue->rx_offset,
              0,
 	     1);
   }
 
-  pss_sss_extract(phy_vars_ue,
+  pss_sss_extract(ue,
                   pss_ext,
                   sss5_ext);
 
@@ -339,7 +339,7 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_
   // get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
   // and do channel estimation and compensation based on PSS
 
-  pss_ch_est(phy_vars_ue,
+  pss_ch_est(ue,
              pss_ext,
              sss5_ext);
 
@@ -375,7 +375,7 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_
         // if the current metric is better than the last save it
         if (metric > *tot_metric) {
           *tot_metric = metric;
-          phy_vars_ue->lte_frame_parms.Nid_cell = Nid2+(3*Nid1);
+          ue->frame_parms.Nid_cell = Nid2+(3*Nid1);
           *phase_max = phase;
           *flip_max=flip;
 #ifdef DEBUG_SSS
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
index 1004cfa192d482a2cf2d8df8ba131db2310165c0..4e45a856bdbbe79a2f74b188f1bdecc60bf52e81 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
@@ -205,7 +205,7 @@ LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag)
 
 
 uint32_t ulsch_encoding(uint8_t *a,
-                        PHY_VARS_UE *phy_vars_ue,
+                        PHY_VARS_UE *ue,
                         uint8_t harq_pid,
                         uint8_t eNB_id,
                         uint8_t tmode,
@@ -213,11 +213,11 @@ uint32_t ulsch_encoding(uint8_t *a,
                         uint8_t Nbundled)
 {
 
-  time_stats_t *seg_stats=&phy_vars_ue->ulsch_segmentation_stats;
-  time_stats_t *rm_stats=&phy_vars_ue->ulsch_rate_matching_stats;
-  time_stats_t *te_stats=&phy_vars_ue->ulsch_turbo_encoding_stats;
-  time_stats_t *i_stats=&phy_vars_ue->ulsch_interleaving_stats;
-  time_stats_t *m_stats=&phy_vars_ue->ulsch_multiplexing_stats;
+  time_stats_t *seg_stats=&ue->ulsch_segmentation_stats;
+  time_stats_t *rm_stats=&ue->ulsch_rate_matching_stats;
+  time_stats_t *te_stats=&ue->ulsch_turbo_encoding_stats;
+  time_stats_t *i_stats=&ue->ulsch_interleaving_stats;
+  time_stats_t *m_stats=&ue->ulsch_multiplexing_stats;
 
   //  uint16_t offset;
   uint32_t crc=1;
@@ -236,10 +236,10 @@ uint32_t ulsch_encoding(uint8_t *a,
   uint16_t o_RCC;
   uint8_t o_flip[8];
   uint32_t wACK_idx;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
-  PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
-  LTE_UE_ULSCH_t *ulsch=phy_vars_ue->ulsch_ue[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = phy_vars_ue->dlsch_ue[eNB_id];
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
+  PHY_MEASUREMENTS *meas = &ue->measurements;
+  LTE_UE_ULSCH_t *ulsch=ue->ulsch[eNB_id];
+  LTE_UE_DLSCH_t **dlsch = ue->dlsch[eNB_id];
   uint16_t rnti;
 
   if (!ulsch) {
@@ -266,11 +266,11 @@ uint32_t ulsch_encoding(uint8_t *a,
 
   // fill CQI/PMI information
   if (ulsch->O>0) {
-    rnti = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti;
-    fill_CQI(ulsch,meas,0,harq_pid,phy_vars_ue->lte_frame_parms.N_RB_DL,rnti, tmode,phy_vars_ue->sinr_eff);
+    rnti = ue->pdcch_vars[eNB_id]->crnti;
+    fill_CQI(ulsch,meas,0,harq_pid,ue->frame_parms.N_RB_DL,rnti, tmode,ue->sinr_eff);
 
     LOG_D(PHY,"UE CQI\n");
-    print_CQI(ulsch->o,ulsch->uci_format,0,phy_vars_ue->lte_frame_parms.N_RB_DL);
+    print_CQI(ulsch->o,ulsch->uci_format,0,ue->frame_parms.N_RB_DL);
 
     // save PUSCH pmi for later (transmission modes 4,5,6)
     if (dlsch[0]) {
@@ -324,9 +324,9 @@ uint32_t ulsch_encoding(uint8_t *a,
     }
 
     if ((tmode != 4))
-      print_CQI(ulsch->o,wideband_cqi_rank1_2A,0,phy_vars_ue->lte_frame_parms.N_RB_DL);
+      print_CQI(ulsch->o,wideband_cqi_rank1_2A,0,ue->frame_parms.N_RB_DL);
     else
-      print_CQI(ulsch->o,HLC_subband_cqi_rank1_2A,0,phy_vars_ue->lte_frame_parms.N_RB_DL);
+      print_CQI(ulsch->o,HLC_subband_cqi_rank1_2A,0,ue->frame_parms.N_RB_DL);
 
 #endif
 
@@ -938,29 +938,29 @@ uint32_t ulsch_encoding(uint8_t *a,
 #include "LAYER2/MAC/defs.h"
 #endif
 int ulsch_encoding_emul(uint8_t *ulsch_buffer,
-                        PHY_VARS_UE *phy_vars_ue,
+                        PHY_VARS_UE *ue,
                         uint8_t eNB_id,
                         uint8_t harq_pid,
                         uint8_t control_only_flag)
 {
 
-  LTE_UE_ULSCH_t *ulsch = phy_vars_ue->ulsch_ue[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = phy_vars_ue->dlsch_ue[eNB_id];
-  PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
-  uint8_t tmode = phy_vars_ue->transmission_mode[eNB_id];
-  uint16_t rnti=phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti;
+  LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
+  LTE_UE_DLSCH_t **dlsch = ue->dlsch[eNB_id];
+  PHY_MEASUREMENTS *meas = &ue->measurements;
+  uint8_t tmode = ue->transmission_mode[eNB_id];
+  uint16_t rnti=ue->pdcch_vars[eNB_id]->crnti;
   LOG_D(PHY,"EMUL UE ulsch_encoding for eNB %d,mod_id %d, harq_pid %d rnti %x, ACK(%d,%d) \n",
-        eNB_id,phy_vars_ue->Mod_id, harq_pid, rnti,ulsch->o_ACK[0],ulsch->o_ACK[1]);
+        eNB_id,ue->Mod_id, harq_pid, rnti,ulsch->o_ACK[0],ulsch->o_ACK[1]);
 
   if (ulsch->O>0) {
     /*
     if(flag_LA==1)
-      sinr_eff = sinr_eff_cqi_calc(phy_vars_ue, eNB_id);
+      sinr_eff = sinr_eff_cqi_calc(ue, eNB_id);
     else
       sinr_eff = meas->wideband_cqi_avg[eNB_id];
     */
 
-    fill_CQI(ulsch,meas,eNB_id,harq_pid,phy_vars_ue->lte_frame_parms.N_RB_DL,rnti,tmode,phy_vars_ue->sinr_eff);
+    fill_CQI(ulsch,meas,eNB_id,harq_pid,ue->frame_parms.N_RB_DL,rnti,tmode,ue->sinr_eff);
     //LOG_D(PHY,"UE CQI\n");
     //    print_CQI(ulsch->o,ulsch->uci_format,eNB_id);
 
@@ -970,36 +970,36 @@ int ulsch_encoding_emul(uint8_t *ulsch_buffer,
     dlsch[0]->harq_processes[harq_pid]->pmi_alloc = ((wideband_cqi_rank1_2A_5MHz *)ulsch->o)->pmi;
   }
 
-  memcpy(phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->b,
+  memcpy(ue->ulsch[eNB_id]->harq_processes[harq_pid]->b,
          ulsch_buffer,
-         phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3);
+         ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
 
 
-  //memcpy(&UE_transport_info[phy_vars_ue->Mod_id].transport_blocks[UE_transport_info_TB_index[phy_vars_ue->Mod_id]],
-  memcpy(&UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].transport_blocks,
+  //memcpy(&UE_transport_info[ue->Mod_id].transport_blocks[UE_transport_info_TB_index[ue->Mod_id]],
+  memcpy(&UE_transport_info[ue->Mod_id][ue->CC_id].transport_blocks,
          ulsch_buffer,
-         phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3);
-  //UE_transport_info_TB_index[phy_vars_ue->Mod_id]+=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3;
+         ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
+  //UE_transport_info_TB_index[ue->Mod_id]+=ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3;
   // navid: currently more than one eNB is not supported in the code
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].num_eNB = 1;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].rnti[0] = phy_vars_ue->lte_ue_pdcch_vars[0]->crnti;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].eNB_id[0]  = eNB_id;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].harq_pid[0] = harq_pid;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].tbs[0]     = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3 ;
-  // msg("\nphy_vars_ue->Mod_id%d\n",phy_vars_ue->Mod_id);
-
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pusch_flag = 1;
-  //UE_transport_info[phy_vars_ue->Mod_id].cntl.pusch_uci = *(uint32_t *)ulsch->o;
-  memcpy(UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pusch_uci,
+  UE_transport_info[ue->Mod_id][ue->CC_id].num_eNB = 1;
+  UE_transport_info[ue->Mod_id][ue->CC_id].rnti[0] = ue->pdcch_vars[0]->crnti;
+  UE_transport_info[ue->Mod_id][ue->CC_id].eNB_id[0]  = eNB_id;
+  UE_transport_info[ue->Mod_id][ue->CC_id].harq_pid[0] = harq_pid;
+  UE_transport_info[ue->Mod_id][ue->CC_id].tbs[0]     = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3 ;
+  // msg("\nue->Mod_id%d\n",ue->Mod_id);
+
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pusch_flag = 1;
+  //UE_transport_info[ue->Mod_id].cntl.pusch_uci = *(uint32_t *)ulsch->o;
+  memcpy(UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pusch_uci,
          ulsch->o,
          MAX_CQI_BYTES);
   // msg("[UE]cqi is %d \n", ((HLC_subband_cqi_rank1_2A_5MHz *)ulsch->o)->cqi1);
 
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.length_uci = ulsch->O;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.uci_format = ulsch->uci_format;
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pusch_ri = (ulsch->o_RI[0]&1)+((ulsch->o_RI[1]&1)<<1);
-  UE_transport_info[phy_vars_ue->Mod_id][phy_vars_ue->CC_id].cntl.pusch_ack =   (ulsch->o_ACK[0]&1) + ((ulsch->o_ACK[1]&1)<<1);
-  //msg("ack is %d %d %d\n",UE_transport_info[phy_vars_ue->Mod_id].cntl.pusch_ack, (ulsch->o_ACK[1]&1)<<1, ulsch->o_ACK[0]&1);
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.length_uci = ulsch->O;
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.uci_format = ulsch->uci_format;
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pusch_ri = (ulsch->o_RI[0]&1)+((ulsch->o_RI[1]&1)<<1);
+  UE_transport_info[ue->Mod_id][ue->CC_id].cntl.pusch_ack =   (ulsch->o_ACK[0]&1) + ((ulsch->o_ACK[1]&1)<<1);
+  //msg("ack is %d %d %d\n",UE_transport_info[ue->Mod_id].cntl.pusch_ack, (ulsch->o_ACK[1]&1)<<1, ulsch->o_ACK[0]&1);
   return(0);
 
 }
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index a0a5602261ceb4015104d3e94ef12be220bab228..4a6bfa5f52c86a2ba0b5b0eb08b4a15b9cc11675 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -218,18 +218,18 @@ uint8_t extract_cqi_crc(uint8_t *cqi,uint8_t CQI_LENGTH)
 
 
 
-unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
+unsigned int  ulsch_decoding(PHY_VARS_eNB *eNB,
                              uint8_t UE_id,
-                             uint8_t sched_subframe,
+                             uint8_t thread_id,
                              uint8_t control_only_flag,
                              uint8_t Nbundled,
                              uint8_t llr8_flag)
 {
 
 
-  int16_t *ulsch_llr = phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->llr;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
-  LTE_eNB_ULSCH_t *ulsch = phy_vars_eNB->ulsch_eNB[UE_id];
+  int16_t *ulsch_llr = eNB->pusch_vars[UE_id]->llr;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
+  LTE_eNB_ULSCH_t *ulsch = eNB->ulsch[UE_id];
   uint8_t harq_pid;
   unsigned short nb_rb;
   unsigned int A,E;
@@ -260,7 +260,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
   int16_t cseq[6*14*1200];
   int off;
   int status[20];
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
+  int subframe = eNB->proc[thread_id].subframe_rx;
   LTE_UL_eNB_HARQ_t *ulsch_harq;
 
   uint8_t (*tc)(int16_t *y,
@@ -279,7 +279,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
                 time_stats_t *,
                 time_stats_t *);
 
-  harq_pid = subframe2harq_pid(frame_parms,phy_vars_eNB->proc[sched_subframe].frame_rx,subframe);
+  harq_pid = subframe2harq_pid(frame_parms,eNB->proc[thread_id].frame_rx,subframe);
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,1);
 
@@ -351,7 +351,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
   }
 
   if (sumKr==0) {
-    LOG_N(PHY,"[eNB %d] ulsch_decoding.c: FATAL sumKr is 0!\n",phy_vars_eNB->Mod_id);
+    LOG_N(PHY,"[eNB %d] ulsch_decoding.c: FATAL sumKr is 0!\n",eNB->Mod_id);
     LOG_D(PHY,"ulsch_decoding (Nid_cell %d, rnti %x, x2 %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d, subframe %d\n",
           frame_parms->Nid_cell,ulsch->rnti,x2,
           harq_pid,
@@ -453,7 +453,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
   // Clear "tag" interleaving matrix to allow for CQI/DATA identification
   memset(ytag,0,Cmux*Rmux_prime);
 
-  start_meas(&phy_vars_eNB->ulsch_demultiplexing_stats);
+  start_meas(&eNB->ulsch_demultiplexing_stats);
 
   i=0;
   memset(y,LTE_NULL,Q_m*Hpp);
@@ -603,7 +603,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
   }
 
 
-  stop_meas(&phy_vars_eNB->ulsch_demultiplexing_stats);
+  stop_meas(&eNB->ulsch_demultiplexing_stats);
 
   if (i!=(H+Q_RI))
     LOG_D(PHY,"ulsch_decoding.c: Error in input buffer length (j %d, H+Q_RI %d)\n",i,H+Q_RI);
@@ -979,7 +979,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
   //  return(0);
   // Do PUSCH Decoding
 
-  //  stop_meas(&phy_vars_eNB->ulsch_demultiplexing_stats);
+  //  stop_meas(&eNB->ulsch_demultiplexing_stats);
 
 
   r_offset = 0;
@@ -1026,7 +1026,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
         ulsch_harq->Nl);
 #endif
 
-    start_meas(&phy_vars_eNB->ulsch_rate_unmatching_stats);
+    start_meas(&eNB->ulsch_rate_unmatching_stats);
 
     if (lte_rate_matching_turbo_rx(ulsch_harq->RTC[r],
                                    G,
@@ -1047,14 +1047,14 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
       return(-1);
     }
 
-    stop_meas(&phy_vars_eNB->ulsch_rate_unmatching_stats);
+    stop_meas(&eNB->ulsch_rate_unmatching_stats);
     r_offset += E;
 
-    start_meas(&phy_vars_eNB->ulsch_deinterleaving_stats);
+    start_meas(&eNB->ulsch_deinterleaving_stats);
     sub_block_deinterleaving_turbo(4+Kr,
                                    &ulsch_harq->d[r][96],
                                    ulsch_harq->w[r]);
-    stop_meas(&phy_vars_eNB->ulsch_deinterleaving_stats);
+    stop_meas(&eNB->ulsch_deinterleaving_stats);
   }
 
     for (r=0; r<ulsch_harq->C; r++) {
@@ -1068,7 +1068,7 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
       else
         crc_type = CRC24_B;
 
-      start_meas(&phy_vars_eNB->ulsch_turbo_decoding_stats);
+      start_meas(&eNB->ulsch_turbo_decoding_stats);
 
       ret = tc(&ulsch_harq->d[r][96],
                ulsch_harq->c[r],
@@ -1078,15 +1078,15 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
                ulsch->max_turbo_iterations,//MAX_TURBO_ITERATIONS,
                crc_type,
                (r==0) ? ulsch_harq->F : 0,
-               &phy_vars_eNB->ulsch_tc_init_stats,
-               &phy_vars_eNB->ulsch_tc_alpha_stats,
-               &phy_vars_eNB->ulsch_tc_beta_stats,
-               &phy_vars_eNB->ulsch_tc_gamma_stats,
-               &phy_vars_eNB->ulsch_tc_ext_stats,
-               &phy_vars_eNB->ulsch_tc_intl1_stats,
-               &phy_vars_eNB->ulsch_tc_intl2_stats);
+               &eNB->ulsch_tc_init_stats,
+               &eNB->ulsch_tc_alpha_stats,
+               &eNB->ulsch_tc_beta_stats,
+               &eNB->ulsch_tc_gamma_stats,
+               &eNB->ulsch_tc_ext_stats,
+               &eNB->ulsch_tc_intl1_stats,
+               &eNB->ulsch_tc_intl2_stats);
 
-      stop_meas(&phy_vars_eNB->ulsch_turbo_decoding_stats);
+      stop_meas(&eNB->ulsch_turbo_decoding_stats);
 
       status[r] = ret;
 
@@ -1500,23 +1500,23 @@ int ulsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nrb
 
 #endif
 
-uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
-                             uint8_t sched_subframe,
+uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB,
+                             uint8_t thread_id,
                              uint8_t UE_index,
                              uint16_t *crnti)
 {
 
   uint8_t UE_id;
   uint16_t rnti;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
+  int subframe = eNB->proc[thread_id].subframe_rx;
   uint8_t harq_pid;
-  uint8_t CC_id = phy_vars_eNB->CC_id;
+  uint8_t CC_id = eNB->CC_id;
 
-  harq_pid = subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_rx,subframe);
+  harq_pid = subframe2harq_pid(&eNB->frame_parms,eNB->proc[thread_id].frame_rx,subframe);
 
-  rnti = phy_vars_eNB->ulsch_eNB[UE_index]->rnti;
+  rnti = eNB->ulsch[UE_index]->rnti;
 #ifdef DEBUG_PHY
-  LOG_D(PHY,"[eNB %d] ulsch_decoding_emul : subframe %d UE_index %d harq_pid %d rnti %x\n",phy_vars_eNB->Mod_id,subframe,UE_index,harq_pid,rnti);
+  LOG_D(PHY,"[eNB %d] ulsch_decoding_emul : subframe %d UE_index %d harq_pid %d rnti %x\n",eNB->Mod_id,subframe,UE_index,harq_pid,rnti);
 #endif
 
   for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
@@ -1525,7 +1525,7 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
 
     /*
     msg("[PHY] EMUL eNB %d ulsch_decoding_emul : subframe ue id %d crnti %x nb ue %d\n",
-    phy_vars_eNB->Mod_id,
+    eNB->Mod_id,
     UE_id,
     PHY_vars_UE_g[UE_id]->lte_ue_pdcch_vars[0]->crnti,
     NB_UE_INST);
@@ -1534,34 +1534,34 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
 
   if (UE_id==NB_UE_INST) {
     LOG_W(PHY,"[eNB %d] ulsch_decoding_emul: FATAL, didn't find UE with rnti %x (UE index %d)\n",
-          phy_vars_eNB->Mod_id, rnti, UE_index);
-    return(1+phy_vars_eNB->ulsch_eNB[UE_id]->max_turbo_iterations);
+          eNB->Mod_id, rnti, UE_index);
+    return(1+eNB->ulsch[UE_id]->max_turbo_iterations);
   } else {
-    LOG_D(PHY,"[eNB %d] Found UE with rnti %x => UE_id %d\n",phy_vars_eNB->Mod_id, rnti, UE_id);
+    LOG_D(PHY,"[eNB %d] Found UE with rnti %x => UE_id %d\n",eNB->Mod_id, rnti, UE_id);
   }
 
-  if (PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->harq_processes[harq_pid]->status == CBA_ACTIVE) {
+  if (PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->harq_processes[harq_pid]->status == CBA_ACTIVE) {
     *crnti = rnti;
-    PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->harq_processes[harq_pid]->status=IDLE;
+    PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->harq_processes[harq_pid]->status=IDLE;
   } else
     *crnti = 0x0;
 
   // Do abstraction here to determine if packet it in error
-  /* if (ulsch_abstraction_MIESM(phy_vars_eNB->sinr_dB_eNB,1, phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb, phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb) == 1)
+  /* if (ulsch_abstraction_MIESM(eNB->sinr_dB_eNB,1, eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, eNB->ulsch[UE_id]->harq_processes[harq_pid]->first_rb) == 1)
    flag = 1;
    else flag = 0;*/
 
 
   /*
-  //SINRdbPost = phy_vars_eNB->sinr_dB_eNB;
-  mcsPost = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,
-  nrbPost = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb;
-  frbPost = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb;
+  //SINRdbPost = eNB->sinr_dB_eNB;
+  mcsPost = eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs,
+  nrbPost = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
+  frbPost = eNB->ulsch[UE_id]->harq_processes[harq_pid]->first_rb;
 
 
   if(nrbPost > 0)
   {
-  SINRdbPost = phy_vars_eNB->sinr_dB_eNB;
+  SINRdbPost = eNB->sinr_dB_eNB;
   ULflag1 = 1;
   }
   else
@@ -1571,7 +1571,7 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
   }*/
 
   //
-  // write_output("postprocSINR.m","SINReNB",phy_vars_eNB->sinr_dB,301,1,7);
+  // write_output("postprocSINR.m","SINReNB",eNB->sinr_dB,301,1,7);
 
 
   //Yazdir buraya her frame icin 300 eNb
@@ -1580,51 +1580,51 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB,
 
   // fprintf(csv_fd,"%e+i*(%e),",channelx,channely);
 
-  // if (ulsch_abstraction(phy_vars_eNB->sinr_dB,1, phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb, phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb) == 1) {
+  // if (ulsch_abstraction(eNB->sinr_dB,1, eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, eNB->ulsch[UE_id]->harq_processes[harq_pid]->first_rb) == 1) {
   if (1) {
     LOG_D(PHY,"ulsch_decoding_emul abstraction successful\n");
 
-    memcpy(phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->b,
-           PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->harq_processes[harq_pid]->b,
-           phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->TBS>>3);
+    memcpy(eNB->ulsch[UE_index]->harq_processes[harq_pid]->b,
+           PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->harq_processes[harq_pid]->b,
+           eNB->ulsch[UE_index]->harq_processes[harq_pid]->TBS>>3);
 
     // get local ue's ack
     if ((UE_index >= oai_emulation.info.first_ue_local) ||(UE_index <(oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local))) {
-      get_ack(&phy_vars_eNB->lte_frame_parms,
-              PHY_vars_UE_g[UE_id][CC_id]->dlsch_ue[0][0]->harq_ack,
+      get_ack(&eNB->frame_parms,
+              PHY_vars_UE_g[UE_id][CC_id]->dlsch[0][0]->harq_ack,
               subframe,
-              phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_ACK);
+              eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK);
     } else { // get remote UEs' ack
-      phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_ACK[0] = PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->o_ACK[0];
-      phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_ACK[1] = PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->o_ACK[1];
+      eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK[0] = PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->o_ACK[0];
+      eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK[1] = PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->o_ACK[1];
     }
 
     // Do abstraction of PUSCH feedback
 #ifdef DEBUG_PHY
     LOG_D(PHY,"[eNB %d][EMUL] ue index %d UE_id %d: subframe %d : o_ACK (%d %d), cqi (val %d, len %d)\n",
-          phy_vars_eNB->Mod_id,UE_index, UE_id, subframe,phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_ACK[0],
-          phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_ACK[1],
-          ((HLC_subband_cqi_rank1_2A_5MHz *)PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->o)->cqi1,
-          PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->O);
+          eNB->Mod_id,UE_index, UE_id, subframe,eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK[0],
+          eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK[1],
+          ((HLC_subband_cqi_rank1_2A_5MHz *)PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->o)->cqi1,
+          PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->O);
 #endif
 
-    phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->Or1 = PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->O;
-    phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->Or2 = PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->O;
+    eNB->ulsch[UE_index]->harq_processes[harq_pid]->Or1 = PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->O;
+    eNB->ulsch[UE_index]->harq_processes[harq_pid]->Or2 = PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->O;
 
-    phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->uci_format = PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->uci_format;
-    memcpy(phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o,PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->o,MAX_CQI_BYTES);
-    memcpy(phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->o_RI,PHY_vars_UE_g[UE_id][CC_id]->ulsch_ue[0]->o_RI,2);
+    eNB->ulsch[UE_index]->harq_processes[harq_pid]->uci_format = PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->uci_format;
+    memcpy(eNB->ulsch[UE_index]->harq_processes[harq_pid]->o,PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->o,MAX_CQI_BYTES);
+    memcpy(eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_RI,PHY_vars_UE_g[UE_id][CC_id]->ulsch[0]->o_RI,2);
 
-    phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->cqi_crc_status = 1;
+    eNB->ulsch[UE_index]->harq_processes[harq_pid]->cqi_crc_status = 1;
 
     return(1);
   } else {
-    LOG_W(PHY,"[eNB %d] ulsch_decoding_emul abstraction failed for UE %d\n",phy_vars_eNB->Mod_id,UE_index);
+    LOG_W(PHY,"[eNB %d] ulsch_decoding_emul abstraction failed for UE %d\n",eNB->Mod_id,UE_index);
 
-    phy_vars_eNB->ulsch_eNB[UE_index]->harq_processes[harq_pid]->cqi_crc_status = 0;
+    eNB->ulsch[UE_index]->harq_processes[harq_pid]->cqi_crc_status = 0;
 
     // retransmission
-    return(1+phy_vars_eNB->ulsch_eNB[UE_index]->max_turbo_iterations);
+    return(1+eNB->ulsch[UE_index]->max_turbo_iterations);
   }
 
 }
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index e52cdf9567acf17fef5beadb45f031ddd8b06c60..87c21b6a6b76f74a2771a0d4cb07a54cc33eaf43 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -1576,8 +1576,8 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
 int32_t avgU[2];
 int32_t avgU_0[2],avgU_1[2]; // For the Distributed Alamouti Scheme
 
-void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
-              uint32_t sched_subframe,
+void rx_ulsch(PHY_VARS_eNB *eNB,
+              uint32_t thread_id,
               uint8_t eNB_id,  // this is the effective sector id
               uint8_t UE_id,
               LTE_eNB_ULSCH_t **ulsch,
@@ -1585,9 +1585,9 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 {
 
   // flagMag = 0;
-  LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars;
-  LTE_eNB_PUSCH *eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars[UE_id];
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+  LTE_eNB_COMMON *common_vars = &eNB->common_vars;
+  LTE_eNB_PUSCH *pusch_vars = eNB->pusch_vars[UE_id];
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
 
   uint32_t l,i;
   int32_t avgs;
@@ -1603,9 +1603,9 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
   uint8_t Qm;
   uint16_t rx_power_correction;
   int16_t *llrp;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
+  int subframe = eNB->proc[thread_id].subframe_rx;
 
-  harq_pid = subframe2harq_pid(frame_parms,phy_vars_eNB->proc[sched_subframe].frame_rx,subframe);
+  harq_pid = subframe2harq_pid(frame_parms,eNB->proc[thread_id].frame_rx,subframe);
   Qm = get_Qm_ul(ulsch[UE_id]->harq_processes[harq_pid]->mcs);
 #ifdef DEBUG_ULSCH
   msg("rx_ulsch: eNB_id %d, harq_pid %d, nb_rb %d first_rb %d, cooperation %d\n",eNB_id,harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
@@ -1625,22 +1625,22 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
     msg("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
         ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
         ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
-        eNB_common_vars->rxdataF[eNB_id],
-        eNB_pusch_vars->rxdataF_ext[eNB_id]);
+        common_vars->rxdataF[eNB_id],
+        pusch_vars->rxdataF_ext[eNB_id]);
 #endif //DEBUG_ULSCH
 
-    ulsch_extract_rbs_single(eNB_common_vars->rxdataF[eNB_id],
-                             eNB_pusch_vars->rxdataF_ext[eNB_id],
+    ulsch_extract_rbs_single(common_vars->rxdataF[eNB_id],
+                             pusch_vars->rxdataF_ext[eNB_id],
                              ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
                              ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
                              l%(frame_parms->symbols_per_tti/2),
                              l/(frame_parms->symbols_per_tti/2),
                              frame_parms);
 
-    lte_ul_channel_estimation(phy_vars_eNB,
+    lte_ul_channel_estimation(eNB,
                               eNB_id,
                               UE_id,
-                              sched_subframe,
+                              thread_id,
                               l%(frame_parms->symbols_per_tti/2),
                               l/(frame_parms->symbols_per_tti/2),
                               cooperation_flag);
@@ -1648,36 +1648,36 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 
   if(cooperation_flag == 2) {
     for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-      eNB_pusch_vars->ulsch_power_0[i] = signal_energy(eNB_pusch_vars->drs_ch_estimates_0[eNB_id][i],
+      pusch_vars->ulsch_power_0[i] = signal_energy(pusch_vars->drs_ch_estimates_0[eNB_id][i],
                                          ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
-      eNB_pusch_vars->ulsch_power_1[i] = signal_energy(eNB_pusch_vars->drs_ch_estimates_1[eNB_id][i],
+      pusch_vars->ulsch_power_1[i] = signal_energy(pusch_vars->drs_ch_estimates_1[eNB_id][i],
                                          ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
     }
   } else {
     for (i=0; i<frame_parms->nb_antennas_rx; i++) {
       /*
-      eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
+      pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[eNB_id][i],
                                        ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)*rx_power_correction;
 
       */
       
-      eNB_pusch_vars->ulsch_power[i] = signal_energy_nodc(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
+      pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[eNB_id][i],
 							  ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
       
 #ifdef LOCALIZATION
-      eNB_pusch_vars->subcarrier_power = (int32_t *)malloc(ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12*sizeof(int32_t));
-      eNB_pusch_vars->active_subcarrier = subcarrier_energy(eNB_pusch_vars->drs_ch_estimates[eNB_id][i],
-                                          ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12, eNB_pusch_vars->subcarrier_power, rx_power_correction);
+      pusch_vars->subcarrier_power = (int32_t *)malloc(ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12*sizeof(int32_t));
+      pusch_vars->active_subcarrier = subcarrier_energy(pusch_vars->drs_ch_estimates[eNB_id][i],
+                                          ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12, pusch_vars->subcarrier_power, rx_power_correction);
 #endif
     }
   }
 
-  //write_output("rxdataF_ext.m","rxF_ext",eNB_pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
-  //write_output("ulsch_chest.m","drs_est",eNB_pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
+  //write_output("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
+  //write_output("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
 
 
   if(cooperation_flag == 2) {
-    ulsch_channel_level(eNB_pusch_vars->drs_ch_estimates_0[eNB_id],
+    ulsch_channel_level(pusch_vars->drs_ch_estimates_0[eNB_id],
                         frame_parms,
                         avgU_0,
                         ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
@@ -1695,7 +1695,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
     msg("[ULSCH] log2_maxh_0 = %d (%d,%d)\n",log2_maxh_0,avgU_0[0],avgs_0);
 #endif
 
-    ulsch_channel_level(eNB_pusch_vars->drs_ch_estimates_1[eNB_id],
+    ulsch_channel_level(pusch_vars->drs_ch_estimates_1[eNB_id],
                         frame_parms,
                         avgU_1,
                         ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
@@ -1714,7 +1714,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 #endif
     log2_maxh = max(log2_maxh_0,log2_maxh_1);
   } else {
-    ulsch_channel_level(eNB_pusch_vars->drs_ch_estimates[eNB_id],
+    ulsch_channel_level(pusch_vars->drs_ch_estimates[eNB_id],
                         frame_parms,
                         avgU,
                         ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
@@ -1746,15 +1746,15 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
     if(cooperation_flag == 2) {
 
       ulsch_channel_compensation_alamouti(
-        eNB_pusch_vars->rxdataF_ext[eNB_id],
-        eNB_pusch_vars->drs_ch_estimates_0[eNB_id],
-        eNB_pusch_vars->drs_ch_estimates_1[eNB_id],
-        eNB_pusch_vars->ul_ch_mag_0[eNB_id],
-        eNB_pusch_vars->ul_ch_magb_0[eNB_id],
-        eNB_pusch_vars->ul_ch_mag_1[eNB_id],
-        eNB_pusch_vars->ul_ch_magb_1[eNB_id],
-        eNB_pusch_vars->rxdataF_comp_0[eNB_id],
-        eNB_pusch_vars->rxdataF_comp_1[eNB_id],
+        pusch_vars->rxdataF_ext[eNB_id],
+        pusch_vars->drs_ch_estimates_0[eNB_id],
+        pusch_vars->drs_ch_estimates_1[eNB_id],
+        pusch_vars->ul_ch_mag_0[eNB_id],
+        pusch_vars->ul_ch_magb_0[eNB_id],
+        pusch_vars->ul_ch_mag_1[eNB_id],
+        pusch_vars->ul_ch_magb_1[eNB_id],
+        pusch_vars->rxdataF_comp_0[eNB_id],
+        pusch_vars->rxdataF_comp_1[eNB_id],
         frame_parms,
         l,
         Qm,
@@ -1762,24 +1762,24 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
         log2_maxh);
 
       ulsch_alamouti(frame_parms,
-                     eNB_pusch_vars->rxdataF_comp[eNB_id],
-                     eNB_pusch_vars->rxdataF_comp_0[eNB_id],
-                     eNB_pusch_vars->rxdataF_comp_1[eNB_id],
-                     eNB_pusch_vars->ul_ch_mag[eNB_id],
-                     eNB_pusch_vars->ul_ch_magb[eNB_id],
-                     eNB_pusch_vars->ul_ch_mag_0[eNB_id],
-                     eNB_pusch_vars->ul_ch_magb_0[eNB_id],
-                     eNB_pusch_vars->ul_ch_mag_1[eNB_id],
-                     eNB_pusch_vars->ul_ch_magb_1[eNB_id],
+                     pusch_vars->rxdataF_comp[eNB_id],
+                     pusch_vars->rxdataF_comp_0[eNB_id],
+                     pusch_vars->rxdataF_comp_1[eNB_id],
+                     pusch_vars->ul_ch_mag[eNB_id],
+                     pusch_vars->ul_ch_magb[eNB_id],
+                     pusch_vars->ul_ch_mag_0[eNB_id],
+                     pusch_vars->ul_ch_magb_0[eNB_id],
+                     pusch_vars->ul_ch_mag_1[eNB_id],
+                     pusch_vars->ul_ch_magb_1[eNB_id],
                      l,
                      ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
     } else {
       ulsch_channel_compensation(
-        eNB_pusch_vars->rxdataF_ext[eNB_id],
-        eNB_pusch_vars->drs_ch_estimates[eNB_id],
-        eNB_pusch_vars->ul_ch_mag[eNB_id],
-        eNB_pusch_vars->ul_ch_magb[eNB_id],
-        eNB_pusch_vars->rxdataF_comp[eNB_id],
+        pusch_vars->rxdataF_ext[eNB_id],
+        pusch_vars->drs_ch_estimates[eNB_id],
+        pusch_vars->ul_ch_mag[eNB_id],
+        pusch_vars->ul_ch_magb[eNB_id],
+        pusch_vars->rxdataF_comp[eNB_id],
         frame_parms,
         l,
         Qm,
@@ -1794,7 +1794,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
     //writing for the first time
     write_output(namepointer_log2,"xxx",log2_maxh,1,1,12);
 
-    write_output(namepointer_chMag,"xxx",eNB_pusch_vars->ul_ch_mag[eNB_id][0],300,1,11);
+    write_output(namepointer_chMag,"xxx",pusch_vars->ul_ch_mag[eNB_id][0],300,1,11);
 
     //namepointer_chMag = NULL;
     flagMag=1;
@@ -1802,20 +1802,20 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 
     if (frame_parms->nb_antennas_rx > 1)
       ulsch_detection_mrc(frame_parms,
-                          eNB_pusch_vars->rxdataF_comp[eNB_id],
-                          eNB_pusch_vars->ul_ch_mag[eNB_id],
-                          eNB_pusch_vars->ul_ch_magb[eNB_id],
+                          pusch_vars->rxdataF_comp[eNB_id],
+                          pusch_vars->ul_ch_mag[eNB_id],
+                          pusch_vars->ul_ch_magb[eNB_id],
                           l,
                           ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
 
 #ifndef OFDMA_ULSCH
 
-    if ((phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[0]+3)<eNB_pusch_vars->ulsch_power[0]) {
+    if ((eNB->measurements->n0_power_dB[0]+3)<pusch_vars->ulsch_power[0]) {
 
       freq_equalization(frame_parms,
-                        eNB_pusch_vars->rxdataF_comp[eNB_id],
-                        eNB_pusch_vars->ul_ch_mag[eNB_id],
-                        eNB_pusch_vars->ul_ch_magb[eNB_id],
+                        pusch_vars->rxdataF_comp[eNB_id],
+                        pusch_vars->ul_ch_mag[eNB_id],
+                        pusch_vars->ul_ch_magb[eNB_id],
                         l,
                         ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12,
                         Qm);
@@ -1830,7 +1830,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
   // Inverse-Transform equalized outputs
   //  msg("Doing IDFTs\n");
   lte_idft(frame_parms,
-           (uint32_t*)eNB_pusch_vars->rxdataF_comp[eNB_id][0],
+           (uint32_t*)pusch_vars->rxdataF_comp[eNB_id][0],
            ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
   //  msg("Done\n");
   //#endif //DEBUG_ULSCH
@@ -1838,7 +1838,7 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 #endif
 
 
-  llrp = (int16_t*)&eNB_pusch_vars->llr[0];
+  llrp = (int16_t*)&pusch_vars->llr[0];
 
   for (l=0; l<frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active; l++) {
 
@@ -1850,8 +1850,8 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
     switch (Qm) {
     case 2 :
       ulsch_qpsk_llr(frame_parms,
-                     eNB_pusch_vars->rxdataF_comp[eNB_id],
-                     eNB_pusch_vars->llr,
+                     pusch_vars->rxdataF_comp[eNB_id],
+                     pusch_vars->llr,
                      l,
                      ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
                      &llrp);
@@ -1859,19 +1859,19 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 
     case 4 :
       ulsch_16qam_llr(frame_parms,
-                      eNB_pusch_vars->rxdataF_comp[eNB_id],
-                      eNB_pusch_vars->llr,
-                      eNB_pusch_vars->ul_ch_mag[eNB_id],
+                      pusch_vars->rxdataF_comp[eNB_id],
+                      pusch_vars->llr,
+                      pusch_vars->ul_ch_mag[eNB_id],
                       l,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
                       &llrp);
       break;
 
     case 6 :
       ulsch_64qam_llr(frame_parms,
-                      eNB_pusch_vars->rxdataF_comp[eNB_id],
-                      eNB_pusch_vars->llr,
-                      eNB_pusch_vars->ul_ch_mag[eNB_id],
-                      eNB_pusch_vars->ul_ch_magb[eNB_id],
+                      pusch_vars->rxdataF_comp[eNB_id],
+                      pusch_vars->llr,
+                      pusch_vars->ul_ch_mag[eNB_id],
+                      pusch_vars->ul_ch_magb[eNB_id],
                       l,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
                       &llrp);
       break;
@@ -1886,66 +1886,66 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
 
 }
 
-void rx_ulsch_emul(PHY_VARS_eNB *phy_vars_eNB,
+void rx_ulsch_emul(PHY_VARS_eNB *eNB,
                    uint8_t subframe,
                    uint8_t sect_id,
                    uint8_t UE_index)
 {
-  msg("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, sect_id %d, UE_index %d\n",phy_vars_eNB->Mod_id,subframe,sect_id,UE_index);
-  phy_vars_eNB->lte_eNB_pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
-  phy_vars_eNB->lte_eNB_pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
+  msg("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, sect_id %d, UE_index %d\n",eNB->Mod_id,subframe,sect_id,UE_index);
+  eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
+  eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
 
 }
 
 
-void dump_ulsch(PHY_VARS_eNB *PHY_vars_eNB,uint8_t sched_subframe, uint8_t UE_id)
+void dump_ulsch(PHY_VARS_eNB *eNB,uint8_t thread_id, uint8_t UE_id)
 {
 
-  uint32_t nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == 0) ? 14 : 12;
+  uint32_t nsymb = (eNB->frame_parms.Ncp == 0) ? 14 : 12;
   uint8_t harq_pid;
-  int subframe = PHY_vars_eNB->proc[sched_subframe].subframe_rx;
+  int subframe = eNB->proc[thread_id].subframe_rx;
 
-  harq_pid = subframe2harq_pid(&PHY_vars_eNB->lte_frame_parms,PHY_vars_eNB->proc[sched_subframe].frame_rx,subframe);
+  harq_pid = subframe2harq_pid(&eNB->frame_parms,eNB->proc[thread_id].frame_rx,subframe);
 
-  printf("Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, mcs %d, Qm %d, N_symb %d\n", subframe,harq_pid,PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb,
-         PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,get_Qm_ul(PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs),
-         PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
+  printf("Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, mcs %d, Qm %d, N_symb %d\n", subframe,harq_pid,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
+         eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs,get_Qm_ul(eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs),
+         eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
   //#ifndef OAI_EMU
-  write_output("/tmp/ulsch_d.m","ulsch_dseq",&PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->d[0][96],
-               PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Kplus*3,1,0);
-  write_output("/tmp/rxsig0.m","rxs0", &PHY_vars_eNB->lte_eNB_common_vars.rxdata[0][0][0],PHY_vars_eNB->lte_frame_parms.samples_per_tti*10,1,1);
+  write_output("/tmp/ulsch_d.m","ulsch_dseq",&eNB->ulsch[UE_id]->harq_processes[harq_pid]->d[0][96],
+               eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kplus*3,1,0);
+  write_output("/tmp/rxsig0.m","rxs0", &eNB->common_vars.rxdata[0][0][0],eNB->frame_parms.samples_per_tti*10,1,1);
 
-  if (PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1)
-    write_output("/tmp/rxsig1.m","rxs1", &PHY_vars_eNB->lte_eNB_common_vars.rxdata[0][1][0],PHY_vars_eNB->lte_frame_parms.samples_per_tti*10,1,1);
+  if (eNB->frame_parms.nb_antennas_rx>1)
+    write_output("/tmp/rxsig1.m","rxs1", &eNB->common_vars.rxdata[0][1][0],eNB->frame_parms.samples_per_tti*10,1,1);
 
-  write_output("/tmp/rxsigF0.m","rxsF0", &PHY_vars_eNB->lte_eNB_common_vars.rxdataF[0][0][0],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
+  write_output("/tmp/rxsigF0.m","rxsF0", &eNB->common_vars.rxdataF[0][0][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1);
 
-  if (PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1)
-    write_output("/tmp/rxsigF1.m","rxsF1", &PHY_vars_eNB->lte_eNB_common_vars.rxdataF[0][1][0],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
+  if (eNB->frame_parms.nb_antennas_rx>1)
+    write_output("/tmp/rxsigF1.m","rxsF1", &eNB->common_vars.rxdataF[0][1][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1);
 
-  write_output("/tmp/rxsigF0_ext.m","rxsF0_ext", &PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->rxdataF_ext[0][0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
+  write_output("/tmp/rxsigF0_ext.m","rxsF0_ext", &eNB->pusch_vars[UE_id]->rxdataF_ext[0][0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
 
-  if (PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1)
-    write_output("/tmp/rxsigF1_ext.m","rxsF1_ext", &PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->rxdataF_ext[1][0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
+  if (eNB->frame_parms.nb_antennas_rx>1)
+    write_output("/tmp/rxsigF1_ext.m","rxsF1_ext", &eNB->pusch_vars[UE_id]->rxdataF_ext[1][0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
 
 
-  write_output("/tmp/srs_est0.m","srsest0",PHY_vars_eNB->lte_eNB_srs_vars[UE_id].srs_ch_estimates[0][0],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
+  write_output("/tmp/srs_est0.m","srsest0",eNB->srs_vars[UE_id].srs_ch_estimates[0][0],eNB->frame_parms.ofdm_symbol_size,1,1);
 
-  if (PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1)
-    write_output("/tmp/srs_est1.m","srsest1",PHY_vars_eNB->lte_eNB_srs_vars[UE_id].srs_ch_estimates[0][1],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
+  if (eNB->frame_parms.nb_antennas_rx>1)
+    write_output("/tmp/srs_est1.m","srsest1",eNB->srs_vars[UE_id].srs_ch_estimates[0][1],eNB->frame_parms.ofdm_symbol_size,1,1);
 
-  write_output("/tmp/drs_est0.m","drsest0",PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->drs_ch_estimates[0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
+  write_output("/tmp/drs_est0.m","drsest0",eNB->pusch_vars[UE_id]->drs_ch_estimates[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
 
-  if (PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1)
-    write_output("/tmp/drs_est1.m","drsest1",PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->drs_ch_estimates[0][1],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
+  if (eNB->frame_parms.nb_antennas_rx>1)
+    write_output("/tmp/drs_est1.m","drsest1",eNB->pusch_vars[UE_id]->drs_ch_estimates[0][1],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
 
-  write_output("/tmp/ulsch_rxF_comp0.m","ulsch0_rxF_comp0",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->rxdataF_comp[0][0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
-  //  write_output("ulsch_rxF_comp1.m","ulsch0_rxF_comp1",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->rxdataF_comp[0][1][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
-  write_output("/tmp/ulsch_rxF_llr.m","ulsch_llr",PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->llr,
-               PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb*12*get_Qm_ul(PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs)
-               *PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Nsymb_pusch,1,0);
-  write_output("/tmp/ulsch_ch_mag.m","ulsch_ch_mag",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->ul_ch_mag[0][0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
-  //  write_output("ulsch_ch_mag1.m","ulsch_ch_mag1",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->ul_ch_mag[0][1][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
+  write_output("/tmp/ulsch_rxF_comp0.m","ulsch0_rxF_comp0",&eNB->pusch_vars[UE_id]->rxdataF_comp[0][0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+  //  write_output("ulsch_rxF_comp1.m","ulsch0_rxF_comp1",&eNB->pusch_vars[UE_id]->rxdataF_comp[0][1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+  write_output("/tmp/ulsch_rxF_llr.m","ulsch_llr",eNB->pusch_vars[UE_id]->llr,
+               eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12*get_Qm_ul(eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs)
+               *eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch,1,0);
+  write_output("/tmp/ulsch_ch_mag.m","ulsch_ch_mag",&eNB->pusch_vars[UE_id]->ul_ch_mag[0][0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+  //  write_output("ulsch_ch_mag1.m","ulsch_ch_mag1",&eNB->pusch_vars[UE_id]->ul_ch_mag[0][1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
   //#endif
 }
 
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index 6a63043e9c1d0d04dad9c2731925edba4c3a916e..eb2296077a04c396dfbec5a71d0312bef485f21d 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -33,7 +33,7 @@
 #define SOFFSET 0
 
 
-int slot_fep(PHY_VARS_UE *phy_vars_ue,
+int slot_fep(PHY_VARS_UE *ue,
              unsigned char l,
              unsigned char Ns,
              int sample_offset,
@@ -41,8 +41,8 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
 	     int reset_freq_est)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
-  LTE_UE_COMMON *ue_common_vars   = &phy_vars_ue->lte_ue_common_vars;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
+  LTE_UE_COMMON *common_vars   = &ue->common_vars;
   uint8_t eNB_id = 0;//ue_common_vars->eNb_id;
   unsigned char aa;
   unsigned char symbol = l+((7-frame_parms->Ncp)*(Ns&1)); ///symbol within sub-frame
@@ -111,37 +111,37 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
 
 
   for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
-    memset(&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int));
+    memset(&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int));
 
     rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET;
     // Align with 256 bit
     //    rx_offset = rx_offset&0xfffffff8;
 
 #ifdef DEBUG_FEP
-    //  if (phy_vars_ue->frame <100)
-    printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+    //  if (ue->frame <100)
+    printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", ue->frame_rx,Ns, symbol,
         nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
 #endif
 
     if (l==0) {
 
       if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
-        memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples],
-               (short *)&ue_common_vars->rxdata[aa][0],
+        memcpy((short *)&common_vars->rxdata[aa][frame_length_samples],
+               (short *)&common_vars->rxdata[aa][0],
                frame_parms->ofdm_symbol_size*sizeof(int));
 
       if ((rx_offset&7)!=0) {  // if input to dft is not 256-bit aligned, issue for size 6,15 and 25 PRBs
         memcpy((void *)tmp_dft_in,
-               (void *)&ue_common_vars->rxdata[aa][rx_offset % frame_length_samples],
+               (void *)&common_vars->rxdata[aa][rx_offset % frame_length_samples],
                frame_parms->ofdm_symbol_size*sizeof(int));
         dft((int16_t *)tmp_dft_in,
-            (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
+            (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       } else { // use dft input from RX buffer directly
-        start_meas(&phy_vars_ue->rx_dft_stats);
+        start_meas(&ue->rx_dft_stats);
 
-        dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
-            (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
-        stop_meas(&phy_vars_ue->rx_dft_stats);
+        dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
+            (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
+        stop_meas(&ue->rx_dft_stats);
 
       }
     } else {
@@ -149,54 +149,54 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
       //                   (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1);
 
 #ifdef DEBUG_FEP
-      //  if (phy_vars_ue->frame <100)
-      printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+      //  if (ue->frame <100)
+      printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", ue->frame_rx,Ns, symbol,
           nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
 #endif
 
       if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
-        memcpy((void *)&ue_common_vars->rxdata[aa][frame_length_samples],
-               (void *)&ue_common_vars->rxdata[aa][0],
+        memcpy((void *)&common_vars->rxdata[aa][frame_length_samples],
+               (void *)&common_vars->rxdata[aa][0],
                frame_parms->ofdm_symbol_size*sizeof(int));
 
-      start_meas(&phy_vars_ue->rx_dft_stats);
+      start_meas(&ue->rx_dft_stats);
 
       if ((rx_offset&7)!=0) {  // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
         memcpy((void *)tmp_dft_in,
-               (void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
+               (void *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
                frame_parms->ofdm_symbol_size*sizeof(int));
         dft((int16_t *)tmp_dft_in,
-            (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
+            (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       } else { // use dft input from RX buffer directly
 
-        dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
-            (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
+        dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
+            (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       }
 
-      stop_meas(&phy_vars_ue->rx_dft_stats);
+      stop_meas(&ue->rx_dft_stats);
 
 
     }
 
   }
 
-  if (phy_vars_ue->perfect_ce == 0) {
+  if (ue->perfect_ce == 0) {
     if ((l==0) || (l==(4-frame_parms->Ncp))) {
       for (aa=0; aa<frame_parms->nb_antennas_tx_eNB; aa++) {
 
 #ifdef DEBUG_FEP
         printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
 #endif
-        start_meas(&phy_vars_ue->dlsch_channel_estimation_stats);
-        lte_dl_channel_estimation(phy_vars_ue,eNB_id,0,
+        start_meas(&ue->dlsch_channel_estimation_stats);
+        lte_dl_channel_estimation(ue,eNB_id,0,
                                   Ns,
                                   aa,
                                   l,
                                   symbol);
-        stop_meas(&phy_vars_ue->dlsch_channel_estimation_stats);
+        stop_meas(&ue->dlsch_channel_estimation_stats);
 
-        for (i=0; i<phy_vars_ue->PHY_measurements.n_adj_cells; i++) {
-          lte_dl_channel_estimation(phy_vars_ue,eNB_id,i+1,
+        for (i=0; i<ue->measurements.n_adj_cells; i++) {
+          lte_dl_channel_estimation(ue,eNB_id,i+1,
                                     Ns,
                                     aa,
                                     l,
@@ -212,13 +212,13 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
 #endif
 
       if (l==(4-frame_parms->Ncp)) {
-        start_meas(&phy_vars_ue->dlsch_freq_offset_estimation_stats);
-        lte_est_freq_offset(ue_common_vars->dl_ch_estimates[0],
+        start_meas(&ue->dlsch_freq_offset_estimation_stats);
+        lte_est_freq_offset(common_vars->dl_ch_estimates[0],
                             frame_parms,
                             l,
-                            &ue_common_vars->freq_offset,
+                            &common_vars->freq_offset,
 			    reset_freq_est);
-        stop_meas(&phy_vars_ue->dlsch_freq_offset_estimation_stats);
+        stop_meas(&ue->dlsch_freq_offset_estimation_stats);
 
       }
     }
diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
index f6ca4aa2f41db203fb69a80f84fbc1bfe68e8343..f2d24214962eabc25716f29f29c58abcfa3035b5 100644
--- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c
+++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
@@ -32,15 +32,15 @@
 
 #define SOFFSET 0
 
-int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
+int slot_fep_mbsfn(PHY_VARS_UE *ue,
                    unsigned char l,
                    int subframe,
                    int sample_offset,
                    int no_prefix)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
-  LTE_UE_COMMON *ue_common_vars   = &phy_vars_ue->lte_ue_common_vars;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
+  LTE_UE_COMMON *common_vars   = &ue->common_vars;
   uint8_t eNB_id = 0;//ue_common_vars->eNb_id;
 
   unsigned char aa;
@@ -117,34 +117,34 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
 
 
   for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
-    memset(&ue_common_vars->rxdataF[aa][2*frame_parms->ofdm_symbol_size*l],0,2*frame_parms->ofdm_symbol_size*sizeof(int));
+    memset(&common_vars->rxdataF[aa][2*frame_parms->ofdm_symbol_size*l],0,2*frame_parms->ofdm_symbol_size*sizeof(int));
 
     if (l==0) {
-      start_meas(&phy_vars_ue->rx_dft_stats);
-      dft((int16_t *)&ue_common_vars->rxdata[aa][(sample_offset +
+      start_meas(&ue->rx_dft_stats);
+      dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
           nb_prefix_samples0 +
           subframe_offset -
           SOFFSET) % frame_length_samples],
-          (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
-      stop_meas(&phy_vars_ue->rx_dft_stats);
+          (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
+      stop_meas(&ue->rx_dft_stats);
     } else {
       if ((sample_offset +
            (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
            (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
            subframe_offset-
            SOFFSET) > (frame_length_samples - frame_parms->ofdm_symbol_size))
-        memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples],
-               (short *)&ue_common_vars->rxdata[aa][0],
+        memcpy((short *)&common_vars->rxdata[aa][frame_length_samples],
+               (short *)&common_vars->rxdata[aa][0],
                frame_parms->ofdm_symbol_size*sizeof(int));
 
-      start_meas(&phy_vars_ue->rx_dft_stats);
-      dft((int16_t *)&ue_common_vars->rxdata[aa][(sample_offset +
+      start_meas(&ue->rx_dft_stats);
+      dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
           (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
           (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
           subframe_offset-
           SOFFSET) % frame_length_samples],
-          (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
-      stop_meas(&phy_vars_ue->rx_dft_stats);
+          (int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
+      stop_meas(&ue->rx_dft_stats);
     }
 
   }
@@ -153,29 +153,29 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
   // changed to invoke MBSFN channel estimation in symbols 2,6,10
   if ((l==2)||(l==6)||(l==10)) {
     for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
-      if (phy_vars_ue->perfect_ce == 0) {
+      if (ue->perfect_ce == 0) {
 #ifdef DEBUG_FEP
         msg("Channel estimation eNB %d, aatx %d, subframe %d, symbol %d\n",eNB_id,aa,subframe,l);
 #endif
 
-        lte_dl_mbsfn_channel_estimation(phy_vars_ue,
+        lte_dl_mbsfn_channel_estimation(ue,
                                         eNB_id,
                                         0,
                                         subframe,
                                         l);
-        /*   for (i=0;i<phy_vars_ue->PHY_measurements.n_adj_cells;i++) {
-        lte_dl_mbsfn_channel_estimation(phy_vars_ue,
+        /*   for (i=0;i<ue->PHY_measurements.n_adj_cells;i++) {
+        lte_dl_mbsfn_channel_estimation(ue,
                eNB_id,
              i+1,
                subframe,
                l);
-             lte_dl_channel_estimation(phy_vars_ue,eNB_id,0,
+             lte_dl_channel_estimation(ue,eNB_id,0,
            Ns,
            aa,
            l,
            symbol);
-           for (i=0;i<phy_vars_ue->PHY_measurements.n_adj_cells;i++) {
-        lte_dl_channel_estimation(phy_vars_ue,eNB_id,i+1,
+           for (i=0;i<ue->PHY_measurements.n_adj_cells;i++) {
+        lte_dl_channel_estimation(ue,eNB_id,i+1,
              Ns,
              aa,
              l,
@@ -189,10 +189,10 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
 #endif
         // if ((l == 0) || (l==(4-frame_parms->Ncp)))
         /*    if ((l==2)||(l==6)||(l==10))
-          lte_mbsfn_est_freq_offset(ue_common_vars->dl_ch_estimates[0],
+          lte_mbsfn_est_freq_offset(common_vars->dl_ch_estimates[0],
                   frame_parms,
                   l,
-                  &ue_common_vars->freq_offset); */
+                  &common_vars->freq_offset); */
       }
     }
   }
diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c
index 4a50ad395ea618e6ab79d6f9ea843addad170768..481e0dd2a071f22068a9d8d89c0aab788f5af98a 100755
--- a/openair1/PHY/MODULATION/ul_7_5_kHz.c
+++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c
@@ -42,7 +42,7 @@ short conjugate75[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
 short conjugate75_2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1} ;
 short negate[8]__attribute__((aligned(16))) = {-1,-1,-1,-1,-1,-1,-1,-1};
 
-void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot)
+void apply_7_5_kHz(PHY_VARS_UE *ue,int32_t*txdata,uint8_t slot)
 {
 
 
@@ -58,7 +58,7 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot)
   uint32_t slot_offset;
   //   uint8_t aa;
   uint32_t i;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
 
   switch (frame_parms->N_RB_UL) {
 
@@ -91,10 +91,8 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot)
     break;
   }
 
-  slot_offset = (uint32_t)slot * phy_vars_ue->lte_frame_parms.samples_per_tti/2;
-  //  if ((slot&1)==1)
-  //    slot_offset += (len/4);
-  len = phy_vars_ue->lte_frame_parms.samples_per_tti/2;
+  slot_offset = (uint32_t)slot * frame_parms->samples_per_tti/2;
+  len = frame_parms->samples_per_tti/2;
 
 #if defined(__x86_64__) || defined(__i386__)
   txptr128 = (__m128i *)&txdata[slot_offset];
@@ -149,12 +147,12 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot)
 }
 
 
-void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot)
+void remove_7_5_kHz(PHY_VARS_eNB *eNB,uint8_t slot)
 {
 
 
-  int32_t **rxdata=phy_vars_eNB->lte_eNB_common_vars.rxdata[0];
-  int32_t **rxdata_7_5kHz=phy_vars_eNB->lte_eNB_common_vars.rxdata_7_5kHz[0];
+  int32_t **rxdata=eNB->common_vars.rxdata[0];
+  int32_t **rxdata_7_5kHz=eNB->common_vars.rxdata_7_5kHz[0];
   uint16_t len;
   uint32_t *kHz7_5ptr;
 #if defined(__x86_64__) || defined(__i386__)
@@ -168,9 +166,9 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot)
   uint32_t slot_offset,slot_offset2;
   uint8_t aa;
   uint32_t i;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms;
 
-  switch (phy_vars_eNB->lte_frame_parms.N_RB_UL) {
+  switch (frame_parms->N_RB_UL) {
 
   case 6:
     kHz7_5ptr = (frame_parms->Ncp==0) ? (uint32_t*)s6n_kHz_7_5 : (uint32_t*)s6e_kHz_7_5;
@@ -202,12 +200,12 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot)
   }
 
 
-  slot_offset = (uint32_t)slot * phy_vars_eNB->lte_frame_parms.samples_per_tti/2-phy_vars_eNB->N_TA_offset;
-  slot_offset2 = (uint32_t)(slot&1) * phy_vars_eNB->lte_frame_parms.samples_per_tti/2;
+  slot_offset = (uint32_t)slot * frame_parms->samples_per_tti/2-eNB->N_TA_offset;
+  slot_offset2 = (uint32_t)(slot&1) * frame_parms->samples_per_tti/2;
 
-  len = phy_vars_eNB->lte_frame_parms.samples_per_tti/2;
+  len = frame_parms->samples_per_tti/2;
 
-  for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_rx; aa++) {
+  for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
 
 #if defined(__x86_64__) || defined(__i386__)
     rxptr128        = (__m128i *)&rxdata[aa][slot_offset];
@@ -270,3 +268,4 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot)
     }
   }
 }
+
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index 468aae80528b832121f4c34d1335ddfe0040096b..601e2fb1998c998bd0d99269212307f2b8c8793a 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -161,7 +161,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
 {
   int eNB_id = 0;
   int i,i2,arx,atx,ind,k;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->frame_parms;
   int nsymb_ce = 12*frame_parms->N_RB_UL*frame_parms->symbols_per_tti;
   uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx;
   uint8_t nb_antennas_tx = 1; // frame_parms->nb_antennas_tx; // in LTE Rel. 8 and 9 only a single transmit antenna is assumed at the UE
@@ -190,9 +190,9 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
   int mcs = 0;
 
   // choose max MCS to compute coded_bits_per_codeword
-  if (phy_vars_enb->ulsch_eNB[UE_id]!=NULL) {
+  if (phy_vars_enb->ulsch[UE_id]!=NULL) {
     for (harq_pid=0; harq_pid<3; harq_pid++) {
-      mcs = cmax(phy_vars_enb->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,mcs);
+      mcs = cmax(phy_vars_enb->ulsch[UE_id]->harq_processes[harq_pid]->mcs,mcs);
     }
   }
 
@@ -202,11 +202,11 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
   llr = (float*) calloc(coded_bits_per_codeword,sizeof(float)); // init to zero
   bit = malloc(coded_bits_per_codeword*sizeof(float));
 
-  rxsig_t = (int16_t**) phy_vars_enb->lte_eNB_common_vars.rxdata[eNB_id];
-  chest_t = (int16_t**) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id];
-  chest_f = (int16_t**) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->drs_ch_estimates[eNB_id];
-  pusch_llr = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->llr;
-  pusch_comp = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->rxdataF_comp[eNB_id][0];
+  rxsig_t = (int16_t**) phy_vars_enb->common_vars.rxdata[eNB_id];
+  chest_t = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id];
+  chest_f = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates[eNB_id];
+  pusch_llr = (int16_t*) phy_vars_enb->pusch_vars[UE_id]->llr;
+  pusch_comp = (int16_t*) phy_vars_enb->pusch_vars[UE_id]->rxdataF_comp[eNB_id][0];
   pucch1_comp = (int32_t*) phy_vars_enb->pucch1_stats[UE_id];
   pucch1_thres = (int32_t*) phy_vars_enb->pucch1_stats_thres[UE_id];
   pucch1ab_comp = (int32_t*) phy_vars_enb->pucch1ab_stats[UE_id];
@@ -488,7 +488,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
                   uint8_t subframe)
 {
   int i,arx,atx,ind,k;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->frame_parms;
   int nsymb_ce = frame_parms->ofdm_symbol_size;//*frame_parms->symbols_per_tti;
   uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx;
   uint8_t nb_antennas_tx = frame_parms->nb_antennas_tx_eNB;
@@ -516,32 +516,32 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
   unsigned char harq_pid = 0;
 
 
-  if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
-    harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
+  if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
+    harq_pid = phy_vars_ue->dlsch[eNB_id][0]->current_harq_pid;
 
     if (harq_pid>=8)
       return;
 
-    mcs = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs;
+    mcs = phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs;
 
     // Button 0
-    if(!phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
+    if(!phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
       // we are in TM5
       fl_show_object(form->button_0);
     }
   }
 
-  if (phy_vars_ue->lte_ue_pdcch_vars[eNB_id]!=NULL) {
-    num_pdcch_symbols = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols;
+  if (phy_vars_ue->pdcch_vars[eNB_id]!=NULL) {
+    num_pdcch_symbols = phy_vars_ue->pdcch_vars[eNB_id]->num_pdcch_symbols;
   }
 
   //    coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
-  if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
+  if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
     coded_bits_per_codeword = get_G(frame_parms,
-                                    phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                                    phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
                                     get_Qm(mcs),
-                                    phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
+                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
                                     num_pdcch_symbols,
                                     frame,
                                     subframe);
@@ -563,16 +563,16 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
   llr_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float)); // init to zero
   bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
 
-  rxsig_t = (int16_t**) phy_vars_ue->lte_ue_common_vars.rxdata;
-  chest_t = (int16_t**) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_id];
-  chest_f = (int16_t**) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id];
-  pbch_llr = (int8_t*) phy_vars_ue->lte_ue_pbch_vars[eNB_id]->llr;
-  pbch_comp = (int16_t*) phy_vars_ue->lte_ue_pbch_vars[eNB_id]->rxdataF_comp[0];
-  pdcch_llr = (int8_t*) phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->llr;
-  pdcch_comp = (int16_t*) phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0];
-  pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0]; // stream 0
+  rxsig_t = (int16_t**) phy_vars_ue->common_vars.rxdata;
+  chest_t = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates_time[eNB_id];
+  chest_f = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates[eNB_id];
+  pbch_llr = (int8_t*) phy_vars_ue->pbch_vars[eNB_id]->llr;
+  pbch_comp = (int16_t*) phy_vars_ue->pbch_vars[eNB_id]->rxdataF_comp[0];
+  pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[eNB_id]->llr;
+  pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
+  pdsch_llr = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->llr[0]; // stream 0
   //    pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0]; // stream 0
-  pdsch_comp = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0];
+  pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->rxdataF_comp0[0];
 
   // Received signal in time domain of receive antenna 0
   if (rxsig_t != NULL) {
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index b72c5f648a083cfef12ab511aacc1b2f30077909..dd543bbbf8528b43445bfb9d72db0917f4fa43dd 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -45,6 +45,8 @@
 #include <malloc.h>
 #include <string.h>
 #include <math.h>
+#include "common_lib.h"
+
 //#include <complex.h>
 #include "assertions.h"
 #ifdef MEX
@@ -151,9 +153,14 @@ enum transmission_access_mode {
   CANCELED_ACCESS,
   UNKNOWN_ACCESS,
   SCHEDULED_ACCESS,
-  CBA_ACCESS
-};
-
+  CBA_ACCESS};
+
+typedef enum  {
+  eNodeB_3GPP=0,  // classical eNodeB function
+  NGFI_RRU_IF4,   // NGFI_RRU (NGFI remote radio-unit, currently split at common - ue_specific interface, IF4) 
+  NGFI_RCC_IF4    // NGFI_RCC (NGFI radio cloud center, currently split at common - ue_specific interface, IF4) 
+} eNB_func_t;
+  
 typedef struct UE_SCAN_INFO_s {
   /// 10 best amplitudes (linear) for each pss signals
   int32_t amp[3][10];
@@ -175,8 +182,12 @@ typedef struct ral_threshold_phy_s {
 typedef struct {
   /// Component Carrier index
   uint8_t              CC_id;
-  /// subframe index
-  int subframe;
+  /// thread index
+  int thread_index;
+  /// timestamp received from HW
+  openair0_timestamp timestamp_rx;
+  /// timestamp transmitted to HW
+  openair0_timestamp timestamp_tx;
   /// subframe to act upon for transmission
   int subframe_tx;
   /// subframe to act upon for reception
@@ -189,25 +200,39 @@ typedef struct {
   /// \internal This variable is protected by \ref mutex_tx.
   int instance_cnt_tx;
   /// \brief Instance count for rx processing thread.
-  /// \internal This variable is protected by \ref mutex_rx.
-  int instance_cnt_rx;
+  /// \internal This variable is protected by \ref mutex_prach.
+  int instance_cnt_prach;
   /// pthread structure for tx processing thread
   pthread_t pthread_tx;
   /// pthread structure for rx processing thread
   pthread_t pthread_rx;
+  /// pthread attributes for tx processing thread
+  pthread_attr_t attr_tx;
+  /// pthread attributes for rx processing thread
+  pthread_attr_t attr_rx;
+  /// pthread attributes for prach processing thread
+  pthread_attr_t attr_prach;
+  /// scheduling parameters for tx thread
+  struct sched_param sched_param_tx;
+  /// scheduling parameters for rx thread
+  struct sched_param sched_param_rx;
+  /// scheduling parameters for prach thread
+  struct sched_param sched_param_prach;
   /// condition variable for tx processing thread
+  pthread_t pthread_prach;
+  /// condition variable for prach processing thread
   pthread_cond_t cond_tx;
-  /// condition variable for rx processing thread
-  pthread_cond_t cond_rx;
+  /// condition variable for rx processing thread;
+  pthread_cond_t cond_prach;
   /// mutex for tx processing thread
   pthread_mutex_t mutex_tx;
   /// mutex for tx processing thread
-  pthread_mutex_t mutex_rx;
+  pthread_mutex_t mutex_prach;
 } eNB_proc_t;
 
 //! \brief Number of eNB TX and RX threads.
 //! This number must be equal to the number of LTE subframes (10). Each thread is responsible for a single subframe.
-#define NUM_ENB_THREADS 10
+#define NUM_ENB_THREADS 1
 
 /// Top-level PHY Data Structure for eNB
 typedef struct PHY_VARS_eNB_s {
@@ -215,25 +240,25 @@ typedef struct PHY_VARS_eNB_s {
   module_id_t          Mod_id;
   uint8_t              CC_id;
   eNB_proc_t           proc[NUM_ENB_THREADS];
+  eNB_func_t           node_function;
   uint8_t              local_flag;
-  uint32_t             rx_total_gain_eNB_dB;
-  LTE_DL_FRAME_PARMS   lte_frame_parms;
-  PHY_MEASUREMENTS_eNB PHY_measurements_eNB[NUMBER_OF_eNB_SECTORS_MAX]; /// Measurement variables
-  LTE_eNB_COMMON       lte_eNB_common_vars;
-  LTE_eNB_SRS          lte_eNB_srs_vars[NUMBER_OF_UE_MAX];
-  LTE_eNB_PBCH         lte_eNB_pbch;
+  uint32_t             rx_total_gain_dB;
+  LTE_DL_FRAME_PARMS   frame_parms;
+  PHY_MEASUREMENTS_eNB measurements[NUMBER_OF_eNB_SECTORS_MAX]; /// Measurement variables
+  LTE_eNB_COMMON       common_vars;
+  LTE_eNB_SRS          srs_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_PBCH         pbch;
   /// \brief ?.
   /// - first index: UE [0..NUMBER_OF_UE_MAX[ (hard coded)
   /// - second index: UE [0..NUMBER_OF_UE_MAX[
-  LTE_eNB_PUSCH       *lte_eNB_pusch_vars[NUMBER_OF_UE_MAX];
-  LTE_eNB_PRACH        lte_eNB_prach_vars;
-  LTE_eNB_DLSCH_t     *dlsch_eNB[NUMBER_OF_UE_MAX][2];   // Nusers times two spatial streams
-  // old: LTE_eNB_DLSCH_t  **dlsch_eNB[2];   // Nusers times two spatial streams
-  LTE_eNB_ULSCH_t     *ulsch_eNB[NUMBER_OF_UE_MAX+1];      // Nusers + number of RA
-  LTE_eNB_DLSCH_t     *dlsch_eNB_SI,*dlsch_eNB_ra;
-  LTE_eNB_DLSCH_t     *dlsch_eNB_MCH;
-  LTE_eNB_UE_stats     eNB_UE_stats[NUMBER_OF_UE_MAX];
-  LTE_eNB_UE_stats    *eNB_UE_stats_ptr[NUMBER_OF_UE_MAX];
+  LTE_eNB_PUSCH       *pusch_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_PRACH        prach_vars;
+  LTE_eNB_DLSCH_t     *dlsch[NUMBER_OF_UE_MAX][2];   // Nusers times two spatial streams
+  LTE_eNB_ULSCH_t     *ulsch[NUMBER_OF_UE_MAX+1];      // Nusers + number of RA
+  LTE_eNB_DLSCH_t     *dlsch_SI,*dlsch_ra;
+  LTE_eNB_DLSCH_t     *dlsch_MCH;
+  LTE_eNB_UE_stats     UE_stats[NUMBER_OF_UE_MAX];
+  LTE_eNB_UE_stats    *UE_stats_ptr[NUMBER_OF_UE_MAX];
 
   /// cell-specific reference symbols
   uint32_t         lte_gold_table[20][2][14];
@@ -497,26 +522,24 @@ typedef struct {
   /// \brief indicator that Handover procedure has been triggered
   uint8_t ho_triggered;
   /// \brief Measurement variables.
-  PHY_MEASUREMENTS PHY_measurements;
-  LTE_DL_FRAME_PARMS  lte_frame_parms;
+  PHY_MEASUREMENTS measurements;
+  LTE_DL_FRAME_PARMS  frame_parms;
   /// \brief Frame parame before ho used to recover if ho fails.
-  LTE_DL_FRAME_PARMS  lte_frame_parms_before_ho;
-  LTE_UE_COMMON    lte_ue_common_vars;
-
-  LTE_UE_PDSCH     *lte_ue_pdsch_vars[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH_FLP *lte_ue_pdsch_vars_flp[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *lte_ue_pdsch_vars_SI[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *lte_ue_pdsch_vars_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *lte_ue_pdsch_vars_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PBCH      *lte_ue_pbch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PDCCH     *lte_ue_pdcch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PRACH     *lte_ue_prach_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_ue[NUMBER_OF_CONNECTED_eNB_MAX][2];
-  LTE_UE_ULSCH_t   *ulsch_ue[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_ue_col[NUMBER_OF_CONNECTED_eNB_MAX][2];
-  LTE_UE_DLSCH_t   *ulsch_ue_col[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_ue_SI[NUMBER_OF_CONNECTED_eNB_MAX],*dlsch_ue_ra[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_ue_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_DL_FRAME_PARMS  frame_parms_before_ho;
+  LTE_UE_COMMON    common_vars;
+
+  LTE_UE_PDSCH     *pdsch_vars[NUMBER_OF_CONNECTED_eNB_MAX+1];
+  LTE_UE_PDSCH_FLP *pdsch_vars_flp[NUMBER_OF_CONNECTED_eNB_MAX+1];
+  LTE_UE_PDSCH     *pdsch_vars_SI[NUMBER_OF_CONNECTED_eNB_MAX+1];
+  LTE_UE_PDSCH     *pdsch_vars_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
+  LTE_UE_PDSCH     *pdsch_vars_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_PBCH      *pbch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_PDCCH     *pdcch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_PRACH     *prach_vars[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_DLSCH_t   *dlsch[NUMBER_OF_CONNECTED_eNB_MAX][2];
+  LTE_UE_ULSCH_t   *ulsch[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_DLSCH_t   *dlsch_SI[NUMBER_OF_CONNECTED_eNB_MAX],*dlsch_ra[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_DLSCH_t   *dlsch_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
   // This is for SIC in the UE, to store the reencoded data
   LTE_eNB_DLSCH_t  *dlsch_eNB[NUMBER_OF_CONNECTED_eNB_MAX];
 
@@ -544,11 +567,9 @@ typedef struct {
 
   char ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX];
 
-  unsigned char ulsch_ue_Msg3_active[NUMBER_OF_CONNECTED_eNB_MAX];
-  uint32_t  ulsch_ue_Msg3_frame[NUMBER_OF_CONNECTED_eNB_MAX];
-  unsigned char ulsch_ue_Msg3_subframe[NUMBER_OF_CONNECTED_eNB_MAX];
-  //  unsigned char Msg3_timer[NUMBER_OF_CONNECTED_eNB_MAX];
-  //unsigned char *Msg3_ptr[NUMBER_OF_CONNECTED_eNB_MAX];
+  unsigned char ulsch_Msg3_active[NUMBER_OF_CONNECTED_eNB_MAX];
+  uint32_t  ulsch_Msg3_frame[NUMBER_OF_CONNECTED_eNB_MAX];
+  unsigned char ulsch_Msg3_subframe[NUMBER_OF_CONNECTED_eNB_MAX];
   PRACH_RESOURCES_t *prach_resources[NUMBER_OF_CONNECTED_eNB_MAX];
   int turbo_iterations, turbo_cntl_iterations;
   /// \brief ?.
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index 23e44d669264c84b6310d27631eae180a7daeb97..fa6239d930007c073ae4c04f213338ae7370fede 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -215,37 +215,52 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type);
 
 /*! \brief Scheduling for UE RX procedures in TDD S-subframes.
-  @param last_slot Index of last slot (0-19)
+  @param thread_index Thread index in proc vector
   @param phy_vars_ue Pointer to UE variables on which to act
   @param eNB_id Local id of eNB on which to act
   @param abstraction_flag Indicator of PHY abstraction
   @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
 */
-void phy_procedures_UE_S_RX(uint8_t last_slot,PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag, relaying_type_t r_type);
+void phy_procedures_UE_S_RX(uint8_t thread_index,PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag, relaying_type_t r_type);
 
 /*! \brief Scheduling for eNB TX procedures in normal subframes.
-  @param next_slot Index of next slot (0-19)
+  @param thread_index Index of thread in proc vector
   @param phy_vars_eNB Pointer to eNB variables on which to act
   @param abstraction_flag Indicator of PHY abstraction
   @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
   @param phy_vars_rn pointer to the RN variables
 */
-void phy_procedures_eNB_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn);
+void phy_procedures_eNB_TX(uint8_t thread_index,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn);
 
-/*! \brief Scheduling for eNB RX procedures in normal subframes.
-  @param last_slot Index of last slot (0-19)
+/*! \brief Scheduling for eNB RX UE-specific procedures in normal subframes.
+  @param thread_index Thread index in proc vector
   @param phy_vars_eNB Pointer to eNB variables on which to act
   @param abstraction_flag Indicator of PHY abstraction
   @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
 */
-void phy_procedures_eNB_RX(uint8_t last_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type);
+void phy_procedures_eNB_uespec_RX(uint8_t thread_index,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type);
+
+/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
+  @param thread_index Index of thread in proc vector
+  @param phy_vars_eNB Pointer to eNB variables on which to act
+  @param abstraction_flag Indicator of PHY abstraction
+  @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
+*/
+
+/*! \brief Scheduling for eNB RX common procedures in normal subframes.
+  @param thread_index Thread index in proc vector
+  @param phy_vars_eNB Pointer to eNB variables on which to act
+  @param abstraction_flag Indicator of PHY abstraction
+*/
+void phy_procedures_eNB_common_RX(uint8_t thread_index,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag);
 
 /*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
-  @param next_slot Index of next slot (0-19)
+  @param thread_index Index of thread in proc vector
   @param phy_vars_eNB Pointer to eNB variables on which to act
   @param abstraction_flag Indicator of PHY abstraction
   @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
 */
+
 void phy_procedures_eNB_S_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type);
 
 /*! \brief Scheduling for eNB RX procedures in TDD S-subframes.
@@ -261,6 +276,14 @@ void phy_procedures_eNB_S_RX(uint8_t last_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_
   @param subframe Subframe index
   @returns Subframe type (DL,UL,S)
 */
+
+/*! \brief Scheduling for eNB PRACH RX procedures 
+  @param phy_vars_eNB Pointer to eNB variables on which to act
+  @param thread_id Index of thread in proc vector
+  @param abstraction_flag Indicator of PHY abstraction
+*/
+void prach_procedures(PHY_VARS_eNB *eNB,uint8_t thread_id,uint8_t abstraction_flag);
+
 lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
 
 /*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index.  Same as subframe_select, except that it uses the Mod_id and is provided as a service to the MAC scheduler.
@@ -420,14 +443,14 @@ subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch
 TDD, this routine computes the complex procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2)
 @param phy_vars_ue Pointer to UE variables
 @param eNB_id Index of eNB
-@param sched_subframe Index of subframe where procedures were scheduled
+@param thread_id Index of thread where procedures are executed
 @param b Pointer to PUCCH payload (b[0],b[1])
 @param SR 1 means there's a positive SR in parallel to ACK/NAK
 @returns n1_pucch
 */
 uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
                       uint8_t eNB_id,
-                      uint8_t sched_subframe,
+                      uint8_t thread_id,
                       uint8_t *b,
                       uint8_t SR);
 
@@ -508,7 +531,7 @@ int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id, uint8_t eNB_index);
  */
 double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE_id, frame_t frameP, sub_frame_t subframeP, int32_t UE_tx_power_dB);
 #endif
-LTE_eNB_UE_stats* get_eNB_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti);
+LTE_eNB_UE_stats* get_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti);
 
 LTE_DL_FRAME_PARMS *get_lte_frame_parms(module_id_t Mod_id, uint8_t CC_id);
 
diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c
index 78c035de3782c091d13c1a0a368b13b17b6774c4..0b4fffe3d36a28af3e6ac0bb2a4c26b353f48ef0 100644
--- a/openair1/SCHED/phy_mac_stub.c
+++ b/openair1/SCHED/phy_mac_stub.c
@@ -48,18 +48,18 @@
 #include "SCHED/phy_procedures_emos.h"
 #endif
 
-void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_eNB)
+void fill_dci(DCI_PDU *DCI_pdu, uint8_t thread_id, PHY_VARS_eNB *eNB)
 {
 
-  int i;
-  //uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
-  uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
+
+  //uint8_t cooperation_flag = eNB->cooperation_flag;
+  uint8_t transmission_mode = eNB->transmission_mode[0];
 
   uint32_t rballoc = 0x7FFF;
   //uint32_t rballoc2 = 0x000F;
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
+  int subframe = eNB->proc[thread_id].subframe_tx;
 
-  LTE_eNB_DLSCH_t *DLSCH_ptr = phy_vars_eNB->dlsch_eNB[0][0];
+  LTE_eNB_DLSCH_t *DLSCH_ptr = eNB->dlsch[0][0];
 
   /*
     uint32_t rand = taus();
@@ -82,14 +82,14 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
     DCI_pdu->dci_alloc[0].format     = format1A;
     DCI_pdu->dci_alloc[0].ra_flag    = 0;
 
-    switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+    switch (eNB->frame_parms.N_RB_DL) {
     case 6:
-      if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+      if (eNB->frame_parms.frame_type == FDD) {
         DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->harq_pid          = 0;
@@ -100,7 +100,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid          = 0;
@@ -112,12 +112,12 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
     case 25:
     default:
-      if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+      if (eNB->frame_parms.frame_type == FDD) {
         DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->harq_pid          = 0;
@@ -128,7 +128,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid          = 0;
@@ -139,12 +139,12 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
       break;
 
     case 50:
-      if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+      if (eNB->frame_parms.frame_type == FDD) {
         DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->harq_pid          = 0;
@@ -155,7 +155,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid          =  DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
@@ -166,12 +166,12 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
       break;
 
     case 100:
-      if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+      if (eNB->frame_parms.frame_type == FDD) {
         DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_FDD_t;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->harq_pid          = 0;
@@ -182,7 +182,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->type              = 1;
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type          = 0;
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rballoc           = computeRIV(25,10,3);
-        ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+        ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi               = eNB->proc[thread_id].frame_tx&1;
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rv                = 1;
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->mcs               = 1;
         ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid          = 0;
@@ -226,17 +226,17 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
     if (transmission_mode<3) {
       //user 1
-      switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+      switch (eNB->frame_parms.N_RB_DL) {
       case 25:
-        if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+        if (eNB->frame_parms.frame_type == FDD) {
           DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
 
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc          = rballoc;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
 
@@ -252,8 +252,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
@@ -265,9 +265,9 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
 
@@ -283,8 +283,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
@@ -295,15 +295,15 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
       case 50:
 
-        if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+        if (eNB->frame_parms.frame_type == FDD) {
           DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_FDD_t;
 
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc          = rballoc;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
 
@@ -319,8 +319,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
@@ -332,9 +332,9 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
 
@@ -350,8 +350,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
@@ -361,15 +361,15 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
         break;
 
       case 100:
-        if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+        if (eNB->frame_parms.frame_type == FDD) {
           DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
 
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc          = rballoc;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
 
@@ -385,8 +385,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
@@ -398,9 +398,9 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
-          ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
-          //((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
-          ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+          ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
+          //((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->frame%1024)%28);
+          ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi              = eNB->proc[thread_id].frame_tx&1;
           ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_TDD_t));
 
@@ -416,8 +416,8 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
           ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC              = 0;
           ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->dai              = 0;
           ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid         = 1;
-          //((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-          ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs              = phy_vars_eNB->target_ue_dl_mcs;
+          //((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs              = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+          ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs              = eNB->target_ue_dl_mcs;
           ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi              = 1;
           ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv               = 0;
           memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_20MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
@@ -437,15 +437,15 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tpmi     = 0;
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv1      = 0;
-      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1     = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
-      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs1     = phy_vars_eNB->target_ue_dl_mcs;
+      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1     = eNB->proc[thread_id].frame_tx&1;
+      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs1     = eNB->target_ue_dl_mcs;
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv2      = 0;
-      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2     = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
-      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs2     = phy_vars_eNB->target_ue_dl_mcs;
+      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2     = eNB->proc[thread_id].frame_tx&1;
+      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs2     = eNB->target_ue_dl_mcs;
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tb_swap  = 0;
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->TPC      = 0;
-      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rballoc  = phy_vars_eNB->ue_dl_rb_alloc;
+      ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rballoc  = eNB->ue_dl_rb_alloc;
       ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rah      = 0;
 
     } else if (transmission_mode==5) {
@@ -459,16 +459,16 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
       DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
       DLSCH_alloc_pdu1E.rv               = 0;
-      DLSCH_alloc_pdu1E.ndi              = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
-      //DLSCH_alloc_pdu1E.mcs            = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
+      DLSCH_alloc_pdu1E.ndi              = eNB->proc[thread_id].frame_tx&1;
+      //DLSCH_alloc_pdu1E.mcs            = cqi_to_mcs[eNB->eNB_UE_stats->DL_cqi[0]];
       //DLSCH_alloc_pdu1E.mcs            = (unsigned char) (taus()%28);
-      DLSCH_alloc_pdu1E.mcs              = phy_vars_eNB->target_ue_dl_mcs;
-      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
-      phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+      DLSCH_alloc_pdu1E.mcs              = eNB->target_ue_dl_mcs;
+      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((eNB->proc[subframe].frame%1024)%28);
+      eNB->UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
       DLSCH_alloc_pdu1E.harq_pid         =   DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
       DLSCH_alloc_pdu1E.dai              = 0;
       DLSCH_alloc_pdu1E.TPC              = 0;
-      DLSCH_alloc_pdu1E.rballoc          = phy_vars_eNB->ue_dl_rb_alloc;
+      DLSCH_alloc_pdu1E.rballoc          = eNB->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));
@@ -479,16 +479,16 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
       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            = phy_vars_eNB->target_ue_dl_mcs;
+      //DLSCH_alloc_pdu1E.mcs            = eNB->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->proc[sched_subframe].frame_tx%1024)/3)%28);
-      phy_vars_eNB->eNB_UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+      //DLSCH_alloc_pdu1E.mcs            = (unsigned char) ((eNB->frame%1024)%28);
+      DLSCH_alloc_pdu1E.mcs            = (unsigned char) (((eNB->proc[thread_id].frame_tx%1024)/3)%28);
+      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);
+      eNB->UE_stats[1].DL_pmi_single = (eNB->UE_stats[0].DL_pmi_single ^ 0x1555);
     }
 
     break; //subframe switch
@@ -519,7 +519,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
     DCI_pdu->Num_ue_spec_dci = 1;
 
     //user 1
-    if (phy_vars_eNB->lte_frame_parms.frame_type == FDD)
+    if (eNB->frame_parms.frame_type == FDD)
       DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_FDD_t ;
     else
       DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
@@ -531,9 +531,9 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
 
     UL_alloc_pdu.type    = 0;
     UL_alloc_pdu.hopping = 0;
-    UL_alloc_pdu.rballoc = computeRIV(25,2,phy_vars_eNB->ue_ul_nb_rb);
-    UL_alloc_pdu.mcs     = phy_vars_eNB->target_ue_ul_mcs;
-    UL_alloc_pdu.ndi     = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+    UL_alloc_pdu.rballoc = computeRIV(25,2,eNB->ue_ul_nb_rb);
+    UL_alloc_pdu.mcs     = eNB->target_ue_ul_mcs;
+    UL_alloc_pdu.ndi     = eNB->proc[thread_id].frame_tx&1;
     UL_alloc_pdu.TPC     = 0;
     UL_alloc_pdu.cshift  = 0;
     UL_alloc_pdu.dai     = 0;
@@ -551,11 +551,11 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
     UL_alloc_pdu.type    = 0;
     UL_alloc_pdu.hopping = 0;
     if (cooperation_flag==0)
-      UL_alloc_pdu.rballoc = computeRIV(25,2+phy_vars_eNB->ue_ul_nb_rb,phy_vars_eNB->ue_ul_nb_rb);
+      UL_alloc_pdu.rballoc = computeRIV(25,2+eNB->ue_ul_nb_rb,eNB->ue_ul_nb_rb);
     else
-      UL_alloc_pdu.rballoc = computeRIV(25,0,phy_vars_eNB->ue_ul_nb_rb);
-    UL_alloc_pdu.mcs     = phy_vars_eNB->target_ue_ul_mcs;
-    UL_alloc_pdu.ndi     = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+      UL_alloc_pdu.rballoc = computeRIV(25,0,eNB->ue_ul_nb_rb);
+    UL_alloc_pdu.mcs     = eNB->target_ue_ul_mcs;
+    UL_alloc_pdu.ndi     = eNB->proc[thread_id].frame_tx&1;
     UL_alloc_pdu.TPC     = 0;
     if ((cooperation_flag==0) || (cooperation_flag==1))
       UL_alloc_pdu.cshift  = 0;
@@ -580,12 +580,12 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
   */
 }
 
-void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB)
+void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *eNB)
 {
 
-  int i;
-  //uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
-  uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
+
+  //uint8_t cooperation_flag = eNB->cooperation_flag;
+  uint8_t transmission_mode = eNB->transmission_mode[0];
 
   //uint32_t rballoc = 0x00F0;
   //uint32_t rballoc2 = 0x000F;
@@ -612,11 +612,11 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
       DCI_pdu->dci_alloc[0].format     = format1;
       DCI_pdu->dci_alloc[0].ra_flag    = 0;
 
-      DLSCH_alloc_pdu.rballoc          = phy_vars_eNB->ue_dl_rb_alloc;
+      DLSCH_alloc_pdu.rballoc          = eNB->ue_dl_rb_alloc;
       DLSCH_alloc_pdu.TPC              = 0;
       DLSCH_alloc_pdu.dai              = 0;
       DLSCH_alloc_pdu.harq_pid         = 1;
-      DLSCH_alloc_pdu.mcs              = phy_vars_eNB->target_ue_dl_mcs;
+      DLSCH_alloc_pdu.mcs              = eNB->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));
@@ -633,7 +633,7 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
       DLSCH_alloc_pdu.TPC              = 0;
       DLSCH_alloc_pdu.dai              = 0;
       DLSCH_alloc_pdu.harq_pid         = 1;
-      DLSCH_alloc_pdu.mcs              = phy_vars_eNB->target_ue_dl_mcs;
+      DLSCH_alloc_pdu.mcs              = eNB->target_ue_dl_mcs;
       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));
@@ -650,11 +650,11 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
       DLSCH_alloc_pdu1E.tpmi             = 5; //5=use feedback
       DLSCH_alloc_pdu1E.rv               = 0;
       DLSCH_alloc_pdu1E.ndi              = 1;
-      DLSCH_alloc_pdu1E.mcs              = phy_vars_eNB->target_ue_dl_mcs;
+      DLSCH_alloc_pdu1E.mcs              = eNB->target_ue_dl_mcs;
       DLSCH_alloc_pdu1E.harq_pid         = 1;
       DLSCH_alloc_pdu1E.dai              = 0;
       DLSCH_alloc_pdu1E.TPC              = 0;
-      DLSCH_alloc_pdu1E.rballoc          = phy_vars_eNB->ue_dl_rb_alloc;
+      DLSCH_alloc_pdu1E.rballoc          = eNB->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));
@@ -669,7 +669,7 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
       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);
+      eNB->UE_stats[1].DL_pmi_single = (eNB->UE_stats[0].DL_pmi_single ^ 0x1555);
     }
 
     break;
@@ -706,8 +706,8 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
 
     UL_alloc_pdu.type    = 0;
     UL_alloc_pdu.hopping = 0;
-    UL_alloc_pdu.rballoc = computeRIV(25,0,phy_vars_eNB->ue_ul_nb_rb);
-    UL_alloc_pdu.mcs     = phy_vars_eNB->target_ue_ul_mcs;
+    UL_alloc_pdu.rballoc = computeRIV(25,0,eNB->ue_ul_nb_rb);
+    UL_alloc_pdu.mcs     = eNB->target_ue_ul_mcs;
     UL_alloc_pdu.ndi     = 1;
     UL_alloc_pdu.TPC     = 0;
     UL_alloc_pdu.cshift  = 0;
@@ -726,10 +726,10 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eN
     UL_alloc_pdu.type    = 0;
     UL_alloc_pdu.hopping = 0;
     if (cooperation_flag==0)
-    UL_alloc_pdu.rballoc = computeRIV(25,2+phy_vars_eNB->ue_ul_nb_rb,phy_vars_eNB->ue_ul_nb_rb);
+    UL_alloc_pdu.rballoc = computeRIV(25,2+eNB->ue_ul_nb_rb,eNB->ue_ul_nb_rb);
     else
-    UL_alloc_pdu.rballoc = computeRIV(25,0,phy_vars_eNB->ue_ul_nb_rb);
-    UL_alloc_pdu.mcs     = phy_vars_eNB->target_ue_ul_mcs;
+    UL_alloc_pdu.rballoc = computeRIV(25,0,eNB->ue_ul_nb_rb);
+    UL_alloc_pdu.mcs     = eNB->target_ue_ul_mcs;
     UL_alloc_pdu.ndi     = 1;
     UL_alloc_pdu.TPC     = 0;
     if ((cooperation_flag==0) || (cooperation_flag==1))
diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c
index e56606e262b063b6766fe427565b6a75c04971fa..860cf9d4a03239cb0338a3f463dcfda25359605e 100755
--- a/openair1/SCHED/phy_procedures_lte_common.c
+++ b/openair1/SCHED/phy_procedures_lte_common.c
@@ -529,7 +529,7 @@ lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,unsigned char sub
 lte_subframe_t get_subframe_direction(uint8_t Mod_id,uint8_t CC_id,uint8_t subframe)
 {
 
-  return(subframe_select(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,subframe));
+  return(subframe_select(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,subframe));
 
 }
 
@@ -595,20 +595,20 @@ double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE
   struct timeval ts;
   double sys_bw = 0;
   uint8_t N_RB_DL;
-  LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
 
-  Mod_id = phy_vars_eNB->Mod_id;
-  CC_id = phy_vars_eNB->CC_id;
-  ref_timestamp_ms = phy_vars_eNB->ulsch_eNB[UE_id+1]->reference_timestamp_ms;
+  Mod_id = eNB->Mod_id;
+  CC_id = eNB->CC_id;
+  ref_timestamp_ms = eNB->ulsch[UE_id+1]->reference_timestamp_ms;
 
   for (i=0; i<13; i++) {
-    len += sprintf(&cqis[len]," %d ", phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].DL_subband_cqi[0][i]);
+    len += sprintf(&cqis[len]," %d ", eNB->UE_stats[(uint32_t)UE_id].DL_subband_cqi[0][i]);
   }
 
   len = 0;
 
-  for (i=0; i<phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier; i++) {
-    len += sprintf(&sub_powers[len]," %d ", phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->subcarrier_power[i]);
+  for (i=0; i<eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier; i++) {
+    len += sprintf(&sub_powers[len]," %d ", eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->subcarrier_power[i]);
   }
 
   gettimeofday(&ts, NULL);
@@ -629,23 +629,23 @@ double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE
         "Wideband CQI (%d,%d), "
         "DL Subband CQI[13] %s \n",
         //          "timestamp %d, (%d active subcarrier) %s \n"
-        phy_vars_eNB->dlsch_eNB[(uint32_t)UE_id][0]->rnti, UE_id, Mod_id, current_timestamp_ms,
+        eNB->dlsch[(uint32_t)UE_id][0]->rnti, UE_id, Mod_id, current_timestamp_ms,
         frame,subframe,
         UE_tx_power_dB,
-        phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UL_rssi[0],
-        phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UL_rssi[1],
-        dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[0]),
-        dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[1]),
-        phy_vars_eNB->rx_total_gain_eNB_dB,
-        phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UE_timing_offset, // raw timing advance 1/sampling rate
-        phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].timing_advance_update,
-        phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].DL_cqi[0],phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].DL_cqi[1],
-        phy_vars_eNB->PHY_measurements_eNB[Mod_id].wideband_cqi_dB[(uint32_t)UE_id][0],
-        phy_vars_eNB->PHY_measurements_eNB[Mod_id].wideband_cqi_dB[(uint32_t)UE_id][1],
+        eNB->UE_stats[(uint32_t)UE_id].UL_rssi[0],
+        eNB->UE_stats[(uint32_t)UE_id].UL_rssi[1],
+        dB_fixed(eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[0]),
+        dB_fixed(eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[1]),
+        eNB->rx_total_gain_eNB_dB,
+        eNB->UE_stats[(uint32_t)UE_id].UE_timing_offset, // raw timing advance 1/sampling rate
+        eNB->UE_stats[(uint32_t)UE_id].timing_advance_update,
+        eNB->UE_stats[(uint32_t)UE_id].DL_cqi[0],eNB->UE_stats[(uint32_t)UE_id].DL_cqi[1],
+        eNB->measurements[Mod_id].wideband_cqi_dB[(uint32_t)UE_id][0],
+        eNB->measurements[Mod_id].wideband_cqi_dB[(uint32_t)UE_id][1],
         cqis);
   LOG_D(LOCALIZE, " PHY: timestamp %d, (%d active subcarrier) %s \n",
         current_timestamp_ms,
-        phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier,
+        eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier,
         sub_powers);
 
   N_RB_DL = frame_parms->N_RB_DL;
@@ -668,75 +668,75 @@ double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE
     break;
   }
 
-  if ((current_timestamp_ms - ref_timestamp_ms > phy_vars_eNB->ulsch_eNB[UE_id+1]->aggregation_period_ms)) {
+  if ((current_timestamp_ms - ref_timestamp_ms > eNB->ulsch[UE_id+1]->aggregation_period_ms)) {
     // check the size of one list to be sure there was a message transmitted during the defined aggregation period
 
     // make the reference timestamp == current timestamp
-    phy_vars_eNB->ulsch_eNB[UE_id+1]->reference_timestamp_ms = current_timestamp_ms;
+    eNB->ulsch[UE_id+1]->reference_timestamp_ms = current_timestamp_ms;
     int i;
 
     for (i=0; i<10; i++) {
-      median_power = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rss_list[i]);
-      del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rss_list[i]);
-      median_rssi = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rssi_list[i]);
-      del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rssi_list[i]);
-      median_subcarrier_rss = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_subcarrier_rss_list[i]);
-      del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_subcarrier_rss_list[i]);
-      median_TA = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_advance_list[i]);
-      del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_advance_list[i]);
-      median_TA_update = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_update_list[i]);
-      del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_update_list[i]);
+      median_power = calculate_median(&eNB->ulsch[UE_id+1]->loc_rss_list[i]);
+      del(&eNB->ulsch[UE_id+1]->loc_rss_list[i]);
+      median_rssi = calculate_median(&eNB->ulsch[UE_id+1]->loc_rssi_list[i]);
+      del(&eNB->ulsch[UE_id+1]->loc_rssi_list[i]);
+      median_subcarrier_rss = calculate_median(&eNB->ulsch[UE_id+1]->loc_subcarrier_rss_list[i]);
+      del(&eNB->ulsch[UE_id+1]->loc_subcarrier_rss_list[i]);
+      median_TA = calculate_median(&eNB->ulsch[UE_id+1]->loc_timing_advance_list[i]);
+      del(&eNB->ulsch[UE_id+1]->loc_timing_advance_list[i]);
+      median_TA_update = calculate_median(&eNB->ulsch[UE_id+1]->loc_timing_update_list[i]);
+      del(&eNB->ulsch[UE_id+1]->loc_timing_update_list[i]);
 
       if (median_power != 0)
-        push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rss_list,median_power);
+        push_front(&eNB->ulsch[UE_id+1]->tot_loc_rss_list,median_power);
 
       if (median_rssi != 0)
-        push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rssi_list,median_rssi);
+        push_front(&eNB->ulsch[UE_id+1]->tot_loc_rssi_list,median_rssi);
 
       if (median_subcarrier_rss != 0)
-        push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_subcarrier_rss_list,median_subcarrier_rss);
+        push_front(&eNB->ulsch[UE_id+1]->tot_loc_subcarrier_rss_list,median_subcarrier_rss);
 
       if (median_TA != 0)
-        push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_advance_list,median_TA);
+        push_front(&eNB->ulsch[UE_id+1]->tot_loc_timing_advance_list,median_TA);
 
       if (median_TA_update != 0)
-        push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_update_list,median_TA_update);
+        push_front(&eNB->ulsch[UE_id+1]->tot_loc_timing_update_list,median_TA_update);
 
-      initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rss_list[i]);
-      initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_subcarrier_rss_list[i]);
-      initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rssi_list[i]);
-      initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_advance_list[i]);
-      initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_update_list[i]);
+      initialize(&eNB->ulsch[UE_id+1]->loc_rss_list[i]);
+      initialize(&eNB->ulsch[UE_id+1]->loc_subcarrier_rss_list[i]);
+      initialize(&eNB->ulsch[UE_id+1]->loc_rssi_list[i]);
+      initialize(&eNB->ulsch[UE_id+1]->loc_timing_advance_list[i]);
+      initialize(&eNB->ulsch[UE_id+1]->loc_timing_update_list[i]);
     }
 
-    median_power = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rss_list);
-    del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rss_list);
-    median_rssi = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rssi_list);
-    del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rssi_list);
-    median_subcarrier_rss = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_subcarrier_rss_list);
-    del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_subcarrier_rss_list);
-    median_TA = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_advance_list);
-    del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_advance_list);
-    median_TA_update = calculate_median(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_update_list);
-    del(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_update_list);
-
-    initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rss_list);
-    initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_subcarrier_rss_list);
-    initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_rssi_list);
-    initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_advance_list);
-    initialize(&phy_vars_eNB->ulsch_eNB[UE_id+1]->tot_loc_timing_update_list);
+    median_power = calculate_median(&eNB->ulsch[UE_id+1]->tot_loc_rss_list);
+    del(&eNB->ulsch[UE_id+1]->tot_loc_rss_list);
+    median_rssi = calculate_median(&eNB->ulsch[UE_id+1]->tot_loc_rssi_list);
+    del(&eNB->ulsch[UE_id+1]->tot_loc_rssi_list);
+    median_subcarrier_rss = calculate_median(&eNB->ulsch[UE_id+1]->tot_loc_subcarrier_rss_list);
+    del(&eNB->ulsch[UE_id+1]->tot_loc_subcarrier_rss_list);
+    median_TA = calculate_median(&eNB->ulsch[UE_id+1]->tot_loc_timing_advance_list);
+    del(&eNB->ulsch[UE_id+1]->tot_loc_timing_advance_list);
+    median_TA_update = calculate_median(&eNB->ulsch[UE_id+1]->tot_loc_timing_update_list);
+    del(&eNB->ulsch[UE_id+1]->tot_loc_timing_update_list);
+
+    initialize(&eNB->ulsch[UE_id+1]->tot_loc_rss_list);
+    initialize(&eNB->ulsch[UE_id+1]->tot_loc_subcarrier_rss_list);
+    initialize(&eNB->ulsch[UE_id+1]->tot_loc_rssi_list);
+    initialize(&eNB->ulsch[UE_id+1]->tot_loc_timing_advance_list);
+    initialize(&eNB->ulsch[UE_id+1]->tot_loc_timing_update_list);
 
     double alpha = 2, power_distance, time_distance;
     // distance = 10^((Ptx - Prx - A)/10alpha), A is a constance experimentally evaluated
-    // A includes the rx gain (phy_vars_eNB->rx_total_gain_eNB_dB) and hardware calibration
-    power_distance = pow(10, ((UE_tx_power_dB - median_power - phy_vars_eNB->rx_total_gain_eNB_dB + 133)/(10.0*alpha)));
+    // A includes the rx gain (eNB->rx_total_gain_eNB_dB) and hardware calibration
+    power_distance = pow(10, ((UE_tx_power_dB - median_power - eNB->rx_total_gain_eNB_dB + 133)/(10.0*alpha)));
     /* current measurements shows constant UE_timing_offset = 18
        and timing_advance_update = 11 at 1m. at 5m, timing_advance_update = 12*/
-    //time_distance = (double) 299792458*(phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].timing_advance_update)/(sys_bw*1000000);
-    time_distance = (double) abs(phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].timing_advance_update - 11) * 4.89;//  (3 x 108 x 1 / (15000 x 2048)) / 2 = 4.89 m
+    //time_distance = (double) 299792458*(eNB->UE_stats[(uint32_t)UE_id].timing_advance_update)/(sys_bw*1000000);
+    time_distance = (double) abs(eNB->UE_stats[(uint32_t)UE_id].timing_advance_update - 11) * 4.89;//  (3 x 108 x 1 / (15000 x 2048)) / 2 = 4.89 m
 
-    phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].distance.time_based = time_distance;
-    phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].distance.power_based = power_distance;
+    eNB->UE_stats[(uint32_t)UE_id].distance.time_based = time_distance;
+    eNB->UE_stats[(uint32_t)UE_id].distance.power_based = power_distance;
 
     LOG_D(LOCALIZE, " PHY agg [UE %x/%d -> eNB %d], timestamp %d, "
           "frame %d, subframe %d "
@@ -747,61 +747,61 @@ double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE
           "power estimated r = %0.3f, "
           " TA %d, update %d "
           "TA estimated r = %0.3f\n"
-          ,phy_vars_eNB->dlsch_eNB[(uint32_t)UE_id][0]->rnti, UE_id, Mod_id, current_timestamp_ms,
+          ,eNB->dlsch[(uint32_t)UE_id][0]->rnti, UE_id, Mod_id, current_timestamp_ms,
           frame, subframe,
           UE_tx_power_dB,
           median_rssi,
           median_power,
-          phy_vars_eNB->rx_total_gain_eNB_dB,
+          eNB->rx_total_gain_eNB_dB,
           power_distance,
-          phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UE_timing_offset, median_TA_update,
+          eNB->UE_stats[(uint32_t)UE_id].UE_timing_offset, median_TA_update,
           time_distance);
 
     return 0;
   } else {
-    avg_power = (dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[0]) + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[1]))/2;
-    avg_rssi = (phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UL_rssi[0] + phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UL_rssi[1])/2;
+    avg_power = (dB_fixed(eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[0]) + dB_fixed(eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->ulsch_power[1]))/2;
+    avg_rssi = (eNB->UE_stats[(uint32_t)UE_id].UL_rssi[0] + eNB->UE_stats[(uint32_t)UE_id].UL_rssi[1])/2;
 
-    push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rss_list[subframe],avg_power);
-    push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_rssi_list[subframe],avg_rssi);
+    push_front(&eNB->ulsch[UE_id+1]->loc_rss_list[subframe],avg_power);
+    push_front(&eNB->ulsch[UE_id+1]->loc_rssi_list[subframe],avg_rssi);
 
-    for (i=0; i<phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier; i++) {
-      push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_subcarrier_rss_list[subframe], phy_vars_eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->subcarrier_power[i]);
+    for (i=0; i<eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->active_subcarrier; i++) {
+      push_front(&eNB->ulsch[UE_id+1]->loc_subcarrier_rss_list[subframe], eNB->lte_eNB_pusch_vars[(uint32_t)UE_id]->subcarrier_power[i]);
     }
 
-    push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_advance_list[subframe], phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UE_timing_offset);
-    push_front(&phy_vars_eNB->ulsch_eNB[UE_id+1]->loc_timing_update_list[subframe], phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].timing_advance_update);
+    push_front(&eNB->ulsch[UE_id+1]->loc_timing_advance_list[subframe], eNB->UE_stats[(uint32_t)UE_id].UE_timing_offset);
+    push_front(&eNB->ulsch[UE_id+1]->loc_timing_update_list[subframe], eNB->UE_stats[(uint32_t)UE_id].timing_advance_update);
     return -1;
   }
 }
 #endif
-LTE_eNB_UE_stats* get_eNB_UE_stats(uint8_t Mod_id, uint8_t  CC_id,uint16_t rnti)
+LTE_eNB_UE_stats* get_UE_stats(uint8_t Mod_id, uint8_t  CC_id,uint16_t rnti)
 {
   int8_t UE_id;
 
   if ((PHY_vars_eNB_g == NULL) || (PHY_vars_eNB_g[Mod_id] == NULL) || (PHY_vars_eNB_g[Mod_id][CC_id]==NULL)) {
-    LOG_E(PHY,"get_eNB_UE_stats: No phy_vars_eNB found (or not allocated) for Mod_id %d,CC_id %d\n",Mod_id,CC_id);
+    LOG_E(PHY,"get_UE_stats: No eNB found (or not allocated) for Mod_id %d,CC_id %d\n",Mod_id,CC_id);
     return NULL;
   }
 
   UE_id = find_ue(rnti, PHY_vars_eNB_g[Mod_id][CC_id]);
 
   if (UE_id == -1) {
-    //    LOG_E(PHY,"get_eNB_UE_stats: UE with rnti %x not found\n",rnti);
+    //    LOG_E(PHY,"get_UE_stats: UE with rnti %x not found\n",rnti);
     return NULL;
   }
 
-  return(&PHY_vars_eNB_g[Mod_id][CC_id]->eNB_UE_stats[(uint32_t)UE_id]);
+  return(&PHY_vars_eNB_g[Mod_id][CC_id]->UE_stats[(uint32_t)UE_id]);
 }
 
-int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
+int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *eNB)
 {
   uint8_t i;
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    if ((phy_vars_eNB->dlsch_eNB[i]) &&
-        (phy_vars_eNB->dlsch_eNB[i][0]) &&
-        (phy_vars_eNB->dlsch_eNB[i][0]->rnti==rnti)) {
+    if ((eNB->dlsch[i]) &&
+        (eNB->dlsch[i][0]) &&
+        (eNB->dlsch[i][0]->rnti==rnti)) {
       return(i);
     }
   }
@@ -809,9 +809,9 @@ int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
 #ifdef CBA
 
   for (i=0; i<NUM_MAX_CBA_GROUP; i++) {
-    if ((phy_vars_eNB->ulsch_eNB[i]) && // ue J is the representative of group j
-        (phy_vars_eNB->ulsch_eNB[i]->num_active_cba_groups) &&
-        (phy_vars_eNB->ulsch_eNB[i]->cba_rnti[i]== rnti))
+    if ((eNB->ulsch[i]) && // ue J is the representative of group j
+        (eNB->ulsch[i]->num_active_cba_groups) &&
+        (eNB->ulsch[i]->cba_rnti[i]== rnti))
       return(i);
   }
 
@@ -823,7 +823,7 @@ int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
 LTE_DL_FRAME_PARMS* get_lte_frame_parms(module_id_t Mod_id, uint8_t  CC_id)
 {
 
-  return(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms);
+  return(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms);
 
 }
 
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 619ef6578d9fe15d505c2aecc47a3f1d5039e0ac..d26980b0f863448edebb585df5a04a81c83cf78c 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -61,9 +61,6 @@
 
 #if defined(ENABLE_ITTI)
 #   include "intertask_interface.h"
-#   if ENABLE_RAL
-#     include "timer.h"
-#   endif
 #endif
 
 //#define DIAG_PHY
@@ -72,8 +69,11 @@
 
 #define PUCCH 1
 
+void exit_fun(const char* s);
+
 extern int exit_openair;
 
+extern openair0_device openair0;
 
 unsigned char dlsch_input_buffer[2700] __attribute__ ((aligned(32)));
 int eNB_sync_buffer0[640*6] __attribute__ ((aligned(32)));
@@ -101,30 +101,31 @@ extern uint8_t smbv_frame_cnt;
 extern int rx_sig_fifo;
 #endif
 
-uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t sched_subframe)
+uint8_t is_SR_subframe(PHY_VARS_eNB *eNB,uint8_t UE_id,uint8_t thread_id)
 {
 
-  const int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
-  const int frame = phy_vars_eNB->proc[sched_subframe].frame_rx;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  const int subframe = proc->subframe_rx;
+  const int frame = proc->frame_rx;
 
   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,frame,subframe,
-        phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex);
+        eNB->Mod_id,eNB->ulsch[UE_id]->rnti,frame,subframe,
+        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)
+  if (eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 4) {        // 5 ms SR period
+    if ((subframe%5) == 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))
+  } else if (eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 14) { // 10 ms SR period
+    if (subframe==(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*(frame&1)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-15))
+  } else if (eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 34) { // 20 ms SR period
+    if ((10*(frame&1)+subframe) == (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*(frame&3)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-35))
+  } else if (eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 74) { // 40 ms SR period
+    if ((10*(frame&3)+subframe) == (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*(frame&7)+subframe) == (phy_vars_eNB->scheduling_request_config[UE_id].sr_ConfigIndex-75))
+  } else if (eNB->scheduling_request_config[UE_id].sr_ConfigIndex <= 154) { // 80 ms SR period
+    if ((10*(frame&7)+subframe) == (eNB->scheduling_request_config[UE_id].sr_ConfigIndex-75))
       return(1);
   }
 
@@ -155,37 +156,37 @@ void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid)
   DLSCH_ptr->head_freelist = (DLSCH_ptr->head_freelist + 1) % 10;
 }
 
-int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
+int32_t add_ue(int16_t rnti, PHY_VARS_eNB *eNB)
 {
   uint8_t i;
 
 #ifdef DEBUG_PHY_PROC
   LOG_I(PHY,"[eNB %d/%d] Adding UE with rnti %x\n",
-        phy_vars_eNB->Mod_id,
-        phy_vars_eNB->CC_id,
+        eNB->Mod_id,
+        eNB->CC_id,
         (uint16_t)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)) {
+    if ((eNB->dlsch[i]==NULL) || (eNB->ulsch[i]==NULL)) {
       MSC_LOG_EVENT(MSC_PHY_ENB, "0 Failed add ue %"PRIx16" (ENOMEM)", rnti);
       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) {
+      if (eNB->UE_stats[i].crnti==0) {
         MSC_LOG_EVENT(MSC_PHY_ENB, "0 Add ue %"PRIx16" ", rnti);
         LOG_D(PHY,"UE_id %d associated with rnti %x\n",i, (uint16_t)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;
+        eNB->dlsch[i][0]->rnti = rnti;
+        eNB->ulsch[i]->rnti = rnti;
+        eNB->UE_stats[i].crnti = rnti;
 
-	phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH1_below = 0;
-	phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH1_above = (int32_t)pow(10.0,.1*(phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+phy_vars_eNB->rx_total_gain_eNB_dB));
-	phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH        = (int32_t)pow(10.0,.1*(phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+phy_vars_eNB->rx_total_gain_eNB_dB));
+	eNB->UE_stats[i].Po_PUCCH1_below = 0;
+	eNB->UE_stats[i].Po_PUCCH1_above = (int32_t)pow(10.0,.1*(eNB->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+eNB->rx_total_gain_dB));
+	eNB->UE_stats[i].Po_PUCCH        = (int32_t)pow(10.0,.1*(eNB->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+eNB->rx_total_gain_dB));
 	LOG_D(PHY,"Initializing Po_PUCCH: p0_NominalPUCCH %d, gain %d => %d\n",
-	      phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-	      phy_vars_eNB->rx_total_gain_eNB_dB,
-	      phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH);
+	      eNB->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
+	      eNB->rx_total_gain_dB,
+	      eNB->UE_stats[i].Po_PUCCH);
   
         return(i);
       }
@@ -197,33 +198,33 @@ int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB)
 int mac_phy_remove_ue(module_id_t Mod_idP,rnti_t rntiP) {
   uint8_t i;
   int j,CC_id;
-  PHY_VARS_eNB *phy_vars_eNB;
+  PHY_VARS_eNB *eNB;
 
   for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
-    phy_vars_eNB = PHY_vars_eNB_g[Mod_idP][CC_id];
+    eNB = PHY_vars_eNB_g[Mod_idP][CC_id];
     for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-      if ((phy_vars_eNB->dlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) {
+      if ((eNB->dlsch[i]==NULL) || (eNB->ulsch[i]==NULL)) {
 	MSC_LOG_EVENT(MSC_PHY_ENB, "0 Failed remove ue %"PRIx16" (ENOMEM)", rnti);
 	LOG_E(PHY,"Can't remove UE, not enough memory allocated\n");
 	return(-1);
       } else {
-	if (phy_vars_eNB->eNB_UE_stats[i].crnti==rntiP) {
+	if (eNB->UE_stats[i].crnti==rntiP) {
 	  MSC_LOG_EVENT(MSC_PHY_ENB, "0 Removed ue %"PRIx16" ", rntiP);
 #ifdef DEBUG_PHY_PROC
-	  LOG_I(PHY,"eNB %d removing UE %d with rnti %x\n",phy_vars_eNB->Mod_id,i,rnti);
+	  LOG_I(PHY,"eNB %d removing UE %d with rnti %x\n",eNB->Mod_id,i,rnti);
 #endif
 	  //LOG_D(PHY,("[PHY] UE_id %d\n",i);
-	  clean_eNb_dlsch(phy_vars_eNB->dlsch_eNB[i][0]);
-	  clean_eNb_ulsch(phy_vars_eNB->ulsch_eNB[i]);
-	  //phy_vars_eNB->eNB_UE_stats[i].crnti = 0;
-	  memset(&phy_vars_eNB->eNB_UE_stats[i],0,sizeof(LTE_eNB_UE_stats));
+	  clean_eNb_dlsch(eNB->dlsch[i][0]);
+	  clean_eNb_ulsch(eNB->ulsch[i]);
+	  //eNB->UE_stats[i].crnti = 0;
+	  memset(&eNB->UE_stats[i],0,sizeof(LTE_eNB_UE_stats));
 	  //  mac_exit_wrapper("Removing UE");
 	  
 	  /* clear the harq pid freelist */
-	  phy_vars_eNB->dlsch_eNB[i][0]->head_freelist = 0;
-	  phy_vars_eNB->dlsch_eNB[i][0]->tail_freelist = 0;
+	  eNB->dlsch[i][0]->head_freelist = 0;
+	  eNB->dlsch[i][0]->tail_freelist = 0;
 	  for (j = 0; j < 8; j++)
-	    put_harq_pid_in_freelist(phy_vars_eNB->dlsch_eNB[i][0], j);
+	    put_harq_pid_in_freelist(eNB->dlsch[i][0], j);
 	  
 	  return(i);
 	}
@@ -234,15 +235,15 @@ int mac_phy_remove_ue(module_id_t Mod_idP,rnti_t rntiP) {
   return(-1);
 }
 
-int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB)
+int8_t find_next_ue_index(PHY_VARS_eNB *eNB)
 {
   uint8_t 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]) &&
-      (phy_vars_eNB->dlsch_eNB[i][0]) &&
-      (phy_vars_eNB->dlsch_eNB[i][0]->rnti==0))*/
+    if (eNB->UE_stats[i].crnti==0) {
+      /*if ((eNB->dlsch[i]) &&
+      (eNB->dlsch[i][0]) &&
+      (eNB->dlsch[i][0]->rnti==0))*/
       LOG_D(PHY,"Next free UE id is %d\n",i);
       return(i);
     }
@@ -267,7 +268,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
   }
 
   if (ul_flag == 0)  {// this is a DL request
-    DLSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->dlsch_eNB[(uint32_t)UE_id][0];
+    DLSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->dlsch[(uint32_t)UE_id][0];
 
     // set to no available process first
     *harq_pid = -1;
@@ -305,11 +306,11 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
 	  frame,subframe,*harq_pid);
   } else { // This is a UL request
 
-    ULSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->ulsch_eNB[(uint32_t)UE_id];
-    ulsch_subframe = pdcch_alloc2ul_subframe(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,subframe);
-    ulsch_frame    = pdcch_alloc2ul_frame(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,frame,subframe);
+    ULSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->ulsch[(uint32_t)UE_id];
+    ulsch_subframe = pdcch_alloc2ul_subframe(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,subframe);
+    ulsch_frame    = pdcch_alloc2ul_frame(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,frame,subframe);
     // Note this is for TDD configuration 3,4,5 only
-    *harq_pid = subframe2harq_pid(&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,
+    *harq_pid = subframe2harq_pid(&PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms,
                                   ulsch_frame,
                                   ulsch_subframe);
     *round    = ULSCH_ptr->harq_processes[*harq_pid]->round;
@@ -321,18 +322,16 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
 
 int16_t get_target_pusch_rx_power(const module_id_t module_idP, const uint8_t CC_id)
 {
-  //return PHY_vars_eNB_g[module_idP][CC_id]->PHY_measurements_eNB[0].n0_power_tot_dBm;
-  return PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
+  return PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
 }
 
 int16_t get_target_pucch_rx_power(const module_id_t module_idP, const uint8_t CC_id)
 {
-  //return PHY_vars_eNB_g[module_idP][CC_id]->PHY_measurements_eNB[0].n0_power_tot_dBm;
-  return PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH;
+  return PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.ul_power_control_config_common.p0_NominalPUCCH;
 }
 
 #ifdef EMOS
-void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *phy_vars_eNB)
+void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *eNB)
 {
 
 }
@@ -340,27 +339,27 @@ void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *phy_vars_e
 
 
 
-void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type)
+void phy_procedures_eNB_S_RX(unsigned char thread_id,PHY_VARS_eNB *eNB,uint8_t abstraction_flag,relaying_type_t r_type)
 {
   UNUSED(r_type);
-
-  int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  int subframe = proc->subframe_rx;
 
 #ifdef DEBUG_PHY_PROC
-  LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_S_RX(%d)\n", phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_rx, subframe);
+  LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_S_RX(%d)\n", eNB->Mod_id,proc->frame_rx, subframe);
 #endif
 
 
   if (abstraction_flag == 0) {
-    lte_eNB_I0_measurements(phy_vars_eNB,
+    lte_eNB_I0_measurements(eNB,
 			    subframe,
                             0,
-                            phy_vars_eNB->first_run_I0_measurements);
+                            eNB->first_run_I0_measurements);
   }
 
 #ifdef PHY_ABSTRACTION
   else {
-    lte_eNB_I0_measurements_emul(phy_vars_eNB,
+    lte_eNB_I0_measurements_emul(eNB,
                                  0);
   }
 
@@ -372,12 +371,12 @@ void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars
 
 
 #ifdef EMOS
-void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eNB)
+void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *eNB)
 {
 
   uint8_t aa;
   uint16_t last_subframe_emos;
-  uint16_t pilot_pos1 = 3 - phy_vars_eNB->lte_frame_parms.Ncp, pilot_pos2 = 10 - 2*phy_vars_eNB->lte_frame_parms.Ncp;
+  uint16_t pilot_pos1 = 3 - eNB->frame_parms.Ncp, pilot_pos2 = 10 - 2*eNB->frame_parms.Ncp;
   uint32_t bytes;
 
   last_subframe_emos=0;
@@ -389,37 +388,37 @@ void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eN
 
   //if (last_slot%2==1) // this is for all UL subframes
   if (subframe==3)
-    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));
+    for (aa=0; aa<eNB->frame_parms.nb_antennas_rx; aa++) {
+      memcpy(&emos_dump_eNB.channel[aa][last_subframe_emos*2*eNB->frame_parms.N_RB_UL*12],
+             &eNB->pusch_vars[0]->drs_ch_estimates[0][aa][eNB->frame_parms.N_RB_UL*12*pilot_pos1],
+             eNB->frame_parms.N_RB_UL*12*sizeof(int));
+      memcpy(&emos_dump_eNB.channel[aa][(last_subframe_emos*2+1)*eNB->frame_parms.N_RB_UL*12],
+             &eNB->pusch_vars[0]->drs_ch_estimates[0][aa][eNB->frame_parms.N_RB_UL*12*pilot_pos2],
+             eNB->frame_parms.N_RB_UL*12*sizeof(int));
     }
 
 #endif
 
   if (subframe==4) {
     emos_dump_eNB.timestamp = rt_get_time_ns();
-    emos_dump_eNB.frame_tx = phy_vars_eNB->proc[subframe].frame_rx;
-    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],
+    emos_dump_eNB.frame_tx = eNB->proc[subframe].frame_rx;
+    emos_dump_eNB.rx_total_gain_dB = eNB->rx_total_gain_dB;
+    emos_dump_eNB.mimo_mode = eNB->transmission_mode[0];
+    memcpy(&emos_dump_eNB.measurements,
+           &eNB->measurements[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));
+    memcpy(&emos_dump_eNB.UE_stats[0],&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, subframe %d, Problem writing EMOS data to FIFO (bytes=%d, size=%d)\n",
-            phy_vars_eNB->Mod_id,phy_vars_eNB->proc[(subframe+1)%10].frame_rx, subframe,bytes,sizeof(fifo_dump_emos_eNB));
+            eNB->Mod_id,eNB->proc[(subframe+1)%10].frame_rx, subframe,bytes,sizeof(fifo_dump_emos_eNB));
     } else {
-      if (phy_vars_eNB->proc[(subframe+1)%10].frame_tx%100==0) {
+      if (eNB->proc[(subframe+1)%10].frame_tx%100==0) {
         LOG_I(PHY,"[eNB %d] Frame %d (%d), subframe %d, Writing %d bytes EMOS data to FIFO\n",
-              phy_vars_eNB->Mod_id,phy_vars_eNB->proc[(subframe+1)%10].frame_rx, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, subframe, bytes);
+              eNB->Mod_id,eNB->proc[(subframe+1)%10].frame_rx, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, subframe, bytes);
       }
     }
   }
@@ -433,148 +432,22 @@ int QPSK[4]= {AMP_OVER_SQRT2|(AMP_OVER_SQRT2<<16),AMP_OVER_SQRT2|((65536-AMP_OVE
 int QPSK2[4]= {AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),((65536-AMP_OVER_2)<<16)|AMP_OVER_2,((65536-AMP_OVER_2)<<16)|(65536-AMP_OVER_2)};
 
 
-#if defined(ENABLE_ITTI)
-#   if ENABLE_RAL
-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);
-  }
-}
-
-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;
-
-  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
-
 
 unsigned int taus(void);
 
-void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int subframe,int sched_subframe,int abstraction_flag,relaying_type_t r_type) {
+void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int subframe,int thread_id,int abstraction_flag,relaying_type_t r_type) {
 
 #ifdef Rel10
   MCH_PDU *mch_pduP;
   MCH_PDU  mch_pdu;
   //  uint8_t sync_area=255;
 #endif
+  eNB_proc_t *proc = &eNB->proc[thread_id];
 
   if (abstraction_flag==0) {
     // This is DL-Cell spec pilots in Control region
     generate_pilots_slot(eNB,
-			 eNB->lte_eNB_common_vars.txdataF[0],
+			 eNB->common_vars.txdataF[0],
 			 AMP,
 			 subframe<<1,1);
   }
@@ -584,18 +457,18 @@ void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int subframe,int sched_s
   // when mcch is active, MAC sched does not allow MCCH and MTCH multiplexing
   mch_pduP = mac_xface->get_mch_sdu(eNB->Mod_id,
 				    eNB->CC_id,
-				    eNB->proc[sched_subframe].frame_tx,
+				    proc->frame_tx,
 				    subframe);
   
   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
       LOG_I(PHY,"[eNB%"PRIu8"] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %"PRIu8", TBS %d) \n",
-	    eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->mcs,
-	    eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
+	    eNB->Mod_id,proc->frame_tx,subframe,mch_pduP->mcs,
+	    eNB->dlsch_MCH->harq_processes[0]->TBS>>3);
     else {
       LOG_D(PHY,"[DeNB %"PRIu8"] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %"PRIu8" (%s)\n",
-	    eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->sync_area,
+	    eNB->Mod_id,proc->frame_tx,subframe,mch_pduP->sync_area,
 	    (mch_pduP->Pdu_size == 0)? "Empty MCH PDU":"Let RN transmit for the moment");
       mch_pduP = NULL;
     }
@@ -626,7 +499,7 @@ void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int subframe,int sched_s
     
   default:
     LOG_W(PHY,"[eNB %"PRIu8"] Frame %d subframe %d: unknown relaying type %d \n",
-	  eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,r_type);
+	  eNB->Mod_id,proc->frame_tx,subframe,r_type);
     mch_pduP=NULL;
     break;
   }// switch
@@ -634,19 +507,20 @@ void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int subframe,int sched_s
   if (mch_pduP) {
     fill_eNB_dlsch_MCH(eNB,mch_pduP->mcs,1,0, abstraction_flag);
     // Generate PMCH
-    generate_mch(eNB,sched_subframe,(uint8_t*)mch_pduP->payload,abstraction_flag);
+    generate_mch(eNB,thread_id,(uint8_t*)mch_pduP->payload,abstraction_flag);
   } else {
-    LOG_D(PHY,"[eNB/RN] Frame %d subframe %d: MCH not generated \n",eNB->proc[sched_subframe].frame_tx,subframe);
+    LOG_D(PHY,"[eNB/RN] Frame %d subframe %d: MCH not generated \n",proc->frame_tx,subframe);
   }
   
 #endif
 }
 
-void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB,int abstraction_flag) {
+void common_signal_procedures (int subframe,int thread_id,PHY_VARS_eNB *eNB,int abstraction_flag) {
 
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
-  int **txdataF = eNB->lte_eNB_common_vars.txdataF[0];
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
+  int **txdataF = eNB->common_vars.txdataF[0];
   uint8_t *pbch_pdu=&eNB->pbch_pdu[0];
+  eNB_proc_t *proc = &eNB->proc[thread_id];
 
   // generate Cell-Specific Reference Signals for both slots
   if (abstraction_flag==0) {
@@ -683,7 +557,7 @@ void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB
     }
     
     // generate PBCH (Physical Broadcast CHannel) info
-    if ((eNB->proc[sched_subframe].frame_tx&3) == 0) {
+    if ((proc->frame_tx&3) == 0) {
       pbch_pdu[2] = 0;
       
       // FIXME setting pbch_pdu[2] to zero makes the switch statement easier: remove all the or-operators
@@ -743,8 +617,8 @@ void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB
 	break;
       }
       
-      pbch_pdu[2] = (pbch_pdu[2]&0xfc) | ((eNB->proc[sched_subframe].frame_tx>>8)&0x3);
-      pbch_pdu[1] = eNB->proc[sched_subframe].frame_tx&0xfc;
+      pbch_pdu[2] = (pbch_pdu[2]&0xfc) | ((proc->frame_tx>>8)&0x3);
+      pbch_pdu[1] = proc->frame_tx&0xfc;
       pbch_pdu[0] = 0;
     }
       
@@ -761,12 +635,12 @@ void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB
 
     /// generate PBCH
     if (abstraction_flag==0) {
-      generate_pbch(&eNB->lte_eNB_pbch,
+      generate_pbch(&eNB->pbch,
                     txdataF,
                     AMP,
                     fp,
                     pbch_pdu,
-                    eNB->proc[sched_subframe].frame_tx&3);
+                    proc->frame_tx&3);
     }
 #ifdef PHY_ABSTRACTION
     else {
@@ -791,12 +665,12 @@ void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB
 	   (abstraction_flag==0)) {
         generate_pss(txdataF,
                      AMP,
-                     &eNB->lte_frame_parms,
+                     &eNB->frame_parms,
                      (fp->Ncp==NORMAL) ? 6 : 5,
                      10);
         generate_sss(txdataF,
                      AMP,
-                     &eNB->lte_frame_parms,
+                     &eNB->frame_parms,
                      (fp->Ncp==NORMAL) ? 5 : 4,
                      10);
 
@@ -826,9 +700,10 @@ void common_signal_procedures (int subframe,int sched_subframe,PHY_VARS_eNB *eNB
 
 }
 
-void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subframe,PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) {
+void generate_eNB_dlsch_params(const int frame,const int subframe,int thread_id,PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) {
 
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
 
   // if we have SI_RNTI, configure dlsch parameters and CCE index
   if (dci_alloc->rnti == SI_RNTI) {
@@ -838,25 +713,25 @@ void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subf
 				       &dci_alloc->dci_pdu[0],
 				       dci_alloc->rnti,
 				       dci_alloc->format,
-				       &eNB->dlsch_eNB_SI,
+				       &eNB->dlsch_SI,
 				       fp,
 				       eNB->pdsch_config_dedicated,
 				       SI_RNTI,
 				       0,
 				       P_RNTI,
-				       eNB->eNB_UE_stats[0].DL_pmi_single);
+				       eNB->UE_stats[0].DL_pmi_single);
     
     
-    eNB->dlsch_eNB_SI->nCCE[subframe] = dci_alloc->firstCCE;
+    eNB->dlsch_SI->nCCE[subframe] = dci_alloc->firstCCE;
     
-    LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI)  => %"PRIu8"\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,
-	  eNB->dlsch_eNB_SI->nCCE[subframe]);
+    LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI)  => %"PRIu8"\n",eNB->Mod_id,proc->frame_tx,subframe,
+	  eNB->dlsch_SI->nCCE[subframe]);
     
 #if defined(SMBV) 
     
     // configure SI DCI
-    if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-      LOG_D(PHY,"[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",eNB->proc[sched_subframe].frame_tx,subframe,i);
+    if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+      LOG_D(PHY,"[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",proc->frame_tx,subframe,i);
       smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "SI", dci_alloc, i);
     }
     
@@ -871,24 +746,24 @@ void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subf
 				       &dci_alloc->dci_pdu[0],
 				       dci_alloc->rnti,
 				       dci_alloc->format,
-				       &eNB->dlsch_eNB_ra,
+				       &eNB->dlsch_ra,
 				       fp,
 				       eNB->pdsch_config_dedicated,
 				       SI_RNTI,
 				       dci_alloc->rnti,
 				       P_RNTI,
-				       eNB->eNB_UE_stats[0].DL_pmi_single);
+				       eNB->UE_stats[0].DL_pmi_single);
     
     
-    eNB->dlsch_eNB_ra->nCCE[subframe] = dci_alloc->firstCCE;
+    eNB->dlsch_ra->nCCE[subframe] = dci_alloc->firstCCE;
     
-    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA)  => %"PRIu8"\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,
-	  eNB->dlsch_eNB_ra->nCCE[subframe]);
+    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA)  => %"PRIu8"\n",eNB->Mod_id,proc->frame_tx,subframe,
+	  eNB->dlsch_ra->nCCE[subframe]);
 #if defined(SMBV) 
     
     // configure RA DCI
-    if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-      LOG_D(PHY,"[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",eNB->proc[sched_subframe].frame_tx,subframe,i);
+    if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+      LOG_D(PHY,"[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",proc->frame_tx,subframe,i);
       smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "RA", dci_alloc, i);
     }
     
@@ -906,8 +781,8 @@ void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subf
     if (UE_id>=0) {
 #if defined(SMBV) 
       // Configure this user
-      if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	LOG_D(PHY,"[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %"PRIu16" in TM%"PRIu8"\n",eNB->proc[sched_subframe].frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,
+      if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+	LOG_D(PHY,"[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %"PRIu16" in TM%"PRIu8"\n",proc->frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,
               dci_alloc->rnti,eNB->transmission_mode[(uint8_t)UE_id]);
 	smbv_configure_user(smbv_fname,UE_id+1,eNB->transmission_mode[(uint8_t)UE_id],dci_alloc->rnti);
       }
@@ -920,27 +795,27 @@ void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subf
 					 &dci_alloc->dci_pdu[0],
 					 dci_alloc->rnti,
 					 dci_alloc->format,
-					 eNB->dlsch_eNB[(uint8_t)UE_id],
+					 eNB->dlsch[(uint8_t)UE_id],
 					 fp,
 					 eNB->pdsch_config_dedicated,
 					 SI_RNTI,
 					 0,
 					 P_RNTI,
-					 eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single);
+					 eNB->UE_stats[(uint8_t)UE_id].DL_pmi_single);
       LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n",
-	    eNB->Mod_id,dci_alloc->rnti,eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,eNB->proc[sched_subframe].frame_tx,subframe);
+	    eNB->Mod_id,dci_alloc->rnti,eNB->dlsch[(uint8_t)UE_id][0]->current_harq_pid,proc->frame_tx,subframe);
       
       
-      eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = dci_alloc->firstCCE;
+      eNB->dlsch[(uint8_t)UE_id][0]->nCCE[subframe] = dci_alloc->firstCCE;
       
-      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16")  => %"PRIu8"/%u\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,
-	    dci_alloc->rnti,eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe]);
+      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16")  => %"PRIu8"/%u\n",eNB->Mod_id,proc->frame_tx,subframe,
+	    dci_alloc->rnti,eNB->dlsch[(uint8_t)UE_id][0]->nCCE[subframe]);
       
 #if defined(SMBV) 
       
       // configure UE-spec DCI
-      if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	LOG_D(PHY,"[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",eNB->proc[sched_subframe].frame_tx,subframe,i);
+      if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+	LOG_D(PHY,"[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",proc->frame_tx,subframe,i);
 	smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1,dci_alloc, i);
       }
       
@@ -948,31 +823,32 @@ void generate_eNB_dlsch_params(const int frame,const int subframe,int sched_subf
       
       LOG_D(PHY,"[eNB %"PRIu8"][DCI][PDSCH %"PRIx16"] Frame %d subframe %d UE_id %"PRId8" Generated DCI format %d, aggregation %d\n",
 	    eNB->Mod_id, dci_alloc->rnti,
-	    eNB->proc[sched_subframe].frame_tx, subframe,UE_id,
+	    proc->frame_tx, subframe,UE_id,
 	    dci_alloc->format,
 	    1<<dci_alloc->L);
     } else {
       LOG_D(PHY,"[eNB %"PRIu8"][PDSCH] Frame %d : No UE_id with corresponding rnti %"PRIx16", dropping DLSCH\n",
-	    eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,dci_alloc->rnti);
+	    eNB->Mod_id,proc->frame_tx,dci_alloc->rnti);
     }
   }
   
 }
 
-void generate_eNB_ulsch_params(const int frame,const int subframe,int sched_subframe,PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) {
+void generate_eNB_ulsch_params(const int frame,const int subframe,int thread_id,PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) {
 
   int harq_pid;
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
   
   LOG_D(PHY,
 	"[eNB %"PRIu8"][PUSCH %"PRIu8"] Frame %d subframe %d UL Frame %"PRIu32", UL Subframe %"PRIu8", Generated ULSCH (format0) DCI (rnti %"PRIx16", dci %"PRIx8"), aggregation %d\n",
 	eNB->Mod_id,
 	subframe2harq_pid(fp,
-			  pdcch_alloc2ul_frame(fp,eNB->proc[sched_subframe].frame_tx,subframe),
+			  pdcch_alloc2ul_frame(fp,proc->frame_tx,subframe),
 			  pdcch_alloc2ul_subframe(fp,subframe)),
-	eNB->proc[sched_subframe].frame_tx,
+	proc->frame_tx,
 	subframe,
-	pdcch_alloc2ul_frame(fp,eNB->proc[sched_subframe].frame_tx,subframe),
+	pdcch_alloc2ul_frame(fp,proc->frame_tx,subframe),
 	pdcch_alloc2ul_subframe(fp,subframe),
 	dci_alloc->rnti,
 	dci_alloc->dci_pdu[0],
@@ -980,7 +856,7 @@ void generate_eNB_ulsch_params(const int frame,const int subframe,int sched_subf
   
   generate_eNB_ulsch_params_from_dci(&dci_alloc->dci_pdu[0],
 				     dci_alloc->rnti,
-				     sched_subframe,
+				     thread_id,
 				     format0,
 				     UE_id,
 				     eNB,
@@ -991,14 +867,14 @@ void generate_eNB_ulsch_params(const int frame,const int subframe,int sched_subf
 				     0);  // do_srs
   
   LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %"PRIx16") => %d\n",
-	eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,subframe,dci_alloc->rnti,
+	eNB->Mod_id,proc->frame_tx,subframe,dci_alloc->rnti,
 	dci_alloc->firstCCE);
   
 #if defined(SMBV) 
   
   // configure UE-spec DCI for UL Grant
-  if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-    LOG_D(PHY,"[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",eNB->proc[sched_subframe].frame_tx,subframe,i);
+  if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+    LOG_D(PHY,"[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",proc->frame_tx,subframe,i);
     smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
   }
   
@@ -1007,27 +883,28 @@ void generate_eNB_ulsch_params(const int frame,const int subframe,int sched_subf
   
   // get the hard_pid for this subframe 
   harq_pid = subframe2harq_pid(fp,
-			       pdcch_alloc2ul_frame(fp,eNB->proc[sched_subframe].frame_tx,subframe),
+			       pdcch_alloc2ul_frame(fp,proc->frame_tx,subframe),
 			       pdcch_alloc2ul_subframe(fp,subframe));
   
   if (harq_pid==255) { // should not happen, log an error and exit, this is a fatal error
-    LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx);
+    LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",eNB->Mod_id,proc->frame_tx);
     mac_xface->macphy_exit("FATAL\n"); 
   }
   
   if ((dci_alloc->rnti  >= CBA_RNTI) && (dci_alloc->rnti < P_RNTI))
-    eNB->ulsch_eNB[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag = 1;
+    eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag = 1;
   else
-    eNB->ulsch_eNB[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
+    eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
   
 }
 
-void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch1,LTE_eNB_UE_stats *ue_stats,int ra_flag,int subframe,int sched_subframe,int num_pdcch_symbols,int abstraction_flag) {
+void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch1,LTE_eNB_UE_stats *ue_stats,int ra_flag,int subframe,int thread_id,int num_pdcch_symbols,int abstraction_flag) {
 
+  eNB_proc_t *proc = &eNB->proc[thread_id];
   int harq_pid = dlsch->current_harq_pid;
   LTE_DL_eNB_HARQ_t *dlsch_harq=dlsch->harq_processes[harq_pid];
   int input_buffer_length = dlsch_harq->TBS/8;
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   uint8_t *DLSCH_pdu=NULL;
   uint8_t DLSCH_pdu_tmp[768*8];
   uint8_t DLSCH_pdu_rar[256];
@@ -1036,13 +913,13 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
   LOG_D(PHY,
 	"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")\n",
 	eNB->Mod_id, dlsch->rnti,harq_pid,
-	eNB->proc[sched_subframe].frame_tx, subframe, input_buffer_length,
+	proc->frame_tx, subframe, input_buffer_length,
 	get_G(fp,
 	      dlsch_harq->nb_rb,
 	      dlsch_harq->rb_alloc,
 	      get_Qm(dlsch_harq->mcs),
 	      dlsch_harq->Nl,
-	      num_pdcch_symbols,eNB->proc[sched_subframe].frame_tx,subframe),
+	      num_pdcch_symbols,proc->frame_tx,subframe),
 	dlsch_harq->nb_rb,
 	dlsch_harq->mcs,
 	pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
@@ -1054,14 +931,14 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
         MSC_PHY_ENB,MSC_PHY_UE,
         NULL,0,
         "%05u:%02u PDSCH/DLSCH input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")",
-        eNB->proc[sched_subframe].frame_tx, subframe,
+        proc->frame_tx, subframe,
         input_buffer_length,
         get_G(fp,
         		dlsch_harq->nb_rb,
         		dlsch_harq->rb_alloc,
         		get_Qm(dlsch_harq->mcs),
         		dlsch_harq->Nl,
-        		num_pdcch_symbols,eNB->proc[sched_subframe].frame_tx,subframe),
+        		num_pdcch_symbols,proc->frame_tx,subframe),
         dlsch_harq->nb_rb,
         dlsch_harq->mcs,
         pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
@@ -1080,14 +957,14 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
 	  if (ra_flag == 0) {
 	    DLSCH_pdu = mac_xface->get_dlsch_sdu(eNB->Mod_id,
 						 eNB->CC_id,
-						 eNB->proc[sched_subframe].frame_tx,
+						 proc->frame_tx,
 						 dlsch->rnti,
 						 0);
 	  }
 	  else {
 	    int16_t crnti = mac_xface->fill_rar(eNB->Mod_id,
 						eNB->CC_id,
-						eNB->proc[sched_subframe].frame_tx,
+						proc->frame_tx,
 						DLSCH_pdu_rar,
 						fp->N_RB_UL,
 						input_buffer_length);
@@ -1104,32 +981,32 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
 	      LOG_W(PHY,"[eNB] Max user count reached.\n");
 	      mac_xface->cancel_ra_proc(eNB->Mod_id,
 					eNB->CC_id,
-					eNB->proc[sched_subframe].frame_tx,
+					proc->frame_tx,
 					crnti);
 	    } else {
-	      eNB->eNB_UE_stats[(uint32_t)UE_id].mode = RA_RESPONSE;
+	      eNB->UE_stats[(uint32_t)UE_id].mode = RA_RESPONSE;
 	      // Initialize indicator for first SR (to be cleared after ConnectionSetup is acknowledged)
 	      eNB->first_sr[(uint32_t)UE_id] = 1;
 	      
 	      generate_eNB_ulsch_params_from_rar(DLSCH_pdu,
-						 eNB->proc[sched_subframe].frame_tx,
+						 proc->frame_tx,
 						 (subframe),
-						 eNB->ulsch_eNB[(uint32_t)UE_id],
+						 eNB->ulsch[(uint32_t)UE_id],
 						 fp);
 	      
-	      eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active = 1;
+	      eNB->ulsch[(uint32_t)UE_id]->Msg3_active = 1;
 	      
 	      get_Msg3_alloc(fp,
 			     subframe,
-			     eNB->proc[sched_subframe].frame_tx,
-			     &eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
-			     &eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
+			     proc->frame_tx,
+			     &eNB->ulsch[(uint32_t)UE_id]->Msg3_frame,
+			     &eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe);
 	      LOG_D(PHY,"[eNB][RAPROC] Frame %d subframe %d, Activated Msg3 demodulation for UE %"PRId8" in frame %"PRIu32", subframe %"PRIu8"\n",
-		    eNB->proc[sched_subframe].frame_tx,
+		    proc->frame_tx,
 		    subframe,
 		    UE_id,
-		    eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
-		    eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
+		    eNB->ulsch[(uint32_t)UE_id]->Msg3_frame,
+		    eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe);
 	    }
 	    if (ue_stats) ue_stats->total_TBS_MAC += dlsch_harq->TBS;
 	  }
@@ -1144,9 +1021,9 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
 #if defined(SMBV) 
 
         // Configures the data source of allocation (allocation is configured by DCI)
-        if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-          LOG_D(PHY,"[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %"PRIu8"\n",eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
-          smbv_configure_datalist_for_user(smbv_fname, find_ue(dlsch->rnti,eNB)+1, DLSCH_pdu, input_buffer_length);
+        if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+          LOG_D(PHY,"[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %"PRIu8"\n",proc->frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+	  //          smbv_configure_datalist_for_user(smbv_fname, find_ue(dlsch->rnti,eNB)+1, DLSCH_pdu, input_buffer_length);
         }
 
 #endif
@@ -1180,7 +1057,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
                        fp,
                        num_pdcch_symbols,
                        dlsch,
-                       eNB->proc[sched_subframe].frame_tx,subframe,
+                       proc->frame_tx,subframe,
                        &eNB->dlsch_rate_matching_stats,
                        &eNB->dlsch_turbo_encoding_stats,
                        &eNB->dlsch_interleaving_stats);
@@ -1195,14 +1072,14 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
                                dlsch_harq->rb_alloc,
                                get_Qm(dlsch_harq->mcs),
                                dlsch_harq->Nl,
-                               num_pdcch_symbols,eNB->proc[sched_subframe].frame_tx,subframe),
+                               num_pdcch_symbols,proc->frame_tx,subframe),
                          0,
                          subframe<<1);
         stop_meas(&eNB->dlsch_scrambling_stats);
         start_meas(&eNB->dlsch_modulation_stats);
 
 
-        dlsch_modulation(eNB->lte_eNB_common_vars.txdataF[0],
+        dlsch_modulation(eNB->common_vars.txdataF[0],
 			 AMP,
 			 subframe,
 			 fp,
@@ -1226,23 +1103,24 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t
       dlsch->active = 0;
 }
 
-void phy_procedures_eNB_TX(unsigned char sched_subframe,
+void phy_procedures_eNB_TX(unsigned char thread_id,
 			   PHY_VARS_eNB *eNB,
 			   uint8_t abstraction_flag,
                            relaying_type_t r_type,
 			   PHY_VARS_RN *rn)
 {
   UNUSED(rn);
-  uint16_t input_buffer_length;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  //  uint16_t input_buffer_length;
   uint32_t i,aa;
   uint8_t harq_pid;
   DCI_PDU *DCI_pdu;
   DCI_PDU DCI_pdu_tmp;
-  int8_t UE_id;
+  int8_t UE_id=0;
   uint8_t num_pdcch_symbols=0;
   uint8_t ul_subframe;
   uint32_t ul_frame;
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   DCI_ALLOC_t *dci_alloc=(DCI_ALLOC_t *)NULL;
 
 #if defined(SMBV) 
@@ -1250,8 +1128,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   // there is at least one allocation for PDCCH
   uint8_t smbv_alloc_cnt = 1;
 #endif
-  int frame = eNB->proc[sched_subframe].frame_tx;
-  int subframe = eNB->proc[sched_subframe].subframe_tx;
+  int frame = proc->frame_tx;
+  int subframe = proc->subframe_tx;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,1);
   start_meas(&eNB->phy_proc_tx);
@@ -1259,14 +1137,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     // If we've dropped the UE, go back to PRACH mode for this UE
 
-    if (eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
+    if (eNB->UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
       LOG_W(PHY,"[eNB %d, CC %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, triggering UL Failure\n",
-            eNB->Mod_id,eNB->CC_id,frame,subframe, i, eNB->eNB_UE_stats[i].ulsch_consecutive_errors);
-      eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
+            eNB->Mod_id,eNB->CC_id,frame,subframe, i, eNB->UE_stats[i].ulsch_consecutive_errors);
+      eNB->UE_stats[i].ulsch_consecutive_errors=0;
       mac_xface->UL_failure_indication(eNB->Mod_id,
 				       eNB->CC_id,
 				       frame,
-				       eNB->eNB_UE_stats[i].crnti,
+				       eNB->UE_stats[i].crnti,
 				       subframe);
 				       
     }
@@ -1279,30 +1157,30 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 // This is called only for the CC_id = 0 and triggers scheduling for all CC_id's
   if (eNB->mac_enabled==1) {
     if (eNB->CC_id == 0) {
-      mac_xface->eNB_dlsch_ulsch_scheduler(eNB->Mod_id,0,eNB->proc[sched_subframe].frame_tx,subframe);//,1);
+      mac_xface->eNB_dlsch_ulsch_scheduler(eNB->Mod_id,0,proc->frame_tx,subframe);//,1);
     }
   }
 
 // clear the transmit data array for the current subframe
   if (abstraction_flag==0) {
     for (aa=0; aa<fp->nb_antennas_tx_eNB; aa++) {      
-      memset(&eNB->lte_eNB_common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)],
+      memset(&eNB->common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)],
              0,fp->ofdm_symbol_size*(fp->symbols_per_tti)*sizeof(int32_t));
     }
   }
 
-  if (is_pmch_subframe(eNB->proc[sched_subframe].frame_tx,subframe,fp)) {
-    pmch_procedures(eNB,rn,subframe,sched_subframe,abstraction_flag,r_type);
+  if (is_pmch_subframe(proc->frame_tx,subframe,fp)) {
+    pmch_procedures(eNB,rn,subframe,thread_id,abstraction_flag,r_type);
   }
   else {
     // this is not a pmch subframe, so generate PSS/SSS/PBCH
-    common_signal_procedures(subframe,sched_subframe,eNB,abstraction_flag);
+    common_signal_procedures(subframe,thread_id,eNB,abstraction_flag);
   }
 
 #if defined(SMBV) 
 
   // PBCH takes one allocation
-  if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
+  if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
     if (subframe==0)
       smbv_alloc_cnt++;
   }
@@ -1314,21 +1192,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
     DCI_pdu = mac_xface->get_dci_sdu(eNB->Mod_id,
 				     eNB->CC_id,
-				     eNB->proc[sched_subframe].frame_tx,
+				     proc->frame_tx,
 				     subframe);
   }
   else {
     DCI_pdu = &DCI_pdu_tmp;
 #ifdef EMOS_CHANNEL
-    fill_dci_emos(DCI_pdu,sched_subframe,eNB);
+    fill_dci_emos(DCI_pdu,thread_id,eNB);
 #else
-    fill_dci(DCI_pdu,sched_subframe,eNB);
+    fill_dci(DCI_pdu,thread_id,eNB);
 #endif
   }
 
   // clear existing ulsch dci allocations before applying info from MAC  (this is table
   ul_subframe = pdcch_alloc2ul_subframe(fp,subframe);
-  ul_frame = pdcch_alloc2ul_frame(fp,eNB->proc[sched_subframe].frame_tx,subframe);
+  ul_frame = pdcch_alloc2ul_frame(fp,proc->frame_tx,subframe);
 
   if ((subframe_select(fp,ul_subframe)==SF_UL) ||
       (fp->frame_type == FDD)) {
@@ -1336,15 +1214,15 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 
     // clear DCI allocation maps for new subframe
     for (i=0; i<NUMBER_OF_UE_MAX; i++)
-      if (eNB->ulsch_eNB[i]) {
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc=0;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc=0;
+      if (eNB->ulsch[i]) {
+        eNB->ulsch[i]->harq_processes[harq_pid]->dci_alloc=0;
+        eNB->ulsch[i]->harq_processes[harq_pid]->rar_alloc=0;
       }
   }
 
   // clear previous allocation information for all UEs
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    eNB->dlsch_eNB[i][0]->subframe_tx[subframe] = 0;
+    eNB->dlsch[i][0]->subframe_tx[subframe] = 0;
   }
 
 
@@ -1354,8 +1232,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 
 #if defined(SMBV) 
   // Sets up PDCCH and DCI table
-  if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4) && ((DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci)>0)) {
-    LOG_D(PHY,"[SMBV] Frame %3d, SF %d PDCCH, number of DCIs %d\n",eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
+  if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4) && ((DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci)>0)) {
+    LOG_D(PHY,"[SMBV] Frame %3d, SF %d PDCCH, number of DCIs %d\n",proc->frame_tx,subframe,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
     dump_dci(fp,&DCI_pdu->dci_alloc[0]);
     smbv_configure_pdcch(smbv_fname,(smbv_frame_cnt*10) + (subframe),num_pdcch_symbols,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci);
   }
@@ -1380,7 +1258,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
     }
     else UE_id=0;
     
-    generate_eNB_dlsch_params(frame,subframe,sched_subframe,eNB,dci_alloc,UE_id);
+    generate_eNB_dlsch_params(frame,subframe,thread_id,eNB,dci_alloc,UE_id);
 
   }
 
@@ -1399,10 +1277,10 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 	UE_id = i;
       
       if (UE_id<0) { // should not happen, log an error and exit, this is a fatal error
-	LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx,dci_alloc->rnti);
+	LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",eNB->Mod_id,proc->frame_tx,dci_alloc->rnti);
 	mac_xface->macphy_exit("FATAL\n"); 
       }
-      generate_eNB_ulsch_params(frame,subframe,sched_subframe,eNB,dci_alloc,UE_id);
+      generate_eNB_ulsch_params(frame,subframe,thread_id,eNB,dci_alloc,UE_id);
     }
   }
 
@@ -1422,7 +1300,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   if (abstraction_flag == 0) {
 
     if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
-      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"PRIu8",ue_spec %"PRIu8")\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx, subframe,
+      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"PRIu8",ue_spec %"PRIu8")\n",eNB->Mod_id,proc->frame_tx, subframe,
             DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
 
     num_pdcch_symbols = generate_dci_top(DCI_pdu->Num_ue_spec_dci,
@@ -1431,14 +1309,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
                                          0,
                                          AMP,
                                          fp,
-                                         eNB->lte_eNB_common_vars.txdataF[0],
+                                         eNB->common_vars.txdataF[0],
                                          subframe);
 
   }
 
 #ifdef PHY_ABSTRACTION // FIXME this ifdef seems suspicious
   else {
-    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_to_emul\n",eNB->Mod_id,eNB->proc[sched_subframe].frame_tx, subframe);
+    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_to_emul\n",eNB->Mod_id,proc->frame_tx, subframe);
     num_pdcch_symbols = generate_dci_top_emul(eNB,DCI_pdu->Num_ue_spec_dci,DCI_pdu->Num_common_dci,DCI_pdu->dci_alloc,subframe);
   }
 
@@ -1448,15 +1326,15 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 
   // Check for SI activity
 
-  if (eNB->dlsch_eNB_SI->active == 1) {
+  if (eNB->dlsch_SI->active == 1) {
 
-    pdsch_procedures(eNB,eNB->dlsch_eNB_SI,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,0,subframe,sched_subframe,num_pdcch_symbols,abstraction_flag);
+    pdsch_procedures(eNB,eNB->dlsch_SI,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,0,subframe,thread_id,num_pdcch_symbols,abstraction_flag);
 
 #if defined(SMBV) 
 
     // Configures the data source of allocation (allocation is configured by DCI)
-    if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-      LOG_D(PHY,"[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %"PRIu8"\n",eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+    if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+      LOG_D(PHY,"[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %"PRIu8"\n",proc->frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
       smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), DLSCH_pdu, input_buffer_length);
     }
 
@@ -1464,49 +1342,49 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   }
 
   // Check for RA activity
-  if (eNB->dlsch_eNB_ra->active == 1) {
+  if (eNB->dlsch_ra->active == 1) {
 
 #if defined(SMBV) 
 
     // Configures the data source of allocation (allocation is configured by DCI)
-    if (smbv_is_config_frame(eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-      LOG_D(PHY,"[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %"PRIu8"\n",eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+    if (smbv_is_config_frame(proc->frame_tx) && (smbv_frame_cnt < 4)) {
+      LOG_D(PHY,"[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %"PRIu8"\n",proc->frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
       smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), dlsch_input_buffer, input_buffer_length);
     }
     
 #endif
     
     
-    LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA) with input size = %"PRIu16",Msg3 frame %"PRIu32", Msg3 subframe %"PRIu8"\n",
+    LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA),Msg3 frame %"PRIu32", Msg3 subframe %"PRIu8"\n",
 	  eNB->Mod_id,
-	  eNB->proc[sched_subframe].frame_tx, subframe,input_buffer_length,
-	  eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
-	  eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
+	  proc->frame_tx, subframe,
+	  eNB->ulsch[(uint32_t)UE_id]->Msg3_frame,
+	  eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe);
     
-    pdsch_procedures(eNB,eNB->dlsch_eNB_ra,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,1,subframe,sched_subframe,num_pdcch_symbols,abstraction_flag);
+    pdsch_procedures(eNB,eNB->dlsch_ra,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,1,subframe,thread_id,num_pdcch_symbols,abstraction_flag);
     
     
-    eNB->dlsch_eNB_ra->active = 0;
+    eNB->dlsch_ra->active = 0;
   }
   
   // Now scan UE specific DLSCH
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
   {
-    if ((eNB->dlsch_eNB[(uint8_t)UE_id][0])&&
-        (eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti>0)&&
-        (eNB->dlsch_eNB[(uint8_t)UE_id][0]->active == 1)) {
+    if ((eNB->dlsch[(uint8_t)UE_id][0])&&
+        (eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&&
+        (eNB->dlsch[(uint8_t)UE_id][0]->active == 1)) {
 
-      pdsch_procedures(eNB,eNB->dlsch_eNB[(uint8_t)UE_id][0],eNB->dlsch_eNB[(uint8_t)UE_id][1],&eNB->eNB_UE_stats[(uint32_t)UE_id],0,subframe,sched_subframe,num_pdcch_symbols,abstraction_flag);
+      pdsch_procedures(eNB,eNB->dlsch[(uint8_t)UE_id][0],eNB->dlsch[(uint8_t)UE_id][1],&eNB->UE_stats[(uint32_t)UE_id],0,subframe,thread_id,num_pdcch_symbols,abstraction_flag);
 
 
     }
 
-    else if ((eNB->dlsch_eNB[(uint8_t)UE_id][0])&&
-             (eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti>0)&&
-             (eNB->dlsch_eNB[(uint8_t)UE_id][0]->active == 0)) {
+    else if ((eNB->dlsch[(uint8_t)UE_id][0])&&
+             (eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&&
+             (eNB->dlsch[(uint8_t)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)
-      eNB->dlsch_eNB[(uint8_t)UE_id][0]->subframe_tx[subframe]=0;
+      eNB->dlsch[(uint8_t)UE_id][0]->subframe_tx[subframe]=0;
     }
   }
 
@@ -1517,7 +1395,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   if (is_phich_subframe(fp,subframe))
   {
     generate_phich_top(eNB,
-                       sched_subframe,
+                       thread_id,
                        AMP,
                        0,
                        abstraction_flag);
@@ -1534,13 +1412,13 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
   if (abstraction_flag==0)
   {
     start_meas(&eNB->ofdm_mod_stats);
-    do_OFDM_mod(eNB->lte_eNB_common_vars.txdataF[0],
-                eNB->lte_eNB_common_vars.txdata[0],
-                eNB->proc[sched_subframe].frame_tx,subframe<<1,
+    do_OFDM_mod(eNB->common_vars.txdataF[0],
+                eNB->common_vars.txdata[0],
+                proc->frame_tx,subframe<<1,
                 fp);
-    do_OFDM_mod(eNB->lte_eNB_common_vars.txdataF[0],
-                eNB->lte_eNB_common_vars.txdata[0],
-                eNB->proc[sched_subframe].frame_tx,1+(subframe<<1),
+    do_OFDM_mod(eNB->common_vars.txdataF[0],
+                eNB->common_vars.txdata[0],
+                proc->frame_tx,1+(subframe<<1),
                 fp);
     stop_meas(&eNB->ofdm_mod_stats);
   }
@@ -1553,30 +1431,30 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,
 
 }
 
-void process_Msg3(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t UE_id, uint8_t harq_pid)
+void process_Msg3(PHY_VARS_eNB *eNB,uint8_t thread_id,uint8_t UE_id, uint8_t harq_pid)
 {
   // this prepares the demodulation of the first PUSCH of a new user, containing Msg3
-
-  int subframe = eNB->proc[sched_subframe].subframe_rx;
-  int frame = eNB->proc[sched_subframe].frame_rx;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  int subframe = proc->subframe_rx;
+  int frame = proc->frame_rx;
 
   LOG_D(PHY,"[eNB %d][RAPROC] frame %d : subframe %d : process_Msg3 UE_id %d (active %d, subframe %d, frame %d)\n",
         eNB->Mod_id,
         frame,subframe,
-        UE_id,eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active,
-        eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe,
-        eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame);
-  eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_flag = 0;
+        UE_id,eNB->ulsch[(uint32_t)UE_id]->Msg3_active,
+        eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe,
+        eNB->ulsch[(uint32_t)UE_id]->Msg3_frame);
+  eNB->ulsch[(uint32_t)UE_id]->Msg3_flag = 0;
 
-  if ((eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active == 1) &&
-      (eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe == subframe) &&
-      (eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame == (uint32_t)frame))   {
+  if ((eNB->ulsch[(uint32_t)UE_id]->Msg3_active == 1) &&
+      (eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe == subframe) &&
+      (eNB->ulsch[(uint32_t)UE_id]->Msg3_frame == (uint32_t)frame))   {
 
     //    harq_pid = 0;
 
-    eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active = 0;
-    eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_flag = 1;
-    eNB->ulsch_eNB[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag=1;
+    eNB->ulsch[(uint32_t)UE_id]->Msg3_active = 0;
+    eNB->ulsch[(uint32_t)UE_id]->Msg3_flag = 1;
+    eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag=1;
     LOG_D(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Setting subframe_scheduling_flag (Msg3) for UE %d\n",
           eNB->Mod_id,
           frame,subframe,UE_id);
@@ -1590,7 +1468,7 @@ void process_Msg3(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t UE_id, uint8_
 // rate-adaptation based on the error statistics derived from the ACK/NAK process
 
 void process_HARQ_feedback(uint8_t UE_id,
-                           uint8_t sched_subframe,
+                           uint8_t thread_id,
                            PHY_VARS_eNB *eNB,
                            uint8_t pusch_flag,
                            uint8_t *pucch_payload,
@@ -1598,16 +1476,17 @@ void process_HARQ_feedback(uint8_t UE_id,
                            uint8_t SR_payload)
 {
 
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   uint8_t dl_harq_pid[8],dlsch_ACK[8],dl_subframe;
-  LTE_eNB_DLSCH_t *dlsch             =  eNB->dlsch_eNB[(uint32_t)UE_id][0];
-  LTE_eNB_UE_stats *ue_stats         =  &eNB->eNB_UE_stats[(uint32_t)UE_id];
+  LTE_eNB_DLSCH_t *dlsch             =  eNB->dlsch[(uint32_t)UE_id][0];
+  LTE_eNB_UE_stats *ue_stats         =  &eNB->UE_stats[(uint32_t)UE_id];
   LTE_DL_eNB_HARQ_t *dlsch_harq_proc;
   uint8_t subframe_m4,M,m;
   int mp;
   int all_ACKed=1,nb_alloc=0,nb_ACK=0;
-  int frame = eNB->proc[sched_subframe].frame_rx;
-  int subframe = eNB->proc[sched_subframe].subframe_rx;
+  int frame = proc->frame_rx;
+  int subframe = proc->subframe_rx;
   int harq_pid = subframe2harq_pid( fp,frame,subframe);
 
 
@@ -1618,7 +1497,7 @@ void process_HARQ_feedback(uint8_t UE_id,
     M=1;
 
     if (pusch_flag == 1) {
-      dlsch_ACK[0] = eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0];
+      dlsch_ACK[0] = eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0];
       if (dlsch->subframe_tx[subframe_m4]==1)
       LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d on PUSCH for subframe %d\n",eNB->Mod_id,
 	    frame,dlsch_ACK[0],subframe_m4);
@@ -1660,9 +1539,9 @@ void process_HARQ_feedback(uint8_t UE_id,
       //    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] = eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0];
+      dlsch_ACK[0] = eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0];
       dlsch_ACK[1] = (eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode == bundling)
-                     ?eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]:eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[1];
+                     ?eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]:eNB->ulsch[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[1];
     }
 
     else {  // PUCCH ACK/NAK
@@ -1814,10 +1693,10 @@ void process_HARQ_feedback(uint8_t UE_id,
             dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq;
 
             ue_stats->total_TBS = ue_stats->total_TBS +
-                                  eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
+                                  eNB->dlsch[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
             /*
               ue_stats->total_transmitted_bits = ue_stats->total_transmitted_bits +
-              eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
+              eNB->dlsch[(uint8_t)UE_id][0]->harq_processes[dl_harq_pid[m]]->TBS;
             */
           }
 
@@ -1862,24 +1741,25 @@ void process_HARQ_feedback(uint8_t UE_id,
 
 void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
                       uint8_t UE_id,
-                      uint8_t sched_subframe,
+                      uint8_t thread_id,
                       int16_t *n1_pucch0,
                       int16_t *n1_pucch1,
                       int16_t *n1_pucch2,
                       int16_t *n1_pucch3)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms=&eNB->lte_frame_parms;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms;
   uint8_t nCCE0,nCCE1;
   int sf;
-  int frame = eNB->proc[sched_subframe].frame_rx;
-  int subframe = eNB->proc[sched_subframe].subframe_rx;
+  int frame = proc->frame_rx;
+  int subframe = proc->subframe_rx;
 
   if (frame_parms->frame_type == FDD ) {
     sf = (subframe<4) ? (subframe+6) : (subframe-4);
 
-    if (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[sf]>0) {
-      *n1_pucch0 = frame_parms->pucch_config_common.n1PUCCH_AN + eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[sf];
+    if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[sf]>0) {
+      *n1_pucch0 = frame_parms->pucch_config_common.n1PUCCH_AN + eNB->dlsch[(uint32_t)UE_id][0]->nCCE[sf];
       *n1_pucch1 = -1;
     } else {
       *n1_pucch0 = -1;
@@ -1890,15 +1770,15 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
     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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[6]>0) {
-          nCCE1 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[6];
+        /*  if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[6]>0) {
+          nCCE1 = eNB->dlsch[(uint32_t)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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[5]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[5];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[5]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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;
@@ -1906,8 +1786,8 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
         *n1_pucch1 = -1;
       } else if (subframe == 3) { // ACK subframe 9
 
-        if (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[9]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[9];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[9]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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;
@@ -1917,8 +1797,8 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
       } else if (subframe == 7) { // ACK subframes 0 and 1
         //harq_ack[0].nCCE;
         //harq_ack[1].nCCE;
-        if (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[0]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[0];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[0]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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;
@@ -1926,8 +1806,8 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
         *n1_pucch1 = -1;
       } else if (subframe == 8) { // ACK subframes 4
         //harq_ack[4].nCCE;
-        if (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[4]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[4];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[4]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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;
@@ -1945,43 +1825,43 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
 
     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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[6]>0) {
-          nCCE1 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[6];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[6]>0) {
+          nCCE1 = eNB->dlsch[(uint32_t)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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[5]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[5];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[5]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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",
-              eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[7],eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[8]);
+              eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[7],eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[8]);
 
-        if (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[8]>0) {
-          nCCE1 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[8];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[8]>0) {
+          nCCE1 = eNB->dlsch[(uint32_t)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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[7]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[7];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[7]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[0]>0) {
-          nCCE1 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[0];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[0]>0) {
+          nCCE1 = eNB->dlsch[(uint32_t)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 (eNB->dlsch_eNB[(uint32_t)UE_id][0]->subframe_tx[9]>0) {
-          nCCE0 = eNB->dlsch_eNB[(uint32_t)UE_id][0]->nCCE[9];
+        if (eNB->dlsch[(uint32_t)UE_id][0]->subframe_tx[9]>0) {
+          nCCE0 = eNB->dlsch[(uint32_t)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;
@@ -2000,16 +1880,17 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB,
   }
 }
 
-void prach_procedures(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t abstraction_flag)
+void prach_procedures(PHY_VARS_eNB *eNB,uint8_t thread_id,uint8_t abstraction_flag)
 {
 
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   uint16_t preamble_energy_list[64],preamble_delay_list[64];
   uint16_t preamble_max,preamble_energy_max;
   uint16_t i;
   int8_t UE_id;
-  int subframe = eNB->proc[sched_subframe].subframe_rx;
-  int frame = eNB->proc[sched_subframe].frame_rx;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  int subframe = proc->subframe_rx;
+  int frame = proc->frame_rx;
   uint8_t CC_id = eNB->CC_id;
 
   memset(&preamble_energy_list[0],0,64*sizeof(uint16_t));
@@ -2017,7 +1898,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t abstracti
 
   if (abstraction_flag == 0) {
     LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",eNB->Mod_id, 
-          frame,subframe,dB_fixed(signal_energy(&eNB->lte_eNB_common_vars.rxdata[0][0][subframe*fp->samples_per_tti],512)) - eNB->rx_total_gain_eNB_dB);
+          frame,subframe,dB_fixed(signal_energy(&eNB->common_vars.rxdata[0][0][subframe*fp->samples_per_tti],512)) - eNB->rx_total_gain_dB);
 
 
     rx_prach(eNB,
@@ -2031,12 +1912,12 @@ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t abstracti
 
       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][CC_id],PHY_vars_UE_g[UE_id][CC_id]->generate_prach,
-            PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.prach_config_common.rootSequenceIndex,
+            PHY_vars_UE_g[UE_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex,
             fp->prach_config_common.rootSequenceIndex,
             PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex);
 
       if ((PHY_vars_UE_g[UE_id][CC_id]->generate_prach==1) &&
-          (PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.prach_config_common.rootSequenceIndex ==
+          (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.prach_config_common.rootSequenceIndex ==
            fp->prach_config_common.rootSequenceIndex) ) {
         preamble_energy_list[PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex] = 800;
         preamble_delay_list[PHY_vars_UE_g[UE_id][CC_id]->prach_PreambleIndex] = 5;
@@ -2067,9 +1948,9 @@ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t sched_subframe,uint8_t abstracti
     UE_id = find_next_ue_index(eNB);
  
     if (UE_id>=0) {
-      eNB->eNB_UE_stats[(uint32_t)UE_id].UE_timing_offset = preamble_delay_list[preamble_max]&0x1FFF; //limit to 13 (=11+2) bits
+      eNB->UE_stats[(uint32_t)UE_id].UE_timing_offset = preamble_delay_list[preamble_max]&0x1FFF; //limit to 13 (=11+2) bits
 
-      eNB->eNB_UE_stats[(uint32_t)UE_id].sector = 0;
+      eNB->UE_stats[(uint32_t)UE_id].sector = 0;
       LOG_D(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure (UE_id %d) with preamble %d, energy %d.%d dB, delay %d\n",
             eNB->Mod_id,
             eNB->CC_id,
@@ -2128,9 +2009,9 @@ void ulsch_decoding_procedures(unsigned char subframe, unsigned int i, PHY_VARS_
 }
 
 
-void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) {
+void pucch_procedures(const unsigned char thread_id,PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) {
 
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   uint8_t SR_payload = 0,*pucch_payload=NULL,pucch_payload0[2]= {0,0},pucch_payload1[2]= {0,0};
   int16_t n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3;
   uint8_t do_SR = 0;
@@ -2138,30 +2019,30 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
   int32_t metric0=0,metric1=0,metric0_SR=0;
   ANFBmode_t bundling_flag;
   PUCCH_FMT_t format;
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  const int subframe = proc->subframe_rx;
+  const int frame = proc->frame_rx;
 
-  const int subframe = eNB->proc[sched_subframe].subframe_rx;
-  const int frame = eNB->proc[sched_subframe].frame_rx;
-
-  if ((eNB->dlsch_eNB[UE_id][0]) &&
-      (eNB->dlsch_eNB[UE_id][0]->rnti>0) &&
-      (eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag==0)) { 
+  if ((eNB->dlsch[UE_id][0]) &&
+      (eNB->dlsch[UE_id][0]->rnti>0) &&
+      (eNB->ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag==0)) { 
 
       // check SR availability
-      do_SR = is_SR_subframe(eNB,UE_id,sched_subframe);
+      do_SR = is_SR_subframe(eNB,UE_id,thread_id);
       //      do_SR = 0;
 
       // Now ACK/NAK
       // First check subframe_tx flag for earlier subframes
       get_n1_pucch_eNB(eNB,
                        UE_id,
-                       sched_subframe,
+                       thread_id,
                        &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",
-            eNB->Mod_id,eNB->dlsch_eNB[UE_id][0]->rnti,
+            eNB->Mod_id,eNB->dlsch[UE_id][0]->rnti,
             frame,subframe,
             n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR);
 
@@ -2198,7 +2079,7 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
 	}
 
         if (do_SR == 1) {
-          eNB->eNB_UE_stats[UE_id].sr_total++;
+          eNB->UE_stats[UE_id].sr_total++;
 
           if (abstraction_flag == 0)
             metric0_SR = rx_pucch(eNB,
@@ -2218,35 +2099,35 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
 				       pucch_format1,
 				       0,
 				       &SR_payload,
-				       sched_subframe);
+				       thread_id);
             LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",eNB->Mod_id,
-                  eNB->ulsch_eNB[UE_id]->rnti,frame,subframe,SR_payload,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex);
+                  eNB->ulsch[UE_id]->rnti,frame,subframe,SR_payload,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex);
           }
 
 #endif
 
           if (SR_payload == 1) {
             LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id,
-                  eNB->ulsch_eNB[UE_id]->rnti,frame,subframe);
-            eNB->eNB_UE_stats[UE_id].sr_received++;
+                  eNB->ulsch[UE_id]->rnti,frame,subframe);
+            eNB->UE_stats[UE_id].sr_received++;
 
             if (eNB->first_sr[UE_id] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
               /* is this test necessary? */
-              if (eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->status != SCH_IDLE)
-                put_harq_pid_in_freelist(eNB->dlsch_eNB[UE_id][0], 0);
+              if (eNB->dlsch[UE_id][0]->harq_processes[0]->status != SCH_IDLE)
+                put_harq_pid_in_freelist(eNB->dlsch[UE_id][0], 0);
               eNB->first_sr[UE_id] = 0;
-              eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->round=0;
-              eNB->dlsch_eNB[UE_id][0]->harq_processes[0]->status=SCH_IDLE;
+              eNB->dlsch[UE_id][0]->harq_processes[0]->round=0;
+              eNB->dlsch[UE_id][0]->harq_processes[0]->status=SCH_IDLE;
               LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
                     eNB->Mod_id,
-                    eNB->ulsch_eNB[UE_id]->rnti,frame,subframe);
+                    eNB->ulsch[UE_id]->rnti,frame,subframe);
             }
 
 	    if (eNB->mac_enabled==1) {
 	      mac_xface->SR_indication(eNB->Mod_id,
 				       eNB->CC_id,
 				       frame,
-				       eNB->dlsch_eNB[UE_id][0]->rnti,subframe);
+				       eNB->dlsch[UE_id][0]->rnti,subframe);
 	    }
           }
         }// do_SR==1
@@ -2296,12 +2177,12 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
 #ifdef DEBUG_PHY_PROC
           LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n",
                 eNB->Mod_id,
-                eNB->dlsch_eNB[UE_id][0]->rnti,
+                eNB->dlsch[UE_id][0]->rnti,
                 frame,subframe,
                 pucch_payload0[0],metric0);
 #endif
 
-          process_HARQ_feedback(UE_id,sched_subframe,eNB,
+          process_HARQ_feedback(UE_id,thread_id,eNB,
                                 0,// pusch_flag
                                 pucch_payload0,
                                 2,
@@ -2326,7 +2207,7 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
           if (SR_payload==1) {
 #ifdef DEBUG_PHY_PROC
             LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR\n",eNB->Mod_id,
-                  eNB->dlsch_eNB[UE_id][0]->rnti,
+                  eNB->dlsch[UE_id][0]->rnti,
                   frame,subframe,
                   n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
 #endif
@@ -2353,7 +2234,7 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
           } else { //using n1_pucch0/n1_pucch1 resources
 #ifdef DEBUG_PHY_PROC
             LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d\n",eNB->Mod_id,
-                  eNB->dlsch_eNB[UE_id][0]->rnti,
+                  eNB->dlsch[UE_id][0]->rnti,
                   frame,subframe,
                   n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,format);
 #endif
@@ -2428,11 +2309,11 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
 
 #ifdef DEBUG_PHY_PROC
           LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)\n",eNB->Mod_id,
-                eNB->dlsch_eNB[UE_id][0]->rnti,
+                eNB->dlsch[UE_id][0]->rnti,
                 frame,subframe,
                 metric0,metric1,pucch_sel,pucch_payload[0],pucch_payload[1]);
 #endif
-          process_HARQ_feedback(UE_id,sched_subframe,eNB,
+          process_HARQ_feedback(UE_id,thread_id,eNB,
                                 0,// pusch_flag
                                 pucch_payload,
                                 pucch_sel,
@@ -2443,37 +2324,38 @@ void pucch_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int U
     }
 }
 
-void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) {
+void cba_procedures(const unsigned char thread_id,PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) {
 
+  eNB_proc_t *proc = &eNB->proc[thread_id];
   uint8_t access_mode;
   int num_active_cba_groups;
-  const int subframe = eNB->proc[sched_subframe].subframe_rx;
-  const int frame = eNB->proc[sched_subframe].frame_rx;
+  const int subframe = proc->subframe_rx;
+  const int frame = proc->frame_rx;
   uint16_t rnti=0;
   int ret=0;
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
 
-  num_active_cba_groups = eNB->ulsch_eNB[UE_id]->num_active_cba_groups;
+  num_active_cba_groups = eNB->ulsch[UE_id]->num_active_cba_groups;
   
-  if ((eNB->ulsch_eNB[UE_id]) &&
+  if ((eNB->ulsch[UE_id]) &&
       (num_active_cba_groups > 0) &&
-      (eNB->ulsch_eNB[UE_id]->cba_rnti[UE_id%num_active_cba_groups]>0) &&
-      (eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag==1)) {
+      (eNB->ulsch[UE_id]->cba_rnti[UE_id%num_active_cba_groups]>0) &&
+      (eNB->ulsch[UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag==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",
 	  eNB->Mod_id,harq_pid,
 	  frame,subframe,
-	  UE_id, (uint16_t)eNB->ulsch_eNB[UE_id]->cba_rnti[UE_id%num_active_cba_groups],mode_string[eNB->eNB_UE_stats[UE_id].mode]);
+	  UE_id, (uint16_t)eNB->ulsch[UE_id]->cba_rnti[UE_id%num_active_cba_groups],mode_string[eNB->UE_stats[UE_id].mode]);
 #endif
     
     if (abstraction_flag==0) {
       rx_ulsch(eNB,
-	       sched_subframe,
-	       eNB->eNB_UE_stats[UE_id].sector,  // this is the effective sector id
+	       thread_id,
+	       eNB->UE_stats[UE_id].sector,  // this is the effective sector id
 	       UE_id,
-	       eNB->ulsch_eNB,
+	       eNB->ulsch,
 	       0);
     }
     
@@ -2481,7 +2363,7 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_
     else {
       rx_ulsch_emul(eNB,
 		    subframe,
-		    eNB->eNB_UE_stats[UE_id].sector,  // this is the effective sector id
+		    eNB->UE_stats[UE_id].sector,  // this is the effective sector id
 		    UE_id);
     }
     
@@ -2490,76 +2372,76 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_
     if (abstraction_flag == 0) {
       ret = ulsch_decoding(eNB,
 			   UE_id,
-			   sched_subframe,
+			   thread_id,
 			   0, // control_only_flag
-			   eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->V_UL_DAI,
-			   eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb>20 ? 1 : 0);
+			   eNB->ulsch[UE_id]->harq_processes[harq_pid]->V_UL_DAI,
+			   eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb>20 ? 1 : 0);
     }
     
 #ifdef PHY_ABSTRACTION
     else {
       ret = ulsch_decoding_emul(eNB,
-				sched_subframe,
+				thread_id,
 				UE_id,
 				&rnti);
     }
     
 #endif
     
-    if (eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->cqi_crc_status == 1) {
+    if (eNB->ulsch[UE_id]->harq_processes[harq_pid]->cqi_crc_status == 1) {
 #ifdef DEBUG_PHY_PROC
       
-      print_CQI(eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->o,eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->uci_format,0,fp->N_RB_DL);
+      print_CQI(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o,eNB->ulsch[UE_id]->harq_processes[harq_pid]->uci_format,0,fp->N_RB_DL);
 #endif
       access_mode = UNKNOWN_ACCESS;
-      extract_CQI(eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->o,
-		  eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->uci_format,
-		  &eNB->eNB_UE_stats[UE_id],
+      extract_CQI(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o,
+		  eNB->ulsch[UE_id]->harq_processes[harq_pid]->uci_format,
+		  &eNB->UE_stats[UE_id],
 		  fp->N_RB_DL,
 		  &rnti, &access_mode);
-      eNB->eNB_UE_stats[UE_id].rank = eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->o_RI[0];
+      eNB->UE_stats[UE_id].rank = eNB->ulsch[UE_id]->harq_processes[harq_pid]->o_RI[0];
     }
     
-      eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=0;
-      eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->status= SCH_IDLE;
+      eNB->ulsch[UE_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=0;
+      eNB->ulsch[UE_id]->harq_processes[harq_pid]->status= SCH_IDLE;
       
       if ((num_active_cba_groups > 0) &&
           (UE_id + num_active_cba_groups < NUMBER_OF_UE_MAX) &&
-          (eNB->ulsch_eNB[UE_id+num_active_cba_groups]->cba_rnti[UE_id%num_active_cba_groups] > 0 ) &&
-          (eNB->ulsch_eNB[UE_id+num_active_cba_groups]->num_active_cba_groups> 0)) {
+          (eNB->ulsch[UE_id+num_active_cba_groups]->cba_rnti[UE_id%num_active_cba_groups] > 0 ) &&
+          (eNB->ulsch[UE_id+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",
               eNB->Mod_id,harq_pid,frame,subframe,UE_id,harq_pid,
-              UE_id+num_active_cba_groups, UE_id%eNB->ulsch_eNB[UE_id]->num_active_cba_groups);
+              UE_id+num_active_cba_groups, UE_id%eNB->ulsch[UE_id]->num_active_cba_groups);
 #endif
-        eNB->ulsch_eNB[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=1;
-        eNB->ulsch_eNB[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->status= CBA_ACTIVE;
-        eNB->ulsch_eNB[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->TBS=eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->TBS;
+        eNB->ulsch[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->subframe_cba_scheduling_flag=1;
+        eNB->ulsch[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->status= CBA_ACTIVE;
+        eNB->ulsch[UE_id+num_active_cba_groups]->harq_processes[harq_pid]->TBS=eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS;
       }
 
       if (ret == (1+MAX_TURBO_ITERATIONS)) {
-        eNB->eNB_UE_stats[UE_id].ulsch_round_errors[harq_pid][eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->round]++;
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_active = 1;
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK = 0;
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->round++;
+        eNB->UE_stats[UE_id].ulsch_round_errors[harq_pid][eNB->ulsch[UE_id]->harq_processes[harq_pid]->round]++;
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->phich_active = 1;
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK = 0;
+        eNB->ulsch[UE_id]->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",
               eNB->Mod_id,harq_pid,
               frame,subframe);
 
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_active = 1;
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->phich_ACK = 1;
-        eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->round = 0;
-        eNB->eNB_UE_stats[UE_id].ulsch_consecutive_errors = 0;
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->phich_active = 1;
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK = 1;
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->round = 0;
+        eNB->UE_stats[UE_id].ulsch_consecutive_errors = 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,subframe,
-              harq_pid,eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->TBS>>3);
+              harq_pid,eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS>>3);
 
-        for (j=0; j<eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->TBS>>3; j++)
-          LOG_T(PHY,"%x.",eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->b[j]);
+        for (j=0; j<eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS>>3; j++)
+          LOG_T(PHY,"%x.",eNB->ulsch[UE_id]->harq_processes[harq_pid]->b[j]);
 
         LOG_T(PHY,"\n");
 #endif
@@ -2568,17 +2450,17 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_
         if (access_mode > UNKNOWN_ACCESS) {
           LOG_D(PHY,"[eNB %d] Frame %d, Subframe %d : received ULSCH SDU from CBA transmission, UE (%d,%x), CBA (group %d, rnti %x)\n",
                 eNB->Mod_id, frame,subframe,
-                UE_id, eNB->ulsch_eNB[UE_id]->rnti,
-                UE_id % eNB->ulsch_eNB[UE_id]->num_active_cba_groups, eNB->ulsch_eNB[UE_id]->cba_rnti[UE_id%num_active_cba_groups]);
+                UE_id, eNB->ulsch[UE_id]->rnti,
+                UE_id % eNB->ulsch[UE_id]->num_active_cba_groups, eNB->ulsch[UE_id]->cba_rnti[UE_id%num_active_cba_groups]);
 
           // detect if there is a CBA collision
           if (eNB->cba_last_reception[UE_id%num_active_cba_groups] == 0 ) {
             mac_xface->rx_sdu(eNB->Mod_id,
                               eNB->CC_id,
                               frame,subframe,
-                              eNB->ulsch_eNB[UE_id]->rnti,
-                              eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->b,
-                              eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->TBS>>3,
+                              eNB->ulsch[UE_id]->rnti,
+                              eNB->ulsch[UE_id]->harq_processes[harq_pid]->b,
+                              eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS>>3,
                               harq_pid,
                               NULL);
 
@@ -2597,7 +2479,7 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_
             mac_xface->SR_indication(eNB->Mod_id,
                                      eNB->CC_id,
                                      frame,
-                                     eNB->dlsch_eNB[UE_id][0]->rnti,subframe);
+                                     eNB->dlsch[UE_id][0]->rnti,subframe);
           }
         } // UNKNOWN_ACCESS
       } // ULSCH CBA not in error
@@ -2605,22 +2487,173 @@ void cba_procedures(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,int UE_
 
 }
 
-void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,const uint8_t abstraction_flag,const relaying_type_t r_type)
+
+
+void phy_procedures_eNB_common_RX(const unsigned char thread_id,PHY_VARS_eNB *eNB,const uint8_t abstraction_flag) {
+
+  eNB_proc_t *proc = &eNB->proc[thread_id];
+  const int subframe = proc->subframe_rx;
+  const int frame = proc->frame_rx;
+  int i,l;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
+  void *rxp[fp->nb_antennas_rx]; 
+  unsigned int rxs;
+  
+  AssertFatal(thread_id < NUM_ENB_THREADS, "Bad thread_id %d", thread_id);
+
+  //  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_COMMON_RX,1);
+  start_meas(&eNB->phy_proc_rx);
+#ifdef DEBUG_PHY_PROC
+  LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_RX(%d)\n",eNB->Mod_id,frame, subframe);
+#endif
+
+  if (abstraction_flag==0) { // grab signal in chunks of 500 us (1 slot)
+    
+    for (i=0; i<fp->nb_antennas_rx; i++)
+      if ((eNB->node_function == NGFI_RRU_IF4) || 
+	  (eNB->node_function == eNodeB_3GPP)) { // acquisition from RF and front-end processing
+        rxp[i] = (void*)&eNB->common_vars.rxdata[i][subframe*fp->samples_per_tti];
+	rxs = openair0.trx_read_func(&openair0,
+				     &proc->timestamp_rx,
+				     rxp,
+				     fp->samples_per_tti>>1,
+				     fp->nb_antennas_rx);
+	proc->frame_rx    = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023;
+	proc->subframe_rx = (proc->timestamp_rx / fp->samples_per_tti)%10;
+	
+	if (frame > 20){ 
+	  if (rxs != fp->samples_per_tti>>1)
+	    exit_fun( "problem receiving samples" );
+	}
+	VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
+    
+	remove_7_5_kHz(eNB,subframe<<1);
+	for (l=0; l<fp->symbols_per_tti/2; l++)
+	  slot_fep_ul(fp,
+		      &eNB->common_vars,
+		      l,
+		      subframe<<1,
+		      0,
+		      0
+		      );
+    
+	if (eNB->node_function == NGFI_RRU_IF4) {
+	  //send_IF4(eNB,subframe<<1);
+	}
+
+	remove_7_5_kHz(eNB,(subframe<<1)+1);
+	for (l=0; l<fp->symbols_per_tti/2; l++)
+	  slot_fep_ul(fp,
+		      &eNB->common_vars,
+		      l,
+		      (subframe<<1)+1,
+		      0,
+		      0
+		      );
+	if (eNB->node_function == NGFI_RRU_IF4) {
+	  //send_IF4(eNB,(subframe<<1)+1);
+	}
+
+      }
+      else if (eNB->node_function == NGFI_RCC_IF4) { // => acquisition from RRU (IF4)
+	// get frame/subframe information from IF4 interface
+
+	//recv_IF4(eNB,subframe<<1);
+	//recv_IF4(eNB,1+(subframe<<1));
+	
+      }
+      else { // should not get here
+	AssertFatal(1==0, "Unknown eNB->node_function %d",eNB->node_function);
+      }
+ 
+  
+    // check if we have to detect PRACH first
+    if (is_prach_subframe(fp,frame,subframe)>0) {
+      // wake up thread for PRACH RX
+      if (pthread_mutex_lock(&proc->mutex_prach) != 0) {
+	LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB PRACH thread %d (IC %d)\n", thread_id, proc->instance_cnt_prach );
+	exit_fun( "error locking mutex_prach" );
+	return;
+      }
+      
+      int cnt_prach = ++proc->instance_cnt_prach;
+
+      pthread_mutex_unlock( &proc->mutex_prach );
+      
+      if (cnt_prach == 0) {
+	// the thread was presumably waiting where it should and can now be woken up
+	if (pthread_cond_signal(&proc->cond_prach) != 0) {
+	  LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB PRACH thread %d\n", proc->thread_index);
+	  exit_fun( "ERROR pthread_cond_signal" );
+	  return;
+	}
+      } else {
+	LOG_W( PHY,"[eNB] Frame %d, eNB PRACH thread busy!!\n", proc->frame_tx);
+	exit_fun( "PRACH thread busy" );
+	return;
+      }
+
+
+    }
+    
+    // wake up TX thread
+    // lock the TX mutex and make sure the thread is ready
+    if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
+      LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)\n", thread_id, proc->instance_cnt_tx );
+      exit_fun( "error locking mutex_tx" );
+      return;
+    }
+    
+    int cnt_tx = ++proc->instance_cnt_tx;
+    // We have just received and processed the common part of an entire subframe, say n. 
+    // TX_rx is the last received timestamp (start of 2nd slot), TX_tx is the desired 
+    // transmitted timestamp of the next TX slot (first).
+    // The last (TS_rx mod samples_per_frame) was (n+.5)*samples_per_tti, 
+    // we want to generate subframe (n+3), so TS_tx = TX_rx+2.5*samples_per_tti,
+    // and proc->subframe_tx = proc->subframe_rx+3
+    proc->timestamp_tx = proc->timestamp_rx + (fp->samples_per_tti<<1) + (fp->samples_per_tti>>1);
+    proc->frame_tx    = (proc->subframe_rx > 6) ? (proc->frame_rx+1) : proc->frame_rx;
+    proc->subframe_rx = (proc->subframe_rx + 3)%10;
+
+    pthread_mutex_unlock( &proc->mutex_tx );
+
+    if (cnt_tx == 0){
+      // the thread was presumably waiting where it should and can now be woken up
+      if (pthread_cond_signal(&proc->cond_tx) != 0) {
+	LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB TX thread %d\n", thread_id);
+	exit_fun( "ERROR pthread_cond_signal" );
+	return;
+      }
+    } else {
+      LOG_W( PHY,"[eNB] Frame %d, eNB TX thread %d busy!! (cnt_tx %i)\n", proc->frame_tx, thread_id, cnt_tx );
+      exit_fun( "TX thread busy" );
+      return;
+    }
+    
+  }
+
+  else {  // grab transport channel information from network interface
+
+  }
+}
+
+void phy_procedures_eNB_uespec_RX(const unsigned char thread_id,PHY_VARS_eNB *eNB,const uint8_t abstraction_flag,const relaying_type_t r_type)
 {
-  //RX processing
+  //RX processing for ue-specific resources (i
   UNUSED(r_type);
+  eNB_proc_t *proc = &eNB->proc[thread_id];
   uint32_t l, ret=0,i,j,k;
   uint32_t harq_pid, harq_idx, round;
   uint8_t nPRS;
   int sync_pos;
   uint16_t rnti=0;
   uint8_t access_mode;
-  LTE_DL_FRAME_PARMS *fp=&eNB->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
 
-  const int subframe = eNB->proc[sched_subframe].subframe_rx;
-  const int frame = eNB->proc[sched_subframe].frame_rx;
+  const int subframe = proc->subframe_rx;
+  const int frame = proc->frame_rx;
 
-  AssertFatal(sched_subframe < NUM_ENB_THREADS, "Bad sched_subframe %d", sched_subframe);
+  AssertFatal(thread_id < NUM_ENB_THREADS, "Bad thread_id %d", thread_id);
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX,1);
   start_meas(&eNB->phy_proc_rx);
@@ -2634,17 +2667,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
   eNB->rb_mask_ul[2]=0;
   eNB->rb_mask_ul[3]=0;
 
-  if (abstraction_flag == 0) {
-    remove_7_5_kHz(eNB,subframe<<1);
-    remove_7_5_kHz(eNB,(subframe<<1)+1);
-  }
 
-  // check if we have to detect PRACH first
-  if (is_prach_subframe(fp,frame,subframe)>0) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,1);
-    prach_procedures(eNB,sched_subframe,abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
-  }
 
   if (abstraction_flag == 0) {
     start_meas(&eNB->ofdm_demod_stats);
@@ -2652,14 +2675,14 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
     for (l=0; l<fp->symbols_per_tti/2; l++) {
 
       slot_fep_ul(fp,
-                  &eNB->lte_eNB_common_vars,
+                  &eNB->common_vars,
                   l,
                   subframe<<1,
                   0,
                   0
                  );
       slot_fep_ul(fp,
-                  &eNB->lte_eNB_common_vars,
+                  &eNB->common_vars,
                   l,
                   (subframe<<1)+1,
                   0,
@@ -2682,15 +2705,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
   // Do PUCCH processing first
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    pucch_procedures(sched_subframe,eNB,i,harq_pid,abstraction_flag);
+    pucch_procedures(thread_id,eNB,i,harq_pid,abstraction_flag);
   }
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
 
     // check for Msg3
     if (eNB->mac_enabled==1) {
-      if (eNB->eNB_UE_stats[i].mode == RA_RESPONSE) {
-	process_Msg3(eNB,sched_subframe,i,harq_pid);
+      if (eNB->UE_stats[i].mode == RA_RESPONSE) {
+	process_Msg3(eNB,thread_id,i,harq_pid);
       }
     }
 
@@ -2699,30 +2722,30 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
     eNB->pusch_stats_round[i][(frame*10)+subframe] = 0;
     eNB->pusch_stats_mcs[i][(frame*10)+subframe] = -63;
 
-    if ((eNB->ulsch_eNB[i]) &&
-        (eNB->ulsch_eNB[i]->rnti>0) &&
-        (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag==1)) {
+    if ((eNB->ulsch[i]) &&
+        (eNB->ulsch[i]->rnti>0) &&
+        (eNB->ulsch[i]->harq_processes[harq_pid]->subframe_scheduling_flag==1)) {
       // UE is has ULSCH scheduling
-      round = eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round;
+      round = eNB->ulsch[i]->harq_processes[harq_pid]->round;
 
       for (int rb=0;
-           rb<=eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb;
+           rb<=eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb;
 	   rb++) {
-	int rb2 = rb+eNB->ulsch_eNB[i]->harq_processes[harq_pid]->first_rb;
+	int rb2 = rb+eNB->ulsch[i]->harq_processes[harq_pid]->first_rb;
 	eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
       }
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x (UE_id %d)\n",
             eNB->Mod_id,harq_pid,
-            frame,subframe,eNB->ulsch_eNB[i]->rnti,i);
+            frame,subframe,eNB->ulsch[i]->rnti,i);
 #endif
 
-      if (eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+      if (eNB->ulsch[i]->Msg3_flag == 1) {
         LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for Msg3 in Sector %d\n",
               eNB->Mod_id,
               frame,
               subframe,
-              eNB->eNB_UE_stats[i].sector);
+              eNB->UE_stats[i].sector);
 	VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_MSG3,1);
       } else {
         LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d Mode %s\n",
@@ -2730,52 +2753,52 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
               frame,
               subframe,
               i,
-              mode_string[eNB->eNB_UE_stats[i].mode]);
+              mode_string[eNB->UE_stats[i].mode]);
       }
 
 
       nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1];
 
-      eNB->ulsch_eNB[i]->cyclicShift = (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2 + fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
+      eNB->ulsch[i]->cyclicShift = (eNB->ulsch[i]->harq_processes[harq_pid]->n_DMRS2 + fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
           nPRS)%12;
 
       if (fp->frame_type == FDD ) {
         int sf = (subframe<4) ? (subframe+6) : (subframe-4);
 
-        if (eNB->dlsch_eNB[i][0]->subframe_tx[sf]>0) { // we have downlink transmission
-          eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 1;
+        if (eNB->dlsch[i][0]->subframe_tx[sf]>0) { // we have downlink transmission
+          eNB->ulsch[i]->harq_processes[harq_pid]->O_ACK = 1;
         } else {
-          eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK = 0;
+          eNB->ulsch[i]->harq_processes[harq_pid]->O_ACK = 0;
         }
       }
 
       LOG_D(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",
             eNB->Mod_id,harq_pid,frame,subframe,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->dci_alloc,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rar_alloc,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->first_rb,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->mcs,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->rvidx,
-            eNB->ulsch_eNB[i]->cyclicShift,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->n_DMRS2,
+            eNB->ulsch[i]->harq_processes[harq_pid]->dci_alloc,
+            eNB->ulsch[i]->harq_processes[harq_pid]->rar_alloc,
+            eNB->ulsch[i]->harq_processes[harq_pid]->round,
+            eNB->ulsch[i]->harq_processes[harq_pid]->first_rb,
+            eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb,
+            eNB->ulsch[i]->harq_processes[harq_pid]->mcs,
+            eNB->ulsch[i]->harq_processes[harq_pid]->TBS,
+            eNB->ulsch[i]->harq_processes[harq_pid]->rvidx,
+            eNB->ulsch[i]->cyclicShift,
+            eNB->ulsch[i]->harq_processes[harq_pid]->n_DMRS2,
             fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
             nPRS,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->O_ACK);
-      eNB->pusch_stats_rb[i][(frame*10)+subframe] = eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb;
-      eNB->pusch_stats_round[i][(frame*10)+subframe] = eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round;
-      eNB->pusch_stats_mcs[i][(frame*10)+subframe] = eNB->ulsch_eNB[i]->harq_processes[harq_pid]->mcs;
+            eNB->ulsch[i]->harq_processes[harq_pid]->O_ACK);
+      eNB->pusch_stats_rb[i][(frame*10)+subframe] = eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb;
+      eNB->pusch_stats_round[i][(frame*10)+subframe] = eNB->ulsch[i]->harq_processes[harq_pid]->round;
+      eNB->pusch_stats_mcs[i][(frame*10)+subframe] = eNB->ulsch[i]->harq_processes[harq_pid]->mcs;
       start_meas(&eNB->ulsch_demodulation_stats);
 
       if (abstraction_flag==0) {
         rx_ulsch(eNB,
-                 sched_subframe,
-                 eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                 thread_id,
+                 eNB->UE_stats[i].sector,  // this is the effective sector id
                  i,
-                 eNB->ulsch_eNB,
+                 eNB->ulsch,
                  0);
       }
 
@@ -2783,7 +2806,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
       else {
         rx_ulsch_emul(eNB,
                       subframe,
-                      eNB->eNB_UE_stats[i].sector,  // this is the effective sector id
+                      eNB->UE_stats[i].sector,  // this is the effective sector id
                       i);
       }
 
@@ -2796,16 +2819,16 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
       if (abstraction_flag == 0) {
         ret = ulsch_decoding(eNB,
                              i,
-                             sched_subframe,
+                             thread_id,
                              0, // control_only_flag
-                             eNB->ulsch_eNB[i]->harq_processes[harq_pid]->V_UL_DAI,
-			     eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb>20 ? 1 : 0);
+                             eNB->ulsch[i]->harq_processes[harq_pid]->V_UL_DAI,
+			     eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb>20 ? 1 : 0);
       }
 
 #ifdef PHY_ABSTRACTION
       else {
         ret = ulsch_decoding_emul(eNB,
-                                  sched_subframe,
+                                  thread_id,
                                   i,
                                   &rnti);
       }
@@ -2816,104 +2839,104 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
       LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
             eNB->Mod_id,harq_pid,
             frame,subframe,
-            eNB->ulsch_eNB[i]->rnti,
-            dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
-            dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
-            eNB->eNB_UE_stats[i].UL_rssi[0],
-            eNB->eNB_UE_stats[i].UL_rssi[1],
-            eNB->PHY_measurements_eNB->n0_power_dB[0],
-            eNB->PHY_measurements_eNB->n0_power_dB[1],
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1],
+            eNB->ulsch[i]->rnti,
+            dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]),
+            dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]),
+            eNB->UE_stats[i].UL_rssi[0],
+            eNB->UE_stats[i].UL_rssi[1],
+            eNB->measurements->n0_power_dB[0],
+            eNB->measurements->n0_power_dB[1],
+            eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
+            eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1],
             ret);
 
 
       //compute the expected ULSCH RX power (for the stats)
-      eNB->ulsch_eNB[(uint32_t)i]->harq_processes[harq_pid]->delta_TF =
+      eNB->ulsch[(uint32_t)i]->harq_processes[harq_pid]->delta_TF =
         get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
 
-      //dump_ulsch(eNB, sched_subframe, i);
+      //dump_ulsch(eNB, thread_id, i);
 
-      eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
+      eNB->UE_stats[i].ulsch_decoding_attempts[harq_pid][eNB->ulsch[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",
             eNB->Mod_id,harq_pid,frame,subframe,i,harq_pid);
 #endif
-      eNB->ulsch_eNB[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
+      eNB->ulsch[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
 
-      if (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status == 1) {
+      if (eNB->ulsch[i]->harq_processes[harq_pid]->cqi_crc_status == 1) {
 #ifdef DEBUG_PHY_PROC
-        //if (((eNB->proc[sched_subframe].frame_tx%10) == 0) || (eNB->proc[sched_subframe].frame_tx < 50))
-        print_CQI(eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,0,fp->N_RB_DL);
+        //if (((proc->frame_tx%10) == 0) || (proc->frame_tx < 50))
+        print_CQI(eNB->ulsch[i]->harq_processes[harq_pid]->o,eNB->ulsch[i]->harq_processes[harq_pid]->uci_format,0,fp->N_RB_DL);
 #endif
-        extract_CQI(eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,
-                    eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,
-                    &eNB->eNB_UE_stats[i],
+        extract_CQI(eNB->ulsch[i]->harq_processes[harq_pid]->o,
+                    eNB->ulsch[i]->harq_processes[harq_pid]->uci_format,
+                    &eNB->UE_stats[i],
                     fp->N_RB_DL,
                     &rnti, &access_mode);
-        eNB->eNB_UE_stats[i].rank = eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0];
+        eNB->UE_stats[i].rank = eNB->ulsch[i]->harq_processes[harq_pid]->o_RI[0];
 
       }
 
-      if (eNB->ulsch_eNB[i]->Msg3_flag == 1)
+      if (eNB->ulsch[i]->Msg3_flag == 1)
 	VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_MSG3,0);
 
       if (ret == (1+MAX_TURBO_ITERATIONS)) {
 
-        eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
+        eNB->UE_stats[i].ulsch_round_errors[harq_pid][eNB->ulsch[i]->harq_processes[harq_pid]->round]++;
+        eNB->ulsch[i]->harq_processes[harq_pid]->phich_active = 1;
+        eNB->ulsch[i]->harq_processes[harq_pid]->phich_ACK = 0;
+        eNB->ulsch[i]->harq_processes[harq_pid]->round++;
 
-        LOG_D(PHY,"[eNB][PUSCH %d] Increasing to round %d\n",harq_pid,eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round);
+        LOG_D(PHY,"[eNB][PUSCH %d] Increasing to round %d\n",harq_pid,eNB->ulsch[i]->harq_processes[harq_pid]->round);
 
-        if (eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+        if (eNB->ulsch[i]->Msg3_flag == 1) {
           LOG_D(PHY,"[eNB %d/%d][RAPROC] frame %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
                 eNB->Mod_id,
                 eNB->CC_id,
                 frame,subframe, i,
-                eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
+                eNB->ulsch[i]->harq_processes[harq_pid]->round-1,
                 fp->maxHARQ_Msg3Tx-1);
 
 	  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
 		eNB->Mod_id,harq_pid,
 		frame,subframe,
-		eNB->ulsch_eNB[i]->rnti,
-		dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
-		dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
-		eNB->eNB_UE_stats[i].UL_rssi[0],
-		eNB->eNB_UE_stats[i].UL_rssi[1],
-		eNB->PHY_measurements_eNB->n0_power_dB[0],
-		eNB->PHY_measurements_eNB->n0_power_dB[1],
-		eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
-		eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1],
+		eNB->ulsch[i]->rnti,
+		dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]),
+		dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]),
+		eNB->UE_stats[i].UL_rssi[0],
+		eNB->UE_stats[i].UL_rssi[1],
+		eNB->measurements->n0_power_dB[0],
+		eNB->measurements->n0_power_dB[1],
+		eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
+		eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1],
 		ret);
 
-          if (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round ==
+          if (eNB->ulsch[i]->harq_processes[harq_pid]->round ==
               fp->maxHARQ_Msg3Tx) {
             LOG_D(PHY,"[eNB %d][RAPROC] maxHARQ_Msg3Tx reached, abandoning RA procedure for UE %d\n",
                   eNB->Mod_id, i);
-            eNB->eNB_UE_stats[i].mode = PRACH;
+            eNB->UE_stats[i].mode = PRACH;
 	    if (eNB->mac_enabled==1) {
 	      mac_xface->cancel_ra_proc(eNB->Mod_id,
 					eNB->CC_id,
 					frame,
-					eNB->eNB_UE_stats[i].crnti);
+					eNB->UE_stats[i].crnti);
 	    }
-            mac_phy_remove_ue(eNB->Mod_id,eNB->eNB_UE_stats[i].crnti);
+            mac_phy_remove_ue(eNB->Mod_id,eNB->UE_stats[i].crnti);
 
-            eNB->ulsch_eNB[(uint32_t)i]->Msg3_active = 0;
-            //eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 0;
+            eNB->ulsch[(uint32_t)i]->Msg3_active = 0;
+            //eNB->ulsch[i]->harq_processes[harq_pid]->phich_active = 0;
 
           } else {
             // activate retransmission for Msg3 (signalled to UE PHY by PHICH (not MAC/DCI)
-            eNB->ulsch_eNB[(uint32_t)i]->Msg3_active = 1;
+            eNB->ulsch[(uint32_t)i]->Msg3_active = 1;
 
             get_Msg3_alloc_ret(fp,
                                subframe,
                                frame,
-                               &eNB->ulsch_eNB[i]->Msg3_frame,
-                               &eNB->ulsch_eNB[i]->Msg3_subframe);
+                               &eNB->ulsch[i]->Msg3_frame,
+                               &eNB->ulsch[i]->Msg3_subframe);
           }
           LOG_D(PHY,"[eNB] Frame %d, Subframe %d: Msg3 in error, i = %d \n", frame,subframe,i);
         } // This is Msg3 error
@@ -2922,10 +2945,10 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
           LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
                 eNB->Mod_id,harq_pid,
                 frame,subframe, i,
-                eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1,
-                eNB->ulsch_eNB[i]->Mlimit,
-                eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
-                eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1]);
+                eNB->ulsch[i]->harq_processes[harq_pid]->round-1,
+                eNB->ulsch[i]->Mlimit,
+                eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
+                eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1]);
 
 #if defined(MESSAGE_CHART_GENERATOR_PHY)
           MSC_LOG_RX_DISCARDED_MESSAGE(
@@ -2933,51 +2956,51 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
             NULL,0,
             "%05u:%02u ULSCH received rnti %x harq id %u round %d",
             frame,subframe,
-            eNB->ulsch_eNB[i]->rnti,harq_pid,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1
+            eNB->ulsch[i]->rnti,harq_pid,
+            eNB->ulsch[i]->harq_processes[harq_pid]->round-1
             );
 #endif
 
-          if (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round== eNB->ulsch_eNB[i]->Mlimit) {
+          if (eNB->ulsch[i]->harq_processes[harq_pid]->round== eNB->ulsch[i]->Mlimit) {
             LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d ULSCH Mlimit %d reached\n",
                   eNB->Mod_id,harq_pid,
                   frame,subframe, i,
-                  eNB->ulsch_eNB[i]->Mlimit);
+                  eNB->ulsch[i]->Mlimit);
 
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round=0;
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active=0;
-            eNB->eNB_UE_stats[i].ulsch_errors[harq_pid]++;
-            eNB->eNB_UE_stats[i].ulsch_consecutive_errors++;
+            eNB->ulsch[i]->harq_processes[harq_pid]->round=0;
+            eNB->ulsch[i]->harq_processes[harq_pid]->phich_active=0;
+            eNB->UE_stats[i].ulsch_errors[harq_pid]++;
+            eNB->UE_stats[i].ulsch_consecutive_errors++;
 
 	    // indicate error to MAC
 	    mac_xface->rx_sdu(eNB->Mod_id,
 			      eNB->CC_id,
 			      frame,subframe,
-			      eNB->ulsch_eNB[i]->rnti,
+			      eNB->ulsch[i]->rnti,
 			      NULL,
 			      0,
 			      harq_pid,
-			      &eNB->ulsch_eNB[i]->Msg3_flag);
+			      &eNB->ulsch[i]->Msg3_flag);
           }
         }
       }  // ulsch in error
       else {
-        if (eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+        if (eNB->ulsch[i]->Msg3_flag == 1) {
 	  LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
 		eNB->Mod_id,harq_pid,
 		frame,subframe);
 	  LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
 		eNB->Mod_id,harq_pid,
 		frame,subframe,
-		eNB->ulsch_eNB[i]->rnti,
-		dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
-		dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]),
-		eNB->eNB_UE_stats[i].UL_rssi[0],
-		eNB->eNB_UE_stats[i].UL_rssi[1],
-		eNB->PHY_measurements_eNB->n0_power_dB[0],
-		eNB->PHY_measurements_eNB->n0_power_dB[1],
-		eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
-		eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1],
+		eNB->ulsch[i]->rnti,
+		dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]),
+		dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]),
+		eNB->UE_stats[i].UL_rssi[0],
+		eNB->UE_stats[i].UL_rssi[1],
+		eNB->measurements->n0_power_dB[0],
+		eNB->measurements->n0_power_dB[1],
+		eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
+		eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1],
 		ret);
 	}
 #if defined(MESSAGE_CHART_GENERATOR_PHY)
@@ -2986,26 +3009,26 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
           NULL,0,
           "%05u:%02u ULSCH received rnti %x harq id %u",
           frame,subframe,
-          eNB->ulsch_eNB[i]->rnti,harq_pid
+          eNB->ulsch[i]->rnti,harq_pid
           );
 #endif
         for (j=0; j<fp->nb_antennas_rx; j++)
           //this is the RSSI per RB
-          eNB->eNB_UE_stats[i].UL_rssi[j] =
+          eNB->UE_stats[i].UL_rssi[j] =
 	    
-            dB_fixed(eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*
-                     (eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/
+            dB_fixed(eNB->pusch_vars[i]->ulsch_power[j]*
+                     (eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb*12)/
                      fp->ofdm_symbol_size) -
-            eNB->rx_total_gain_eNB_dB -
-            hundred_times_log10_NPRB[eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
+            eNB->rx_total_gain_dB -
+            hundred_times_log10_NPRB[eNB->ulsch[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
             get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0)/100;
 	    
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
-        eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
-        eNB->eNB_UE_stats[i].ulsch_consecutive_errors = 0;
+        eNB->ulsch[i]->harq_processes[harq_pid]->phich_active = 1;
+        eNB->ulsch[i]->harq_processes[harq_pid]->phich_ACK = 1;
+        eNB->ulsch[i]->harq_processes[harq_pid]->round = 0;
+        eNB->UE_stats[i].ulsch_consecutive_errors = 0;
 
-        if (eNB->ulsch_eNB[i]->Msg3_flag == 1) {
+        if (eNB->ulsch[i]->Msg3_flag == 1) {
 	  if (eNB->mac_enabled==1) {
 
 	    LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
@@ -3015,62 +3038,62 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
 	    mac_xface->rx_sdu(eNB->Mod_id,
 			      eNB->CC_id,
 			      frame,subframe,
-			      eNB->ulsch_eNB[i]->rnti,
-			      eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
-			      eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3,
+			      eNB->ulsch[i]->rnti,
+			      eNB->ulsch[i]->harq_processes[harq_pid]->b,
+			      eNB->ulsch[i]->harq_processes[harq_pid]->TBS>>3,
 			      harq_pid,
-			      &eNB->ulsch_eNB[i]->Msg3_flag);
+			      &eNB->ulsch[i]->Msg3_flag);
 	    
 	    // one-shot msg3 detection by MAC: empty PDU (e.g. CRNTI)
-	    if (eNB->ulsch_eNB[i]->Msg3_flag == 0 ) {
-	      eNB->eNB_UE_stats[i].mode = PRACH;
+	    if (eNB->ulsch[i]->Msg3_flag == 0 ) {
+	      eNB->UE_stats[i].mode = PRACH;
 	      mac_xface->cancel_ra_proc(eNB->Mod_id,
 					eNB->CC_id,
 					frame,
-					eNB->eNB_UE_stats[i].crnti);
-	      mac_phy_remove_ue(eNB->Mod_id,eNB->eNB_UE_stats[i].crnti);
-	      eNB->ulsch_eNB[(uint32_t)i]->Msg3_active = 0;
+					eNB->UE_stats[i].crnti);
+	      mac_phy_remove_ue(eNB->Mod_id,eNB->UE_stats[i].crnti);
+	      eNB->ulsch[(uint32_t)i]->Msg3_active = 0;
 	    } // Msg3_flag == 0
 	    
 	  } // mac_enabled==1
 
-          eNB->eNB_UE_stats[i].mode = PUSCH;
-          eNB->ulsch_eNB[i]->Msg3_flag = 0;
+          eNB->UE_stats[i].mode = PUSCH;
+          eNB->ulsch[i]->Msg3_flag = 0;
 
 	  LOG_D(PHY,"[eNB %d][RAPROC] Frame %d : RX Subframe %d Setting UE %d mode to PUSCH\n",eNB->Mod_id,frame,subframe,i);
 
           for (k=0; k<8; k++) { //harq_processes
-            for (j=0; j<eNB->dlsch_eNB[i][0]->Mlimit; j++) {
-              eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0;
-              eNB->eNB_UE_stats[i].dlsch_ACK[k][j]=0;
-              eNB->eNB_UE_stats[i].dlsch_trials[k][j]=0;
+            for (j=0; j<eNB->dlsch[i][0]->Mlimit; j++) {
+              eNB->UE_stats[i].dlsch_NAK[k][j]=0;
+              eNB->UE_stats[i].dlsch_ACK[k][j]=0;
+              eNB->UE_stats[i].dlsch_trials[k][j]=0;
             }
 
-            eNB->eNB_UE_stats[i].dlsch_l2_errors[k]=0;
-            eNB->eNB_UE_stats[i].ulsch_errors[k]=0;
-            eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
+            eNB->UE_stats[i].dlsch_l2_errors[k]=0;
+            eNB->UE_stats[i].ulsch_errors[k]=0;
+            eNB->UE_stats[i].ulsch_consecutive_errors=0;
 
-            for (j=0; j<eNB->ulsch_eNB[i]->Mlimit; j++) {
-              eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=0;
-              eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
-              eNB->eNB_UE_stats[i].ulsch_round_errors[k][j]=0;
-              eNB->eNB_UE_stats[i].ulsch_round_fer[k][j]=0;
+            for (j=0; j<eNB->ulsch[i]->Mlimit; j++) {
+              eNB->UE_stats[i].ulsch_decoding_attempts[k][j]=0;
+              eNB->UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
+              eNB->UE_stats[i].ulsch_round_errors[k][j]=0;
+              eNB->UE_stats[i].ulsch_round_fer[k][j]=0;
             }
           }
 
-          eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0;
-          eNB->eNB_UE_stats[i].dlsch_NAK_round0=0;
-          eNB->eNB_UE_stats[i].dlsch_mcs_offset=0;
+          eNB->UE_stats[i].dlsch_sliding_cnt=0;
+          eNB->UE_stats[i].dlsch_NAK_round0=0;
+          eNB->UE_stats[i].dlsch_mcs_offset=0;
         } // Msg3_flag==1
 	else {  // Msg3_flag == 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,subframe,
-                harq_pid,eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
+                harq_pid,eNB->ulsch[i]->harq_processes[harq_pid]->TBS>>3);
 
-          for (j=0; j<eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3; j++)
-            LOG_T(PHY,"%x.",eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b[j]);
+          for (j=0; j<eNB->ulsch[i]->harq_processes[harq_pid]->TBS>>3; j++)
+            LOG_T(PHY,"%x.",eNB->ulsch[i]->harq_processes[harq_pid]->b[j]);
 
           LOG_T(PHY,"\n");
 #endif
@@ -3081,9 +3104,9 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
 	    mac_xface->rx_sdu(eNB->Mod_id,
 			      eNB->CC_id,
 			      frame,subframe,
-			      eNB->ulsch_eNB[i]->rnti,
-			      eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
-			      eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3,
+			      eNB->ulsch[i]->rnti,
+			      eNB->ulsch[i]->harq_processes[harq_pid]->b,
+			      eNB->ulsch[i]->harq_processes[harq_pid]->TBS>>3,
 			      harq_pid,
 			      NULL);
 
@@ -3102,8 +3125,8 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
 
         // estimate timing advance for MAC
         if (abstraction_flag == 0) {
-          sync_pos = lte_est_timing_advance_pusch(eNB,i,sched_subframe);
-          eNB->eNB_UE_stats[i].timing_advance_update = sync_pos - fp->nb_prefix_samples/4; //to check
+          sync_pos = lte_est_timing_advance_pusch(eNB,i,thread_id);
+          eNB->UE_stats[i].timing_advance_update = sync_pos - fp->nb_prefix_samples/4; //to check
         }
 
 #ifdef DEBUG_PHY_PROC
@@ -3111,7 +3134,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
               eNB->Mod_id,
               frame, subframe,
               i,
-              eNB->eNB_UE_stats[i].timing_advance_update);
+              eNB->UE_stats[i].timing_advance_update);
 #endif
 
 
@@ -3120,12 +3143,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
       // 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",eNB->Mod_id,
-            eNB->dlsch_eNB[i][0]->rnti,
+            eNB->dlsch[i][0]->rnti,
             frame,subframe,
             i);
 #endif
       process_HARQ_feedback(i,
-                            sched_subframe,
+                            thread_id,
                             eNB,
                             1, // pusch_flag
                             0,
@@ -3135,15 +3158,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
 #ifdef DEBUG_PHY_PROC
       LOG_D(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",
             eNB->Mod_id,frame,subframe,
-            eNB->eNB_UE_stats[i].sector,
+            eNB->UE_stats[i].sector,
             harq_pid,
             i,
             ret,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status,
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0],
-            eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1],
-            eNB->eNB_UE_stats[i].ulsch_errors[harq_pid],
-            eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_pid][0]);
+            eNB->ulsch[i]->harq_processes[harq_pid]->cqi_crc_status,
+            eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
+            eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1],
+            eNB->UE_stats[i].ulsch_errors[harq_pid],
+            eNB->UE_stats[i].ulsch_decoding_attempts[harq_pid][0]);
 #endif
       
       // dump stats to VCD
@@ -3151,45 +3174,45 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *eNB,
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS0+harq_pid,eNB->pusch_stats_mcs[0][(frame*10)+subframe]);
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_RB0+harq_pid,eNB->pusch_stats_rb[0][(frame*10)+subframe]);
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND0+harq_pid,eNB->pusch_stats_round[0][(frame*10)+subframe]);
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI0+harq_pid,dB_fixed(eNB->lte_eNB_pusch_vars[0]->ulsch_power[0]));
+	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI0+harq_pid,dB_fixed(eNB->pusch_vars[0]->ulsch_power[0]));
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES0+harq_pid,ret);
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN0+harq_pid,(frame*10)+subframe);
       }
-    } // ulsch_eNB[0] && ulsch_eNB[0]->rnti>0 && ulsch_eNB[0]->subframe_scheduling_flag == 1
+    } // ulsch[0] && ulsch[0]->rnti>0 && ulsch[0]->subframe_scheduling_flag == 1
 
 
     // update ULSCH statistics for tracing
     if ((frame % 100 == 0) && (subframe == 4)) {
       for (harq_idx=0; harq_idx<8; harq_idx++) {
-        for (round=0; round<eNB->ulsch_eNB[i]->Mlimit; round++) {
-          if ((eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_idx][round] -
-               eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round]) != 0) {
-            eNB->eNB_UE_stats[i].ulsch_round_fer[harq_idx][round] =
-              (100*(eNB->eNB_UE_stats[i].ulsch_round_errors[harq_idx][round] -
-                    eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_idx][round]))/
-              (eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_idx][round] -
-               eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round]);
+        for (round=0; round<eNB->ulsch[i]->Mlimit; round++) {
+          if ((eNB->UE_stats[i].ulsch_decoding_attempts[harq_idx][round] -
+               eNB->UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round]) != 0) {
+            eNB->UE_stats[i].ulsch_round_fer[harq_idx][round] =
+              (100*(eNB->UE_stats[i].ulsch_round_errors[harq_idx][round] -
+                    eNB->UE_stats[i].ulsch_round_errors_last[harq_idx][round]))/
+              (eNB->UE_stats[i].ulsch_decoding_attempts[harq_idx][round] -
+               eNB->UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round]);
           } else {
-            eNB->eNB_UE_stats[i].ulsch_round_fer[harq_idx][round] = 0;
+            eNB->UE_stats[i].ulsch_round_fer[harq_idx][round] = 0;
           }
 
-          eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round] =
-            eNB->eNB_UE_stats[i].ulsch_decoding_attempts[harq_idx][round];
-          eNB->eNB_UE_stats[i].ulsch_round_errors_last[harq_idx][round] =
-            eNB->eNB_UE_stats[i].ulsch_round_errors[harq_idx][round];
+          eNB->UE_stats[i].ulsch_decoding_attempts_last[harq_idx][round] =
+            eNB->UE_stats[i].ulsch_decoding_attempts[harq_idx][round];
+          eNB->UE_stats[i].ulsch_round_errors_last[harq_idx][round] =
+            eNB->UE_stats[i].ulsch_round_errors[harq_idx][round];
         }
       }
     }
 
     if ((frame % 100 == 0) && (subframe==4)) {
-      eNB->eNB_UE_stats[i].dlsch_bitrate = (eNB->eNB_UE_stats[i].total_TBS -
-          eNB->eNB_UE_stats[i].total_TBS_last);
+      eNB->UE_stats[i].dlsch_bitrate = (eNB->UE_stats[i].total_TBS -
+          eNB->UE_stats[i].total_TBS_last);
 
-      eNB->eNB_UE_stats[i].total_TBS_last = eNB->eNB_UE_stats[i].total_TBS;
+      eNB->UE_stats[i].total_TBS_last = eNB->UE_stats[i].total_TBS;
     }
 
     // CBA (non-LTE)
-    cba_procedures(sched_subframe,eNB,i,harq_pid,abstraction_flag);
+    cba_procedures(thread_id,eNB,i,harq_pid,abstraction_flag);
   } // loop i=0 ... NUMBER_OF_UE_MAX-1
 
   if (abstraction_flag == 0) {
@@ -3250,6 +3273,7 @@ int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, r
   return do_proc;
 }
 #endif
+/*
 void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **eNB,uint8_t abstraction_flag,
                             relaying_type_t r_type, PHY_VARS_RN *rn)
 {
@@ -3264,10 +3288,7 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **eNB,uint8_t ab
 
   int CC_id=0;
 
-  /*
-    if (eNB->proc[sched_subframe].frame_tx >= 1000)
-    mac_xface->macphy_exit("Exiting after 1000 Frames\n");
-  */
+
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_ENB, eNB[0]->proc[subframe].frame_tx);
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,1);
   start_meas(&eNB[0]->phy_proc);
@@ -3284,122 +3305,11 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **eNB,uint8_t ab
       Mod_id = instance;
 
       switch (ITTI_MSG_ID(msg_p)) {
-#   if ENABLE_RAL
 
-      case TIMER_HAS_EXPIRED:
-        // check if it is a measurement timer
-      {
-        hashtable_rc_t       hashtable_rc;
-
-        hashtable_rc = hashtable_is_key_exists(PHY_vars_eNB_g[Mod_id][0]->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:
-#warning "TO DO LIST OF THRESHOLDS"
-        LOG_D(PHY, "[ENB %d] Received %s\n", Mod_id, msg_name);
-        {
-          ral_threshold_phy_t* threshold_phy_p  = NULL;
-          int                  index, res;
-          long                 timer_id;
-          hashtable_rc_t       hashtable_rc;
-
-          switch (PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.th_action) {
-
-          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][0]->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][0]->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][0]->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;
-#   endif
-
-        /* Messages from eNB app */
+        // Messages from eNB app
       case PHY_CONFIGURATION_REQ:
         LOG_I(PHY, "[eNB %d] Received %s\n", instance, msg_name);
-        /* TODO */
+        // TODO
 
         break;
 
@@ -3417,23 +3327,23 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **eNB,uint8_t ab
 
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-    if ((((eNB[CC_id]->lte_frame_parms.frame_type == TDD)&&
-          (subframe_select(&eNB[CC_id]->lte_frame_parms,eNB[CC_id]->proc[subframe].subframe_tx)==SF_DL))||
-         (eNB[CC_id]->lte_frame_parms.frame_type == FDD))) {
+    if ((((eNB[CC_id]->frame_parms.frame_type == TDD)&&
+          (subframe_select(&eNB[CC_id]->frame_parms,eNB[CC_id]->proc[0].subframe_tx)==SF_DL))||
+         (eNB[CC_id]->frame_parms.frame_type == FDD))) {
 #ifdef Rel10
 
-      if (phy_procedures_RN_eNB_TX(eNB[CC_id]->proc[subframe].subframe_rx, eNB[CC_id]->proc[subframe].subframe_tx, r_type) != 0 )
+      if (phy_procedures_RN_eNB_TX(eNB[CC_id]->proc[0].subframe_rx, eNB[CC_id]->proc[0].subframe_tx, r_type) != 0 )
 #endif
         phy_procedures_eNB_TX(subframe,eNB[CC_id],abstraction_flag,r_type,rn);
     }
 
-    if ((((eNB[CC_id]->lte_frame_parms.frame_type == TDD )&&
-          (subframe_select(&eNB[CC_id]->lte_frame_parms,eNB[CC_id]->proc[subframe].subframe_rx)==SF_UL)) ||
-         (eNB[CC_id]->lte_frame_parms.frame_type == FDD))) {
+    if ((((eNB[CC_id]->frame_parms.frame_type == TDD )&&
+          (subframe_select(&eNB[CC_id]->frame_parms,eNB[CC_id]->proc[0].subframe_rx)==SF_UL)) ||
+         (eNB[CC_id]->frame_parms.frame_type == FDD))) {
       phy_procedures_eNB_RX(subframe,eNB[CC_id],abstraction_flag,r_type);
     }
 
-    if (subframe_select(&eNB[CC_id]->lte_frame_parms,eNB[CC_id]->proc[subframe].subframe_tx)==SF_S) {
+    if (subframe_select(&eNB[CC_id]->frame_parms,eNB[CC_id]->proc[0].subframe_tx)==SF_S) {
 #ifdef Rel10
 
       if (phy_procedures_RN_eNB_TX(subframe, subframe, r_type) != 0 )
@@ -3441,21 +3351,21 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **eNB,uint8_t ab
         phy_procedures_eNB_TX(subframe,eNB[CC_id],abstraction_flag,r_type,rn);
     }
 
-    if ((subframe_select(&eNB[CC_id]->lte_frame_parms,eNB[CC_id]->proc[subframe].subframe_rx)==SF_S)) {
+    if ((subframe_select(&eNB[CC_id]->frame_parms,eNB[CC_id]->proc[0].subframe_rx)==SF_S)) {
       phy_procedures_eNB_S_RX(subframe,eNB[CC_id],abstraction_flag,r_type);
     }
 
-    eNB[CC_id]->proc[subframe].frame_tx++;
-    eNB[CC_id]->proc[subframe].frame_rx++;
+    eNB[CC_id]->proc[0].frame_tx++;
+    eNB[CC_id]->proc[0].frame_rx++;
 
-    if (eNB[CC_id]->proc[subframe].frame_tx>=MAX_FRAME_NUMBER) // defined in impl_defs_top.h
-      eNB[CC_id]->proc[subframe].frame_tx-=MAX_FRAME_NUMBER;
+    if (eNB[CC_id]->proc[0].frame_tx>=MAX_FRAME_NUMBER) // defined in impl_defs_top.h
+      eNB[CC_id]->proc[0].frame_tx-=MAX_FRAME_NUMBER;
 
-    if (eNB[CC_id]->proc[subframe].frame_rx>=MAX_FRAME_NUMBER)
-      eNB[CC_id]->proc[subframe].frame_rx-=MAX_FRAME_NUMBER;
+    if (eNB[CC_id]->proc[0].frame_rx>=MAX_FRAME_NUMBER)
+      eNB[CC_id]->proc[0].frame_rx-=MAX_FRAME_NUMBER;
   }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,0);
   stop_meas(&eNB[0]->phy_proc);
 }
-
+*/
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 084173248f1716d6a97b1614498496a7438fdaf0..c80fdd0e40b8dbe315c2fe2b0d161c34ea69fde8 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -117,73 +117,73 @@ extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
 
 
 
-void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid)
+void dump_dlsch(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid)
 {
   unsigned int coded_bits_per_codeword;
-  uint8_t nsymb = (phy_vars_ue->lte_frame_parms.Ncp == 0) ? 14 : 12;
-
-  coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
-                                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
-                                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm,
-                                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
-                                  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
-                                  phy_vars_ue->frame_rx,subframe);
-
-  write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1);
-  write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1);
-  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", phy_vars_ue->lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
+  uint8_t nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
+
+  coded_bits_per_codeword = get_G(&ue->frame_parms,
+                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm,
+                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
+                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->frame_rx,subframe);
+
+  write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
+  write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
   /*
-    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
-    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
-    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
-    write_output("dlsch_rho.m","dl_rho",lte_ue_pdsch_vars[0]->rho[0],300*12,1,1);
+    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+    write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
   */
-  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", phy_vars_ue->lte_ue_pdsch_vars[0]->rxdataF_comp0[0],300*12,1,1);
-  write_output("dlsch_rxF_llr.m","dlsch_llr", phy_vars_ue->lte_ue_pdsch_vars[0]->llr[0],coded_bits_per_codeword,1,0);
+  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[0]->rxdataF_comp0[0],300*12,1,1);
+  write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[0]->llr[0],coded_bits_per_codeword,1,0);
 
-  write_output("dlsch_mag1.m","dlschmag1",phy_vars_ue->lte_ue_pdsch_vars[0]->dl_ch_mag0,300*12,1,1);
-  write_output("dlsch_mag2.m","dlschmag2",phy_vars_ue->lte_ue_pdsch_vars[0]->dl_ch_magb0,300*12,1,1);
+  write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[0]->dl_ch_mag0,300*12,1,1);
+  write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[0]->dl_ch_magb0,300*12,1,1);
 }
 
-void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
+void dump_dlsch_SI(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe)
 {
   unsigned int coded_bits_per_codeword;
-  uint8_t nsymb = ((phy_vars_ue->lte_frame_parms.Ncp == 0) ? 14 : 12);
+  uint8_t nsymb = ((ue->frame_parms.Ncp == 0) ? 14 : 12);
 
-  coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
-                                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
-                                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
+  coded_bits_per_codeword = get_G(&ue->frame_parms,
+                                  ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+                                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
                                   2,
                                   1,
-                                  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
-                                  phy_vars_ue->frame_rx,subframe);
+                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->frame_rx,subframe);
   LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
-        phy_vars_ue->Mod_id,
-	phy_vars_ue->lte_frame_parms.ofdm_symbol_size,
+        ue->Mod_id,
+	ue->frame_parms.ofdm_symbol_size,
 	nsymb,
-        phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
-        phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
-        phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+        ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+        ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
+        ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+        ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
         coded_bits_per_codeword);
 
-  write_output("rxsig0.m","rxs0", &phy_vars_ue->lte_ue_common_vars.rxdata[0][subframe*phy_vars_ue->lte_frame_parms.samples_per_tti],phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+  write_output("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1);
 
-  write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1);
-  write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1);
-  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->dl_ch_estimates_ext[0],phy_vars_ue->lte_frame_parms.N_RB_DL*12*nsymb,1,1);
+  write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+  write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
   /*
-    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
-    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
-    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
-    write_output("dlsch_rho.m","dl_rho",lte_ue_pdsch_vars[0]->rho[0],300*12,1,1);
+    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+    write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
   */
-  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->rxdataF_comp0[0],phy_vars_ue->lte_frame_parms.N_RB_DL*12*nsymb,1,1);
-  write_output("dlsch_rxF_llr.m","dlsch_llr", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0);
+  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
+  write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0);
 
-  write_output("dlsch_mag1.m","dlschmag1",phy_vars_ue->lte_ue_pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1);
-  write_output("dlsch_mag2.m","dlschmag2",phy_vars_ue->lte_ue_pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1);
+  write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1);
+  write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1);
   exit(-1);
 }
 
@@ -251,40 +251,40 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
 
 #endif
 
-void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
+void dump_dlsch_ra(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe)
 {
   unsigned int coded_bits_per_codeword;
-  uint8_t nsymb = ((phy_vars_ue->lte_frame_parms.Ncp == 0) ? 14 : 12);
+  uint8_t nsymb = ((ue->frame_parms.Ncp == 0) ? 14 : 12);
 
-  coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
-                                  phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
-                                  phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even,
+  coded_bits_per_codeword = get_G(&ue->frame_parms,
+                                  ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+                                  ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even,
                                   2,
                                   1,
-                                  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
-                                  phy_vars_ue->frame_rx,subframe);
+                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->frame_rx,subframe);
   LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
-        phy_vars_ue->Mod_id,
-        phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
-        phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs,
-        phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+        ue->Mod_id,
+        ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+        ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs,
+        ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+        ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
         coded_bits_per_codeword);
 
-  write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*12*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1);
-  write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars_ra[0]->rxdataF_ext[0],2*12*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1);
-  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", phy_vars_ue->lte_ue_pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
+  write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1);
+  write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1);
+  write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
   /*
-    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
-    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
-    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",lte_ue_pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
-    write_output("dlsch_rho.m","dl_rho",lte_ue_pdsch_vars[0]->rho[0],300*12,1,1);
+    write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+    write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+    write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+    write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
   */
-  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", phy_vars_ue->lte_ue_pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1);
-  write_output("dlsch_rxF_llr.m","dlsch_llr", phy_vars_ue->lte_ue_pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0);
+  write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1);
+  write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0);
 
-  write_output("dlsch_mag1.m","dlschmag1",phy_vars_ue->lte_ue_pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1);
-  write_output("dlsch_mag2.m","dlschmag2",phy_vars_ue->lte_ue_pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1);
+  write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1);
+  write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1);
 }
 
 
@@ -295,31 +295,31 @@ void phy_reset_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
   // for more flexibility
 
   uint8_t i,j,k;
-  PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id];
+  PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
   //[NUMBER_OF_CONNECTED_eNB_MAX][2];
   for(i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
     for(j=0; j<2; j++) {
       //DL HARQ
-      if(phy_vars_ue->dlsch_ue[i][j]) {
-        for(k=0; k<NUMBER_OF_HARQ_PID_MAX && phy_vars_ue->dlsch_ue[i][j]->harq_processes[k]; k++) {
-          phy_vars_ue->dlsch_ue[i][j]->harq_processes[k]->status = SCH_IDLE;
+      if(ue->dlsch[i][j]) {
+        for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->dlsch[i][j]->harq_processes[k]; k++) {
+          ue->dlsch[i][j]->harq_processes[k]->status = SCH_IDLE;
         }
       }
     }
 
     //UL HARQ
-    if(phy_vars_ue->ulsch_ue[i]) {
-      for(k=0; k<NUMBER_OF_HARQ_PID_MAX && phy_vars_ue->ulsch_ue[i]->harq_processes[k]; k++) {
-        phy_vars_ue->ulsch_ue[i]->harq_processes[k]->status = SCH_IDLE;
+    if(ue->ulsch[i]) {
+      for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->ulsch[i]->harq_processes[k]; k++) {
+        ue->ulsch[i]->harq_processes[k]->status = SCH_IDLE;
         //Set NDIs for all UL HARQs to 0
-        //  phy_vars_ue->ulsch_ue[i]->harq_processes[k]->Ndi = 0;
+        //  ue->ulsch[i]->harq_processes[k]->Ndi = 0;
 
       }
     }
 
     // flush Msg3 buffer
-    phy_vars_ue->ulsch_ue_Msg3_active[i] = 0;
+    ue->ulsch_Msg3_active[i] = 0;
 
   }
 }
@@ -340,13 +340,13 @@ void ra_succeeded(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 
   LOG_I(PHY,"[UE %d][RAPROC] Frame %d Random-access procedure succeeded\n",Mod_id,PHY_vars_UE_g[Mod_id][CC_id]->frame_rx);
 
-  PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue_Msg3_active[eNB_index] = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->ulsch_Msg3_active[eNB_index] = 0;
   PHY_vars_UE_g[Mod_id][CC_id]->UE_mode[eNB_index] = PUSCH;
 
   for (i=0; i<8; i++) {
-    if (PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[eNB_index]->harq_processes[i]) {
-      PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[eNB_index]->harq_processes[i]->status=IDLE;
-      PHY_vars_UE_g[Mod_id][CC_id]->dlsch_ue[eNB_index][0]->harq_processes[i]->round=0;
+    if (PHY_vars_UE_g[Mod_id][CC_id]->ulsch[eNB_index]->harq_processes[i]) {
+      PHY_vars_UE_g[Mod_id][CC_id]->ulsch[eNB_index]->harq_processes[i]->status=IDLE;
+      PHY_vars_UE_g[Mod_id][CC_id]->dlsch[eNB_index][0]->harq_processes[i]->round=0;
     }
   }
 
@@ -359,7 +359,7 @@ UE_MODE_t get_ue_mode(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
   return(PHY_vars_UE_g[Mod_id][CC_id]->UE_mode[eNB_index]);
 
 }
-void process_timing_advance_rar(PHY_VARS_UE *phy_vars_ue,uint16_t timing_advance)
+void process_timing_advance_rar(PHY_VARS_UE *ue,uint16_t timing_advance)
 {
 
   /*
@@ -367,11 +367,11 @@ void process_timing_advance_rar(PHY_VARS_UE *phy_vars_ue,uint16_t timing_advance
     timing_advance = timing_advance - (1<<11);
   */
 
-  phy_vars_ue->timing_advance = timing_advance*4;
+  ue->timing_advance = timing_advance*4;
 
 
 #ifdef DEBUG_PHY_PROC
-  LOG_I(PHY,"[UE %d] Frame %d, received (rar) timing_advance %d, HW timing advance %d\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_rx, phy_vars_ue->timing_advance);
+  LOG_I(PHY,"[UE %d] Frame %d, received (rar) timing_advance %d, HW timing advance %d\n",ue->Mod_id,ue->frame_rx, ue->timing_advance);
 #endif
 
 }
@@ -392,41 +392,41 @@ void process_timing_advance(uint8_t Mod_id,uint8_t CC_id,int16_t timing_advance)
 
 }
 
-uint8_t is_SR_TXOp(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
+uint8_t is_SR_TXOp(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe)
 {
 
   LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Checking for SR TXOp (sr_ConfigIndex %d)\n",
-        phy_vars_ue->Mod_id,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,phy_vars_ue->frame_tx,subframe,
-        phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex);
+        ue->Mod_id,ue->pdcch_vars[eNB_id]->crnti,ue->frame_tx,subframe,
+        ue->scheduling_request_config[eNB_id].sr_ConfigIndex);
 
-  if (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 4) {        // 5 ms SR period
-    if ((subframe%5) == phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex)
+  if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 4) {        // 5 ms SR period
+    if ((subframe%5) == ue->scheduling_request_config[eNB_id].sr_ConfigIndex)
       return(1);
-  } else if (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 14) { // 10 ms SR period
-    if (subframe==(phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex-5))
+  } else if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 14) { // 10 ms SR period
+    if (subframe==(ue->scheduling_request_config[eNB_id].sr_ConfigIndex-5))
       return(1);
-  } else if (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 34) { // 20 ms SR period
-    if ((10*(phy_vars_ue->frame_tx&1)+subframe) == (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex-15))
+  } else if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 34) { // 20 ms SR period
+    if ((10*(ue->frame_tx&1)+subframe) == (ue->scheduling_request_config[eNB_id].sr_ConfigIndex-15))
       return(1);
-  } else if (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 74) { // 40 ms SR period
-    if ((10*(phy_vars_ue->frame_tx&3)+subframe) == (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex-35))
+  } else if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 74) { // 40 ms SR period
+    if ((10*(ue->frame_tx&3)+subframe) == (ue->scheduling_request_config[eNB_id].sr_ConfigIndex-35))
       return(1);
-  } else if (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 154) { // 80 ms SR period
-    if ((10*(phy_vars_ue->frame_tx&7)+subframe) == (phy_vars_ue->scheduling_request_config[eNB_id].sr_ConfigIndex-75))
+  } else if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 154) { // 80 ms SR period
+    if ((10*(ue->frame_tx&7)+subframe) == (ue->scheduling_request_config[eNB_id].sr_ConfigIndex-75))
       return(1);
   }
 
   return(0);
 }
 
-uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
+uint16_t get_n1_pucch(PHY_VARS_UE *ue,
                       uint8_t eNB_id,
                       uint8_t subframe,
                       uint8_t *b,
                       uint8_t SR)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   uint8_t nCCE0,nCCE1,harq_ack1,harq_ack0;
   ANFBmode_t bundling_flag;
   uint16_t n1_pucch0=0,n1_pucch1=0;
@@ -435,27 +435,27 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
   int M;
   // clear this, important for case where n1_pucch selection is not used
 
-  phy_vars_ue->pucch_sel[subframe] = 0;
+  ue->pucch_sel[subframe] = 0;
 
   if (frame_parms->frame_type == FDD ) { // FDD
     sf = (subframe<4)? subframe+6 : subframe-4;
-    LOG_D(PHY,"n1_pucch_UE: subframe %d, nCCE %d\n",sf,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[sf]);
+    LOG_D(PHY,"n1_pucch_UE: subframe %d, nCCE %d\n",sf,ue->pdcch_vars[eNB_id]->nCCE[sf]);
 
     if (SR == 0)
-      return(frame_parms->pucch_config_common.n1PUCCH_AN + phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[sf]);
+      return(frame_parms->pucch_config_common.n1PUCCH_AN + ue->pdcch_vars[eNB_id]->nCCE[sf]);
     else
-      return(phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+      return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
   } else {
 
-    bundling_flag = phy_vars_ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
+    bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
 #ifdef DEBUG_PHY_PROC
 
     if (bundling_flag==bundling) {
-      LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,SR,
-            phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+      LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,ue->frame_tx,subframe,SR,
+            ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
     } else {
-      LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,SR,
-            phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+      LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,ue->frame_tx,subframe,SR,
+            ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
     }
 
 #endif
@@ -479,29 +479,29 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
         subframe_offset = 4;
       } else {
         LOG_E(PHY,"[UE%d] : Frame %d phy_procedures_lte.c: get_n1pucch, illegal subframe %d for tdd_config %d\n",
-              phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,frame_parms->tdd_config);
+              ue->Mod_id,ue->frame_tx,subframe,frame_parms->tdd_config);
         return(0);
       }
 
 
       // i=0
-      nCCE0 = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[subframe_offset];
+      nCCE0 = ue->pdcch_vars[eNB_id]->nCCE[subframe_offset];
       n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
 
       // set ACK/NAK to values if not DTX
-      if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[subframe_offset].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
-        harq_ack0 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[subframe_offset].ack;
+      if (ue->dlsch[eNB_id][0]->harq_ack[subframe_offset].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
+        harq_ack0 = ue->dlsch[eNB_id][0]->harq_ack[subframe_offset].ack;
 
 
       if (harq_ack0!=2) {  // DTX
         if (SR == 0) {  // last paragraph pg 68 from 36.213 (v8.6), m=0
           b[0]=(M==2) ? 1-harq_ack0 : harq_ack0;
           b[1]=harq_ack0;   // in case we use pucch format 1b (subframes 2,7)
-          phy_vars_ue->pucch_sel[subframe] = 0;
+          ue->pucch_sel[subframe] = 0;
           return(n1_pucch0);
         } else { // SR and only 0 or 1 ACKs (first 2 entries in Table 7.3-1 of 36.213)
           b[0]=harq_ack0;
-          return(phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+          return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
         }
       }
 
@@ -517,18 +517,18 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
       // This is the offset for a particular subframe (2,3,4) => (0,2,4)
       subframe_offset = (subframe-2)<<1;
       // i=0
-      nCCE0 = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[5+subframe_offset];
+      nCCE0 = ue->pdcch_vars[eNB_id]->nCCE[5+subframe_offset];
       n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
       // i=1
-      nCCE1 = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[(6+subframe_offset)%10];
+      nCCE1 = ue->pdcch_vars[eNB_id]->nCCE[(6+subframe_offset)%10];
       n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
 
       // set ACK/NAK to values if not DTX
-      if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[(6+subframe_offset)%10].send_harq_status>0)  // n-6 // subframe 6 is to be ACK/NAKed
-        harq_ack1 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[(6+subframe_offset)%10].ack;
+      if (ue->dlsch[eNB_id][0]->harq_ack[(6+subframe_offset)%10].send_harq_status>0)  // n-6 // subframe 6 is to be ACK/NAKed
+        harq_ack1 = ue->dlsch[eNB_id][0]->harq_ack[(6+subframe_offset)%10].ack;
 
-      if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[5+subframe_offset].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
-        harq_ack0 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[5+subframe_offset].ack;
+      if (ue->dlsch[eNB_id][0]->harq_ack[5+subframe_offset].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
+        harq_ack0 = ue->dlsch[eNB_id][0]->harq_ack[5+subframe_offset].ack;
 
 
       if (harq_ack1!=2) { // n-6 // subframe 6,8,0 and maybe 5,7,9 is to be ACK/NAKed
@@ -541,7 +541,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
           if (harq_ack0!=2)
             b[0]=b[0]&harq_ack0;
 
-          phy_vars_ue->pucch_sel[subframe] = 1;
+          ue->pucch_sel[subframe] = 1;
           return(n1_pucch1);
 
         } else if ((bundling_flag==multiplexing)&&(SR==0)) { // Table 10.1
@@ -552,10 +552,10 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
           b[0] = (harq_ack0!=harq_ack1)?0:1;
 
           if ((harq_ack0 == 1) && (harq_ack1 == 0)) {
-            phy_vars_ue->pucch_sel[subframe] = 0;
+            ue->pucch_sel[subframe] = 0;
             return(n1_pucch0);
           } else {
-            phy_vars_ue->pucch_sel[subframe] = 1;
+            ue->pucch_sel[subframe] = 1;
             return(n1_pucch1);
           }
         } else if (SR==1) { // SR and 0,1,or 2 ACKS, (first 3 entries in Table 7.3-1 of 36.213)
@@ -565,22 +565,22 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
 
           b[0]= harq_ack1 | harq_ack0;
           b[1]= harq_ack1 ^ harq_ack0;
-          return(phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+          return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
         }
       } else if (harq_ack0!=2) { // n-7  // subframe 5,7,9 only is to be ACK/NAKed
         if ((bundling_flag==bundling)&&(SR == 0)) {  // last paragraph pg 68 from 36.213 (v8.6), m=0
           b[0]=harq_ack0;
-          phy_vars_ue->pucch_sel[subframe] = 0;
+          ue->pucch_sel[subframe] = 0;
           return(n1_pucch0);
         } else if ((bundling_flag==multiplexing)&&(SR==0)) { // Table 10.1 with i=1 set to DTX
           b[0] = harq_ack0;
           b[1] = 1-b[0];
-          phy_vars_ue->pucch_sel[subframe] = 0;
+          ue->pucch_sel[subframe] = 0;
           return(n1_pucch0);
         } else if (SR==1) { // SR and only 0 or 1 ACKs (first 2 entries in Table 7.3-1 of 36.213)
           b[0]=harq_ack0;
           b[1]=b[0];
-          return(phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+          return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
         }
       }
 
@@ -589,7 +589,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
     }  // switch tdd_config
   }
 
-  LOG_E(PHY,"[UE%d] : Frame %d phy_procedures_lte.c: get_n1pucch, exit without proper return\n",phy_vars_ue->frame_tx);
+  LOG_E(PHY,"[UE%d] : Frame %d phy_procedures_lte.c: get_n1pucch, exit without proper return\n",ue->frame_tx);
   return(-1);
 }
 
@@ -602,21 +602,21 @@ void phy_procedures_emos_UE_TX(uint8_t next_slot,uint8_t eNB_id) {
 
   if (next_slot%2==0) {
     // get harq_pid from subframe relationship
-    harq_pid = subframe2harq_pid(&phy_vars_ue->lte_frame_parms,phy_vars_ue->frame,(next_slot>>1));
+    harq_pid = subframe2harq_pid(&ue->frame_parms,ue->frame,(next_slot>>1));
     if (harq_pid==255) {
       LOG_E(PHY,"[UE%d] Frame %d : FATAL ERROR: illegal harq_pid, returning\n",
-    0,phy_vars_ue->frame);
+    0,ue->frame);
       return;
     }
 
-    if (ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
+    if (ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
       emos_dump_UE.uci_cnt[next_slot>>1] = 1;
-      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o,ulsch_ue[eNB_id]->o,MAX_CQI_BITS*sizeof(char));
-      emos_dump_UE.UCI_data[0][next_slot>>1].O = ulsch_ue[eNB_id]->O;
-      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o_RI,ulsch_ue[eNB_id]->o_RI,2*sizeof(char));
-      emos_dump_UE.UCI_data[0][next_slot>>1].O_RI = ulsch_ue[eNB_id]->O_RI;
-      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o_ACK,ulsch_ue[eNB_id]->o_ACK,4*sizeof(char));
-      emos_dump_UE.UCI_data[0][next_slot>>1].O_ACK = ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK;
+      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o,ulsch[eNB_id]->o,MAX_CQI_BITS*sizeof(char));
+      emos_dump_UE.UCI_data[0][next_slot>>1].O = ulsch[eNB_id]->O;
+      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o_RI,ulsch[eNB_id]->o_RI,2*sizeof(char));
+      emos_dump_UE.UCI_data[0][next_slot>>1].O_RI = ulsch[eNB_id]->O_RI;
+      memcpy(emos_dump_UE.UCI_data[0][next_slot>>1].o_ACK,ulsch[eNB_id]->o_ACK,4*sizeof(char));
+      emos_dump_UE.UCI_data[0][next_slot>>1].O_ACK = ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK;
     }
     else {
       emos_dump_UE.uci_cnt[next_slot>>1] = 0;
@@ -629,7 +629,7 @@ void phy_procedures_emos_UE_TX(uint8_t next_slot,uint8_t eNB_id) {
 int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
 PRACH_RESOURCES_t prach_resources_local;
 
-void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type)
+void phy_procedures_UE_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type)
 {
 
   int i;
@@ -645,7 +645,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
   uint8_t SR_payload;
   int32_t prach_power;
   uint8_t nsymb;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   uint8_t generate_ul_signal = 0;
   uint8_t ack_status=0;
   int8_t Po_PUCCH;
@@ -654,69 +654,69 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
   int overflow=0;
   int k,l;
 #endif
-  int slot_tx = phy_vars_ue->slot_tx;
-  int subframe_tx = phy_vars_ue->slot_tx>>1;
-  int frame_tx = phy_vars_ue->frame_tx;
-  int Mod_id = phy_vars_ue->Mod_id;
-  int CC_id = phy_vars_ue->CC_id;
+  int slot_tx = ue->slot_tx;
+  int subframe_tx = ue->slot_tx>>1;
+  int frame_tx = ue->frame_tx;
+  int Mod_id = ue->Mod_id;
+  int CC_id = ue->CC_id;
   int tx_amp;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX,VCD_FUNCTION_IN);
 
-  start_meas(&phy_vars_ue->phy_proc_tx);
+  start_meas(&ue->phy_proc_tx);
 
 #ifdef EMOS
   //phy_procedures_emos_UE_TX(next_slot);
 #endif
 
   if ((slot_tx%2)==0) {
-    phy_vars_ue->tx_power_dBm=-127;
+    ue->tx_power_dBm=-127;
 
     if (abstraction_flag==0) {
       for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
-        memset(&phy_vars_ue->lte_ue_common_vars.txdataF[aa][subframe_tx*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],
+        memset(&ue->common_vars.txdataF[aa][subframe_tx*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],
                0,
                frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t));
       }
     }
 
-    if (phy_vars_ue->UE_mode[eNB_id] != PRACH) {
+    if (ue->UE_mode[eNB_id] != PRACH) {
       /*
       #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Frame %d, slot %d: Generating SRS\n",Mod_id,phy_vars_ue->frame,slot_tx);
+        LOG_D(PHY,"[UE  %d] Frame %d, slot %d: Generating SRS\n",Mod_id,ue->frame,slot_tx);
       #endif
         if (abstraction_flag == 0) {
       #ifdef OFDMA_ULSCH
-      generate_srs_tx(phy_vars_ue,eNB_id,AMP,subframe_tx);
+      generate_srs_tx(ue,eNB_id,AMP,subframe_tx);
       #else
-      generate_srs_tx(phy_vars_ue,eNB_id,AMP,subframe_tx);
+      generate_srs_tx(ue,eNB_id,AMP,subframe_tx);
       #endif
         }
 
       #ifdef PHY_ABSTRACTION
         else {
-      generate_srs_tx_emul(phy_vars_ue,subframe_tx);
+      generate_srs_tx_emul(ue,subframe_tx);
         }
       #endif
       */
       // get harq_pid from subframe relationship
-      harq_pid = subframe2harq_pid(&phy_vars_ue->lte_frame_parms,
+      harq_pid = subframe2harq_pid(&ue->frame_parms,
                                    frame_tx,
                                    subframe_tx);
 
 
-      if (phy_vars_ue->mac_enabled == 1) {
-      if ((phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) &&
-          (phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id] == frame_tx) &&
-          (phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id] == subframe_tx)) { // Initial Transmission of Msg3
+      if (ue->mac_enabled == 1) {
+      if ((ue->ulsch_Msg3_active[eNB_id] == 1) &&
+          (ue->ulsch_Msg3_frame[eNB_id] == frame_tx) &&
+          (ue->ulsch_Msg3_subframe[eNB_id] == subframe_tx)) { // Initial Transmission of Msg3
 
-        phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
+        ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
 
-        if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round==0)
-          generate_ue_ulsch_params_from_rar(phy_vars_ue,
+        if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0)
+          generate_ue_ulsch_params_from_rar(ue,
                                             eNB_id);
 
-        phy_vars_ue->ulsch_ue[eNB_id]->power_offset = 14;
+        ue->ulsch[eNB_id]->power_offset = 14;
         LOG_D(PHY,"[UE  %d][RAPROC] Frame %d: Setting Msg3_flag in subframe %d, for harq_pid %d\n",
               Mod_id,
               frame_tx,
@@ -730,7 +730,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
                 Mod_id,frame_tx);
           mac_xface->macphy_exit("Error in ulsch_decoding");
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-          stop_meas(&phy_vars_ue->phy_proc_tx);
+          stop_meas(&ue->phy_proc_tx);
           return;
         }
 
@@ -738,20 +738,20 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
       }
       }
 
-      if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
+      if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
 
         generate_ul_signal = 1;
 
         // deactivate service request
-        phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
+        ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
 
-        ack_status = get_ack(&phy_vars_ue->lte_frame_parms,
-                             phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack,
+        ack_status = get_ack(&ue->frame_parms,
+                             ue->dlsch[eNB_id][0]->harq_ack,
                              subframe_tx,
-                             phy_vars_ue->ulsch_ue[eNB_id]->o_ACK);
+                             ue->ulsch[eNB_id]->o_ACK);
 
-        first_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb;
-        nb_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb;
+        first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb;
+        nb_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb;
 
 
         //frame_parms->pusch_config_c ommon.ul_ReferenceSignalsPUSCH.cyclicShift = 0;
@@ -765,26 +765,26 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
               "[UE  %d][PUSCH %d] Frame %d subframe %d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d\n",
               Mod_id,harq_pid,frame_tx,subframe_tx,
               first_rb,nb_rb,
-              phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round,
-              phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->mcs,
-              phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->rvidx,
+              ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
+              ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs,
+              ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
               (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift+
-               phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2+
+               ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2+
                frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[slot_tx])%12,
               frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
-              phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2,
+              ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2,
               frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[slot_tx],
-              phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[0],phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[1],
-              phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK);
+              ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
+              ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
 #endif
 
         if (ack_status > 0) {
           LOG_D(PHY,"[UE  %d][PDSCH %x] Frame %d subframe %d Generating ACK (%d,%d) for %d bits on PUSCH\n",
                 Mod_id,
-                phy_vars_ue->ulsch_ue[eNB_id]->rnti,
+                ue->ulsch[eNB_id]->rnti,
                 frame_tx,subframe_tx,
-                phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[0],phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[1],
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK);
+                ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
         }
 
 
@@ -792,50 +792,50 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
 
         //#ifdef DEBUG_PHY_PROC
-        //  debug_LOG_D(PHY,"[UE  %d] Frame %d, Subframe %d ulsch harq_pid %d : O %d, O_ACK %d, O_RI %d, TBS %d\n",Mod_id,phy_vars_ue->frame,subframe_tx,harq_pid,phy_vars_ue->ulsch_ue[eNB_id]->O,phy_vars_ue->ulsch_ue[eNB_id]->O_ACK,phy_vars_ue->ulsch_ue[eNB_id]->O_RI,phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS);
+        //  debug_LOG_D(PHY,"[UE  %d] Frame %d, Subframe %d ulsch harq_pid %d : O %d, O_ACK %d, O_RI %d, TBS %d\n",Mod_id,ue->frame,subframe_tx,harq_pid,ue->ulsch[eNB_id]->O,ue->ulsch[eNB_id]->O_ACK,ue->ulsch[eNB_id]->O_RI,ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS);
         //#endif
         if (Msg3_flag == 1) {
           LOG_I(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d next slot %d Generating (RRCConnectionRequest) Msg3 (nb_rb %d, first_rb %d, round %d, rvidx %d) Msg3: %x.%x.%x|%x.%x.%x.%x.%x.%x\n",Mod_id,frame_tx,
                 subframe_tx, slot_tx,
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb,
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb,
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round,
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->rvidx,
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[0],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[1],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[2],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[3],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[4],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[5],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[6],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[7],
-                phy_vars_ue->prach_resources[eNB_id]->Msg3[8]);
-
-          start_meas(&phy_vars_ue->ulsch_encoding_stats);
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb,
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb,
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
+                ue->prach_resources[eNB_id]->Msg3[0],
+                ue->prach_resources[eNB_id]->Msg3[1],
+                ue->prach_resources[eNB_id]->Msg3[2],
+                ue->prach_resources[eNB_id]->Msg3[3],
+                ue->prach_resources[eNB_id]->Msg3[4],
+                ue->prach_resources[eNB_id]->Msg3[5],
+                ue->prach_resources[eNB_id]->Msg3[6],
+                ue->prach_resources[eNB_id]->Msg3[7],
+                ue->prach_resources[eNB_id]->Msg3[8]);
+
+          start_meas(&ue->ulsch_encoding_stats);
 
           if (abstraction_flag==0) {
-            if (ulsch_encoding(phy_vars_ue->prach_resources[eNB_id]->Msg3,
-                               phy_vars_ue,
+            if (ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
+                               ue,
                                harq_pid,
                                eNB_id,
-                               phy_vars_ue->transmission_mode[eNB_id],0,0)!=0) {
+                               ue->transmission_mode[eNB_id],0,0)!=0) {
               LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
               mac_xface->macphy_exit("Error in ulsch_coding");
               VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-              stop_meas(&phy_vars_ue->phy_proc_tx);
+              stop_meas(&ue->phy_proc_tx);
               return;
             }
           }
 
 #ifdef PHY_ABSTRACTION
           else {
-            ulsch_encoding_emul(phy_vars_ue->prach_resources[eNB_id]->Msg3,phy_vars_ue,eNB_id,harq_pid,0);
+            ulsch_encoding_emul(ue->prach_resources[eNB_id]->Msg3,ue,eNB_id,harq_pid,0);
           }
 
 #endif
-          stop_meas(&phy_vars_ue->ulsch_encoding_stats);
+          stop_meas(&ue->ulsch_encoding_stats);
 
-	  if (phy_vars_ue->mac_enabled == 1) {
+	  if (ue->mac_enabled == 1) {
 	    // signal MAC that Msg3 was sent
 	    mac_xface->Msg3_transmitted(Mod_id,
 					CC_id,
@@ -843,12 +843,12 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 					eNB_id);
 	  }
         } else {
-          input_buffer_length = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS/8;
+          input_buffer_length = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS/8;
 
-	  if (phy_vars_ue->mac_enabled==1) {
+	  if (ue->mac_enabled==1) {
           //  LOG_D(PHY,"[UE  %d] ULSCH : Searching for MAC SDUs\n",Mod_id);
-          if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round==0) {
-            //if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
+          if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0) {
+            //if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
             access_mode=SCHEDULED_ACCESS;
             mac_xface->ue_get_sdu(Mod_id,
                                   CC_id,
@@ -864,7 +864,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
             else {
               // Get calibration information from TDD procedures
               LOG_D(PHY,"[UE %d] Frame %d, subframe %d : ULSCH: Getting TDD Auto-Calibration information\n",
-              Mod_id,phy_vars_ue->frame,subframe_tx);
+              Mod_id,ue->frame,subframe_tx);
               for (i=0;i<input_buffer_length;i++)
             ulsch_input_buffer[i]= i;
 
@@ -874,9 +874,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_ULSCH
-          LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d)  (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3);
+          LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d)  (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
 
-          for (i=0; i<phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++)
+          for (i=0; i<ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++)
             LOG_T(PHY,"%x.",ulsch_input_buffer[i]);
 
           LOG_T(PHY,"\n");
@@ -886,7 +886,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 	  else {
           // the following lines were necessary for the calibration in CROWN
           /*
-          if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
+          if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
               for (i=0;i<input_buffer_length;i++)
                   ulsch_input_buffer[i]= (uint8_t)(taus()&0xff);
           }
@@ -902,73 +902,73 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
           // the following lines were necessary for the collaborative UL in PUCCO
           /*
-          memset(phy_vars_ue->ulsch_ue[eNB_id]->o    ,0,MAX_CQI_BYTES*sizeof(uint8_t));
-          memset(phy_vars_ue->ulsch_ue[eNB_id]->o_RI ,0,2*sizeof(uint8_t));
-          memset(phy_vars_ue->ulsch_ue[eNB_id]->o_ACK,0,4*sizeof(uint8_t));
+          memset(ue->ulsch[eNB_id]->o    ,0,MAX_CQI_BYTES*sizeof(uint8_t));
+          memset(ue->ulsch[eNB_id]->o_RI ,0,2*sizeof(uint8_t));
+          memset(ue->ulsch[eNB_id]->o_ACK,0,4*sizeof(uint8_t));
           for (i=0;i<input_buffer_length;i++)
             ulsch_input_buffer[i]= i;
           */
 	}
 
-          start_meas(&phy_vars_ue->ulsch_encoding_stats);
+          start_meas(&ue->ulsch_encoding_stats);
 
           if (abstraction_flag==0) {
             /*
-            if (phy_vars_ue->frame%100==0) {
+            if (ue->frame%100==0) {
               LOG_I(PHY,"Encoding ulsch\n");
             }
             */
             if (ulsch_encoding(ulsch_input_buffer,
-                               phy_vars_ue,
+                               ue,
                                harq_pid,
                                eNB_id,
-                               phy_vars_ue->transmission_mode[eNB_id],0,
+                               ue->transmission_mode[eNB_id],0,
                                0)!=0) {  //  Nbundled, to be updated!!!!
               LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
               VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-              stop_meas(&phy_vars_ue->phy_proc_tx);
+              stop_meas(&ue->phy_proc_tx);
               return;
             }
           }
 
 #ifdef PHY_ABSTRACTION
           else {
-            ulsch_encoding_emul(ulsch_input_buffer,phy_vars_ue,eNB_id,harq_pid,0);
+            ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
           }
 
 #endif
-          stop_meas(&phy_vars_ue->ulsch_encoding_stats);
+          stop_meas(&ue->ulsch_encoding_stats);
         }
 
         if (abstraction_flag == 0) {
-	  if (phy_vars_ue->mac_enabled==1) {
-	    pusch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,1, abstraction_flag);
-	    phy_vars_ue->tx_power_dBm = phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH;
+	  if (ue->mac_enabled==1) {
+	    pusch_power_cntl(ue,subframe_tx,eNB_id,1, abstraction_flag);
+	    ue->tx_power_dBm = ue->ulsch[eNB_id]->Po_PUSCH;
 	  }
 	  else {
-	    phy_vars_ue->tx_power_dBm = phy_vars_ue->tx_power_max_dBm;
+	    ue->tx_power_dBm = ue->tx_power_max_dBm;
 	  }
-          phy_vars_ue->tx_total_RE = nb_rb*12;
+          ue->tx_total_RE = nb_rb*12;
 	  
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
-	  tx_amp = get_tx_amp(phy_vars_ue->tx_power_dBm,
-			      phy_vars_ue->tx_power_max_dBm,
-			      phy_vars_ue->lte_frame_parms.N_RB_UL,
+	  tx_amp = get_tx_amp(ue->tx_power_dBm,
+			      ue->tx_power_max_dBm,
+			      ue->frame_parms.N_RB_UL,
 			      nb_rb);
 #else
           tx_amp = AMP;
 #endif
 	  LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
-		Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm, tx_amp);
-          start_meas(&phy_vars_ue->ulsch_modulation_stats);
-          ulsch_modulation(phy_vars_ue->lte_ue_common_vars.txdataF,
+		Mod_id,harq_pid,frame_tx,subframe_tx,ue->tx_power_dBm,ue->tx_power_max_dBm, tx_amp);
+          start_meas(&ue->ulsch_modulation_stats);
+          ulsch_modulation(ue->common_vars.txdataF,
 			   tx_amp,
                            frame_tx,
                            subframe_tx,
-                           &phy_vars_ue->lte_frame_parms,
-                           phy_vars_ue->ulsch_ue[eNB_id]);
+                           &ue->frame_parms,
+                           ue->ulsch[eNB_id]);
           for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++)
-            generate_drs_pusch(phy_vars_ue,
+            generate_drs_pusch(ue,
 			       eNB_id,
 			       tx_amp,
 			       subframe_tx,
@@ -976,19 +976,19 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 			       nb_rb,
 			       aa);
 
-          stop_meas(&phy_vars_ue->ulsch_modulation_stats);
+          stop_meas(&ue->ulsch_modulation_stats);
         }
 
         if (abstraction_flag==1) {
           // clear SR
-          phy_vars_ue->sr[subframe_tx]=0;
+          ue->sr[subframe_tx]=0;
         }
       } // ULSCH is active
 
 #ifdef PUCCH
-      else if (phy_vars_ue->UE_mode[eNB_id] == PUSCH) { // check if we need to use PUCCH 1a/1b
+      else if (ue->UE_mode[eNB_id] == PUSCH) { // check if we need to use PUCCH 1a/1b
         //      debug_LOG_D(PHY,"[UE%d] Frame %d, subframe %d: Checking for PUCCH 1a/1b\n",Mod_id,frame_tx,subframe_tx);
-        bundling_flag = phy_vars_ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
+        bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
 
         if ((frame_parms->frame_type==FDD) ||
             (bundling_flag==bundling)    ||
@@ -1001,16 +1001,16 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
         }
 
         // Check for SR and do ACK/NACK accordingly
-        if (is_SR_TXOp(phy_vars_ue,eNB_id,subframe_tx)==1) {
+        if (is_SR_TXOp(ue,eNB_id,subframe_tx)==1) {
           LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d: got SR_TXOp, Checking for SR for PUSCH from MAC\n",
-                Mod_id,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,frame_tx,subframe_tx);
+                Mod_id,ue->pdcch_vars[eNB_id]->crnti,frame_tx,subframe_tx);
 
-	  if (phy_vars_ue->mac_enabled==1) {
+	  if (ue->mac_enabled==1) {
 	    SR_payload = mac_xface->ue_get_SR(Mod_id,
 					      CC_id,
 					      frame_tx,
 					      eNB_id,
-					      phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+					      ue->pdcch_vars[eNB_id]->crnti,
 					      subframe_tx); // subframe used for meas gap
 	  }
 	  else {
@@ -1020,40 +1020,40 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
           if (SR_payload>0) {
             generate_ul_signal = 1;
             LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d got the SR for PUSCH is %d\n",
-                  Mod_id,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,frame_tx,subframe_tx,SR_payload);
+                  Mod_id,ue->pdcch_vars[eNB_id]->crnti,frame_tx,subframe_tx,SR_payload);
           } else {
-            phy_vars_ue->sr[subframe_tx]=0;
+            ue->sr[subframe_tx]=0;
           }
         } else {
           SR_payload=0;
 	}
 
-        if (get_ack(&phy_vars_ue->lte_frame_parms,
-                    phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack,
+        if (get_ack(&ue->frame_parms,
+                    ue->dlsch[eNB_id][0]->harq_ack,
                     subframe_tx,pucch_ack_payload) > 0) {
           // we need to transmit ACK/NAK in this subframe
 
           generate_ul_signal = 1;
 
-          n1_pucch = get_n1_pucch(phy_vars_ue,
+          n1_pucch = get_n1_pucch(ue,
                                   eNB_id,
                                   subframe_tx,
                                   pucch_ack_payload,
                                   SR_payload);
 
-	  if (phy_vars_ue->mac_enabled == 1) {
-	    Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,format);
+	  if (ue->mac_enabled == 1) {
+	    Po_PUCCH = pucch_power_cntl(ue,subframe_tx,eNB_id,format);
 	  } 
 	  else {
-	    Po_PUCCH = phy_vars_ue->tx_power_max_dBm;
+	    Po_PUCCH = ue->tx_power_max_dBm;
 	  }
-	  phy_vars_ue->tx_power_dBm = Po_PUCCH;
-          phy_vars_ue->tx_total_RE = 12;
+	  ue->tx_power_dBm = Po_PUCCH;
+          ue->tx_total_RE = 12;
 
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
 	  tx_amp = get_tx_amp(Po_PUCCH,
-			      phy_vars_ue->tx_power_max_dBm,
-			      phy_vars_ue->lte_frame_parms.N_RB_UL,
+			      ue->tx_power_max_dBm,
+			      ue->frame_parms.N_RB_UL,
 			      1);
 #else
 	  tx_amp = AMP;
@@ -1062,16 +1062,16 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
           if (SR_payload>0) {
 	     LOG_D(PHY,"[UE  %d][SR %x] Frame %d subframe %d Generating PUCCH 1a/1b payload %d,%d (with SR for PUSCH), n1_pucch %d, Po_PUCCH, amp %d\n",
                   Mod_id,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                  ue->dlsch[eNB_id][0]->rnti,
                   frame_tx, subframe_tx,
 		  pucch_ack_payload[0],pucch_ack_payload[1],
-                  phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
+                  ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
 	          Po_PUCCH,
 		  tx_amp);
           } else {
             LOG_D(PHY,"[UE  %d][PDSCH %x] Frame %d subframe %d Generating PUCCH 1a/1b, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
                   Mod_id,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                  ue->dlsch[eNB_id][0]->rnti,
 	    frame_tx, subframe_tx,
 		  n1_pucch,pucch_ack_payload[0],pucch_ack_payload[1],SR_payload,
                   Po_PUCCH,
@@ -1080,11 +1080,11 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
           if (abstraction_flag == 0) {
 
-	  generate_pucch(phy_vars_ue->lte_ue_common_vars.txdataF,
-                           &phy_vars_ue->lte_frame_parms,
-                           phy_vars_ue->ncs_cell,
+	  generate_pucch(ue->common_vars.txdataF,
+                           &ue->frame_parms,
+                           ue->ncs_cell,
                            format,
-                           &phy_vars_ue->pucch_config_dedicated[eNB_id],
+                           &ue->pucch_config_dedicated[eNB_id],
                            n1_pucch,
                            0,  // n2_pucch
                            1,  // shortened format
@@ -1095,9 +1095,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
           } else {
 #ifdef PHY_ABSTRACTION
             LOG_D(PHY,"Calling generate_pucch_emul ... (ACK %d %d, SR %d)\n",pucch_ack_payload[0],pucch_ack_payload[1],SR_payload);
-            generate_pucch_emul(phy_vars_ue,
+            generate_pucch_emul(ue,
                                 format,
-                                phy_vars_ue->lte_frame_parms.pucch_config_common.nCS_AN,
+                                ue->frame_parms.pucch_config_common.nCS_AN,
                                 pucch_ack_payload,
                                 SR_payload,
                                 subframe_tx);
@@ -1105,38 +1105,38 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
           }
         } else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC
 
-	  if (phy_vars_ue->mac_enabled == 1) {
-	    Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,pucch_format1);
+	  if (ue->mac_enabled == 1) {
+	    Po_PUCCH = pucch_power_cntl(ue,subframe_tx,eNB_id,pucch_format1);
 	  }
 	  else {
-	    Po_PUCCH = phy_vars_ue->tx_power_max_dBm;
+	    Po_PUCCH = ue->tx_power_max_dBm;
 	  }
-	  phy_vars_ue->tx_power_dBm = Po_PUCCH;
-          phy_vars_ue->tx_total_RE = 12;
+	  ue->tx_power_dBm = Po_PUCCH;
+          ue->tx_total_RE = 12;
 
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
           tx_amp =  get_tx_amp(Po_PUCCH,
-	                       phy_vars_ue->tx_power_max_dBm,
-	                       phy_vars_ue->lte_frame_parms.N_RB_UL,
+	                       ue->tx_power_max_dBm,
+	                       ue->frame_parms.N_RB_UL,
 	                       1);
 #else
 	  tx_amp = AMP;
 #endif
           LOG_D(PHY,"[UE  %d][SR %x] Frame %d subframe %d Generating PUCCH 1 (SR for PUSCH), n1_pucch %d, Po_PUCCH %d\n",
                 Mod_id,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                ue->dlsch[eNB_id][0]->rnti,
                 frame_tx, subframe_tx,
-                phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
+                ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
                 Po_PUCCH);
 
           if (abstraction_flag == 0) {
 
-            generate_pucch(phy_vars_ue->lte_ue_common_vars.txdataF,
-                           &phy_vars_ue->lte_frame_parms,
-                           phy_vars_ue->ncs_cell,
+            generate_pucch(ue->common_vars.txdataF,
+                           &ue->frame_parms,
+                           ue->ncs_cell,
                            pucch_format1,
-                           &phy_vars_ue->pucch_config_dedicated[eNB_id],
-                           phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
+                           &ue->pucch_config_dedicated[eNB_id],
+                           ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
                            0,  // n2_pucch
                            1,  // shortened format
                            pucch_ack_payload,  // this is ignored anyway, we just need a pointer
@@ -1144,9 +1144,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
                            subframe_tx);
           } else {
             LOG_D(PHY,"Calling generate_pucch_emul ...\n");
-            generate_pucch_emul(phy_vars_ue,
+            generate_pucch_emul(ue,
                                 pucch_format1,
-                                phy_vars_ue->lte_frame_parms.pucch_config_common.nCS_AN,
+                                ue->frame_parms.pucch_config_common.nCS_AN,
                                 pucch_ack_payload,
                                 SR_payload,
                                 subframe_tx);
@@ -1158,19 +1158,19 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
 #ifdef CBA
 
-      if ((phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag >= 1) &&
-          (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status == CBA_ACTIVE)) {
-        phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag=0; //-=1
-        //  phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
-        first_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb;
-        nb_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb;
-        //cba_mcs=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->mcs;
-        input_buffer_length = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS/8;
+      if ((ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag >= 1) &&
+          (ue->ulsch[eNB_id]->harq_processes[harq_pid]->status == CBA_ACTIVE)) {
+        ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag=0; //-=1
+        //  ue->ulsch[eNB_id]->harq_processes[harq_pid]->status= IDLE;
+        first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb;
+        nb_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb;
+        //cba_mcs=ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs;
+        input_buffer_length = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS/8;
         access_mode=CBA_ACCESS;
 
         LOG_D(PHY,"[UE %d] Frame %d, subframe %d: CBA num dci %d\n",
               Mod_id,frame_tx,subframe_tx,
-              phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]);
+              ue->ulsch[eNB_id]->num_cba_dci[subframe_tx]);
 
         mac_xface->ue_get_sdu(Mod_id,
                               CC_id,
@@ -1181,16 +1181,16 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
                               input_buffer_length,
                               &access_mode);
 
-        phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]=0;
+        ue->ulsch[eNB_id]->num_cba_dci[subframe_tx]=0;
 
         if (access_mode > UNKNOWN_ACCESS) {
 
           if (abstraction_flag==0) {
             if (ulsch_encoding(ulsch_input_buffer,
-                               phy_vars_ue,
+                               ue,
                                harq_pid,
                                eNB_id,
-                               phy_vars_ue->transmission_mode[eNB_id],0,
+                               ue->transmission_mode[eNB_id],0,
                                0)!=0) {  //  Nbundled, to be updated!!!!
               LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
               return;
@@ -1199,13 +1199,13 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
 #ifdef PHY_ABSTRACTION
           else {
-            ulsch_encoding_emul(ulsch_input_buffer,phy_vars_ue,eNB_id,harq_pid,0);
+            ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
           }
 
 #endif
         } else {
-          phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
-          //reset_cba_uci(phy_vars_ue->ulsch_ue[eNB_id]->o);
+          ue->ulsch[eNB_id]->harq_processes[harq_pid]->status= IDLE;
+          //reset_cba_uci(ue->ulsch[eNB_id]->o);
           LOG_N(PHY,"[UE %d] Frame %d, subframe %d: CBA transmission cancelled or postponed\n",
                 Mod_id, frame_tx,subframe_tx);
         }
@@ -1217,75 +1217,75 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
         nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
 
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
-        ulsch_start = (phy_vars_ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
-                       phy_vars_ue->hw_timing_advance-
-                       phy_vars_ue->timing_advance-
-                       phy_vars_ue->N_TA_offset+5)%(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
+        ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
+                       ue->hw_timing_advance-
+                       ue->timing_advance-
+                       ue->N_TA_offset+5)%(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
 #else //this is the normal case
-        ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-phy_vars_ue->N_TA_offset; //-phy_vars_ue->timing_advance;
+        ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
 #endif //else EXMIMO
 	if ((frame_tx%100) == 0)
 	  LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
 		Mod_id,frame_tx,subframe_tx,
 		ulsch_start,
-		phy_vars_ue->rx_offset,
-		phy_vars_ue->hw_timing_advance,
-		phy_vars_ue->timing_advance,
-		phy_vars_ue->N_TA_offset);
+		ue->rx_offset,
+		ue->hw_timing_advance,
+		ue->timing_advance,
+		ue->N_TA_offset);
  
 
         if (generate_ul_signal == 1 ) {
 
 
 
-          start_meas(&phy_vars_ue->ofdm_mod_stats);
+          start_meas(&ue->ofdm_mod_stats);
 
           for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
             if (frame_parms->Ncp == 1)
-              PHY_ofdm_mod(&phy_vars_ue->lte_ue_common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
+              PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
                            dummy_tx_buffer,
 #else
-                           &phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],
+                           &ue->common_vars.txdata[aa][ulsch_start],
 #endif
                            frame_parms->ofdm_symbol_size,
                            nsymb,
                            frame_parms->nb_prefix_samples,
                            CYCLIC_PREFIX);
             else
-              normal_prefix_mod(&phy_vars_ue->lte_ue_common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
+              normal_prefix_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
                                 dummy_tx_buffer,
 #else
-                                &phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],
+                                &ue->common_vars.txdata[aa][ulsch_start],
 #endif
                                 nsymb,
-                                &phy_vars_ue->lte_frame_parms);
+                                &ue->frame_parms);
 
             /*
               if (subframe_tx == 8) {
               printf("Symbol 0 %p (offset %d) base %p\n",
-              &phy_vars_ue->lte_ue_common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
+              &ue->common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
               nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe,
-              phy_vars_ue->lte_ue_common_vars.txdataF[0]);
-              write_output("txsigF8.m","txsF8", &phy_vars_ue->lte_ue_common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
-              phy_vars_ue->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
-              write_output("txsig8.m","txs8", &phy_vars_ue->lte_ue_common_vars.txdata[0][phy_vars_ue->lte_frame_parms.samples_per_tti*subframe],
-              phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+              ue->common_vars.txdataF[0]);
+              write_output("txsigF8.m","txsF8", &ue->common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
+              ue->frame_parms.ofdm_symbol_size*nsymb,1,1);
+              write_output("txsig8.m","txs8", &ue->common_vars.txdata[0][ue->frame_parms.samples_per_tti*subframe],
+              ue->frame_parms.samples_per_tti,1,1);
               }
             */
 #ifndef OFDMA_ULSCH
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
-            apply_7_5_kHz(phy_vars_ue,dummy_tx_buffer,0);
-            apply_7_5_kHz(phy_vars_ue,dummy_tx_buffer,1);
+            apply_7_5_kHz(ue,dummy_tx_buffer,0);
+            apply_7_5_kHz(ue,dummy_tx_buffer,1);
 #else
-            apply_7_5_kHz(phy_vars_ue,&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],0);
-            apply_7_5_kHz(phy_vars_ue,&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],1);
+            apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
+            apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
 #endif
             /*
               if (subframe_tx == 8) {
-              write_output("txsig8_mod.m","txs8_mod", &phy_vars_ue->lte_ue_common_vars.txdata[0][phy_vars_ue->lte_frame_parms.samples_per_tti*subframe],
-              phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+              write_output("txsig8_mod.m","txs8_mod", &ue->common_vars.txdata[0][ue->frame_parms.samples_per_tti*subframe],
+              ue->frame_parms.samples_per_tti,1,1);
               }
             */
 #endif
@@ -1295,34 +1295,34 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
             //if ((slot_tx==4) && (aa==0)) printf("ulsch_start %d, overflow %d\n",ulsch_start,overflow);
             for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
-              ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
-              ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
+              ((short*)ue->common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
+              ((short*)ue->common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
             }
 
             for (k=0; k<overflow; k++,l++) {
-              ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
-              ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
+              ((short*)ue->common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
+              ((short*)ue->common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
             }
 #if defined(EXMIMO)
 	    // handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
 	    for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; k<ulsch_start ; k++) {
 	      if (k<0)
-		phy_vars_ue->lte_ue_common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+		ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
 	      else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
-		phy_vars_ue->lte_ue_common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+		ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
 	      else
-		phy_vars_ue->lte_ue_common_vars.txdata[aa][k] &= 0xFFFEFFFE;
+		ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
 	    }
 #endif
 #endif
 
           } //nb_antennas_tx
 
-          stop_meas(&phy_vars_ue->ofdm_mod_stats);
+          stop_meas(&ue->ofdm_mod_stats);
         } // generate_ul_signal == 1
         else {  // no uplink so clear signal buffer instead
           for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
-            memset(&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],0,frame_parms->samples_per_tti<<2);
+            memset(&ue->common_vars.txdata[aa][ulsch_start],0,frame_parms->samples_per_tti<<2);
           }
         }
       }
@@ -1331,33 +1331,33 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
     //  }// slot_tx is even
     //  else {  // slot_tx is odd, do the PRACH here
 
-    if ((phy_vars_ue->UE_mode[eNB_id] == PRACH) && (phy_vars_ue->lte_frame_parms.prach_config_common.prach_Config_enabled==1)) {
+    if ((ue->UE_mode[eNB_id] == PRACH) && (ue->frame_parms.prach_config_common.prach_Config_enabled==1)) {
 
       // check if we have PRACH opportunity
-      if (is_prach_subframe(&phy_vars_ue->lte_frame_parms,frame_tx,subframe_tx)) {
-        phy_vars_ue->generate_prach=0;
+      if (is_prach_subframe(&ue->frame_parms,frame_tx,subframe_tx)) {
+        ue->generate_prach=0;
 
-	if (phy_vars_ue->mac_enabled==1){
+	if (ue->mac_enabled==1){
 	  // ask L2 for RACH transport
 	  if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) {
-	    phy_vars_ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(Mod_id,
+	    ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(Mod_id,
 									  CC_id,
 									  frame_tx,
 									  eNB_id,
 									  subframe_tx);
-	    //    LOG_I(PHY,"Got prach_resources for eNB %d address %d, RRCCommon %d\n",eNB_id,phy_vars_ue->prach_resources[eNB_id],UE_mac_inst[Mod_id].radioResourceConfigCommon);
+	    //    LOG_I(PHY,"Got prach_resources for eNB %d address %d, RRCCommon %d\n",eNB_id,ue->prach_resources[eNB_id],UE_mac_inst[Mod_id].radioResourceConfigCommon);
 	  }
 	}
 
-        if (phy_vars_ue->prach_resources[eNB_id]!=NULL) {
+        if (ue->prach_resources[eNB_id]!=NULL) {
 
-          phy_vars_ue->generate_prach=1;
-          phy_vars_ue->prach_cnt=0;
+          ue->generate_prach=1;
+          ue->prach_cnt=0;
 #ifdef SMBV
-          phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
+          ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
 #endif
 #ifdef OAI_EMU
-          phy_vars_ue->prach_PreambleIndex=phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex;
+          ue->prach_PreambleIndex=ue->prach_resources[eNB_id]->ra_PreambleIndex;
 #endif
 
           if (abstraction_flag == 0) {
@@ -1365,49 +1365,49 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
                   Mod_id,
                   frame_tx,
                   subframe_tx,
-                  phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex,
-                  phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
-                  phy_vars_ue->prach_resources[eNB_id]->ra_TDD_map_index,
-                  phy_vars_ue->prach_resources[eNB_id]->ra_RNTI);
+                  ue->prach_resources[eNB_id]->ra_PreambleIndex,
+                  ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
+                  ue->prach_resources[eNB_id]->ra_TDD_map_index,
+                  ue->prach_resources[eNB_id]->ra_RNTI);
 
-	    if ((phy_vars_ue->mac_enabled==1) && (mode != calib_prach_tx)) {
-	      phy_vars_ue->tx_power_dBm = phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id);
+	    if ((ue->mac_enabled==1) && (mode != calib_prach_tx)) {
+	      ue->tx_power_dBm = ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id);
 	    }
 	    else {
-	      phy_vars_ue->tx_power_dBm = phy_vars_ue->tx_power_max_dBm;
-	      phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;	      
+	      ue->tx_power_dBm = ue->tx_power_max_dBm;
+	      ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;	      
 	    }
 
-            phy_vars_ue->tx_total_RE = 96;
+            ue->tx_total_RE = 96;
 
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
-            phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = get_tx_amp(phy_vars_ue->tx_power_dBm,
-								     phy_vars_ue->tx_power_max_dBm,
-								     phy_vars_ue->lte_frame_parms.N_RB_UL,
+            ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm,
+								     ue->tx_power_max_dBm,
+								     ue->frame_parms.N_RB_UL,
 								     6);
 #else
-            phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = AMP;
+            ue->prach_vars[eNB_id]->amp = AMP;
 #endif
-	    if ((mode == calib_prach_tx) && (((phy_vars_ue->frame_tx&0xfffe)%100)==0))
-	      LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm,
-		    phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp);
+	    if ((mode == calib_prach_tx) && (((ue->frame_tx&0xfffe)%100)==0))
+	      LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,ue->frame_rx,ue->slot_tx>>1,ue->tx_power_dBm,
+		    ue->prach_vars[eNB_id]->amp);
 
 
-            //      start_meas(&phy_vars_ue->tx_prach);
+            //      start_meas(&ue->tx_prach);
             VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_IN);
-            prach_power = generate_prach(phy_vars_ue,eNB_id,subframe_tx,frame_tx);
+            prach_power = generate_prach(ue,eNB_id,subframe_tx,frame_tx);
             VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_OUT);
-            //      stop_meas(&phy_vars_ue->tx_prach);
+            //      stop_meas(&ue->tx_prach);
             LOG_D(PHY,"[UE  %d][RAPROC] PRACH PL %d dB, power %d dBm, digital power %d dB (amp %d)\n",
                   Mod_id,
                   get_PL(Mod_id,CC_id,eNB_id),
-                  phy_vars_ue->tx_power_dBm,
+                  ue->tx_power_dBm,
                   dB_fixed(prach_power),
-                  phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp);
+                  ue->prach_vars[eNB_id]->amp);
           } else {
             UE_transport_info[Mod_id][CC_id].cntl.prach_flag=1;
-            UE_transport_info[Mod_id][CC_id].cntl.prach_id=phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex;
-	    if (phy_vars_ue->mac_enabled==1){
+            UE_transport_info[Mod_id][CC_id].cntl.prach_id=ue->prach_resources[eNB_id]->ra_PreambleIndex;
+	    if (ue->mac_enabled==1){
 	      mac_xface->Msg1_transmitted(Mod_id,
 					  CC_id,
 					  frame_tx,
@@ -1417,8 +1417,8 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 
           LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n",
                 Mod_id,frame_tx,subframe_tx,eNB_id,
-                phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex,
-                phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id),
+                ue->prach_resources[eNB_id]->ra_PreambleIndex,
+                ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id),
                 get_PL(Mod_id,CC_id,eNB_id));
 
 	}	  
@@ -1426,29 +1426,29 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
       }
       // if we're calibrating the PRACH kill the pointer to its resources so that the RA protocol doesn't continue
       if (mode == calib_prach_tx)
-	phy_vars_ue->prach_resources[eNB_id]=NULL;
+	ue->prach_resources[eNB_id]=NULL;
 
       LOG_D(PHY,"[UE %d] frame %d subframe %d : generate_prach %d, prach_cnt %d\n",
-            Mod_id,frame_tx,subframe_tx,phy_vars_ue->generate_prach,phy_vars_ue->prach_cnt);
+            Mod_id,frame_tx,subframe_tx,ue->generate_prach,ue->prach_cnt);
 
-      phy_vars_ue->prach_cnt++;
+      ue->prach_cnt++;
 
-      if (phy_vars_ue->prach_cnt==3)
-        phy_vars_ue->generate_prach=0;
+      if (ue->prach_cnt==3)
+        ue->generate_prach=0;
     } // mode is PRACH
     else {
-      phy_vars_ue->generate_prach=0;
+      ue->generate_prach=0;
     }
   } // slot_tx is even
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-  stop_meas(&phy_vars_ue->phy_proc_tx);
+  stop_meas(&ue->phy_proc_tx);
 }
 
-void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type)
+void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type)
 {
   int aa;//i,aa;
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
 
   if (abstraction_flag==0) {
 
@@ -1457,10 +1457,10 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abst
       int i;
       // set the whole tx buffer to RX
       for (i=0; i<LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti; i++)
-        phy_vars_ue->lte_ue_common_vars.txdata[aa][i] = 0x00010001;
+        ue->common_vars.txdata[aa][i] = 0x00010001;
 
 #else //this is the normal case
-      memset(&phy_vars_ue->lte_ue_common_vars.txdata[aa][0],0,
+      memset(&ue->common_vars.txdata[aa][0],0,
              (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t));
 #endif //else EXMIMO
 
@@ -1468,17 +1468,17 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abst
   }
 }
 
-void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode)
+void ue_measurement_procedures(uint16_t l, PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode)
 {
 
-  LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   //  int aa;
 #if defined(EXMIMO) && defined(DRIVER2013)
   //  exmimo_config_t *p_exmimo_config = openair0_exmimo_pci[0].exmimo_config_ptr;
   //  int aa;
 #endif
 
-  int slot_rx = phy_vars_ue->slot_rx;
+  int slot_rx = ue->slot_rx;
   int subframe_rx = slot_rx>>1;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_MEASUREMENT_PROCEDURES, VCD_FUNCTION_IN);
@@ -1486,32 +1486,32 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
   if (l==0) {
     // UE measurements on symbol 0
     if (abstraction_flag==0) {
-      LOG_D(PHY,"Calling measurements subframe %d, rxdata %p\n",subframe_rx,phy_vars_ue->lte_ue_common_vars.rxdata);
+      LOG_D(PHY,"Calling measurements subframe %d, rxdata %p\n",subframe_rx,ue->common_vars.rxdata);
 
-      lte_ue_measurements(phy_vars_ue,
-                          (subframe_rx*frame_parms->samples_per_tti+phy_vars_ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
+      lte_ue_measurements(ue,
+                          (subframe_rx*frame_parms->samples_per_tti+ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
                           (slot_rx == 2) ? 1 : 0,
                           0);
     } else {
-      lte_ue_measurements(phy_vars_ue,
+      lte_ue_measurements(ue,
                           0,
                           0,
                           1);
     }
   }
 
-  if (l==(6-phy_vars_ue->lte_frame_parms.Ncp)) {
+  if (l==(6-ue->frame_parms.Ncp)) {
 	
    // make sure we have signal from PSS/SSS for N0 measurement
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_IN);
-    ue_rrc_measurements(phy_vars_ue,
+    ue_rrc_measurements(ue,
                         slot_rx,
                         abstraction_flag);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_OUT);
 
     if (abstraction_flag==1)
-      phy_vars_ue->sinr_eff =  sinr_eff_cqi_calc(phy_vars_ue, 0);
+      ue->sinr_eff =  sinr_eff_cqi_calc(ue, 0);
 
   }
 
@@ -1524,7 +1524,7 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
 #ifndef OAI_USRP
 #ifndef OAI_BLADERF
 #ifndef OAI_LMSSDR
-    phy_adjust_gain (phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
+    phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
 #endif
 #endif
 #endif
@@ -1534,8 +1534,8 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
     eNB_id = 0;
 
     if (abstraction_flag == 0)
-      lte_adjust_synch(&phy_vars_ue->lte_frame_parms,
-                       phy_vars_ue,
+      lte_adjust_synch(&ue->frame_parms,
+                       ue,
                        eNB_id,
                        0,
                        16384);
@@ -1548,13 +1548,13 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
 }
 
 #ifdef EMOS
-void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_t eNB_id)
+void phy_procedures_emos_UE_RX(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
 {
 
   uint8_t i,j;
   //uint16_t last_slot_emos;
   uint32_t bytes;
-  int Mod_id = phy_vars_ue->Mod_id;
+  int Mod_id = ue->Mod_id;
 
   /*
   if (last_slot<2)
@@ -1570,16 +1570,16 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_
 #ifdef EMOS_CHANNEL
 
   if ((last_slot==10) || (last_slot==11)) {
-    for (i=0; i<phy_vars_ue->lte_frame_parms.nb_antennas_rx; i++)
-      for (j=0; j<phy_vars_ue->lte_frame_parms.nb_antennas_tx; j++) {
+    for (i=0; i<ue->frame_parms.nb_antennas_rx; i++)
+      for (j=0; j<ue->frame_parms.nb_antennas_tx; j++) {
         // first OFDM symbol with pilots
-        memcpy(&emos_dump_UE.channel[i][j][(last_slot%2)*2*phy_vars_ue->lte_frame_parms.ofdm_symbol_size],
-               &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][0],
-               phy_vars_ue->lte_frame_parms.ofdm_symbol_size*sizeof(int));
+        memcpy(&emos_dump_UE.channel[i][j][(last_slot%2)*2*ue->frame_parms.ofdm_symbol_size],
+               &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][0],
+               ue->frame_parms.ofdm_symbol_size*sizeof(int));
         // second OFDM symbol with pilots
-        memcpy(&emos_dump_UE.channel[i][j][((last_slot%2)*2+1)*phy_vars_ue->lte_frame_parms.ofdm_symbol_size],
-               &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][(phy_vars_ue->lte_frame_parms.Ncp == 0 ? 4 : 3)*phy_vars_ue->lte_frame_parms.ofdm_symbol_size],
-               phy_vars_ue->lte_frame_parms.ofdm_symbol_size*sizeof(int));
+        memcpy(&emos_dump_UE.channel[i][j][((last_slot%2)*2+1)*ue->frame_parms.ofdm_symbol_size],
+               &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][(ue->frame_parms.Ncp == 0 ? 4 : 3)*ue->frame_parms.ofdm_symbol_size],
+               ue->frame_parms.ofdm_symbol_size*sizeof(int));
       }
   }
 
@@ -1587,47 +1587,47 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_
 
   if (last_slot==0) {
     emos_dump_UE.timestamp = rt_get_time_ns();
-    emos_dump_UE.frame_rx = phy_vars_ue->frame_rx;
-    emos_dump_UE.UE_mode = phy_vars_ue->UE_mode[eNB_id];
-    emos_dump_UE.mimo_mode = phy_vars_ue->transmission_mode[eNB_id];
-    emos_dump_UE.freq_offset = phy_vars_ue->lte_ue_common_vars.freq_offset;
-    emos_dump_UE.timing_advance = phy_vars_ue->timing_advance;
-    emos_dump_UE.timing_offset  = phy_vars_ue->rx_offset;
-    emos_dump_UE.rx_total_gain_dB = phy_vars_ue->rx_total_gain_dB;
+    emos_dump_UE.frame_rx = ue->frame_rx;
+    emos_dump_UE.UE_mode = ue->UE_mode[eNB_id];
+    emos_dump_UE.mimo_mode = ue->transmission_mode[eNB_id];
+    emos_dump_UE.freq_offset = ue->common_vars.freq_offset;
+    emos_dump_UE.timing_advance = ue->timing_advance;
+    emos_dump_UE.timing_offset  = ue->rx_offset;
+    emos_dump_UE.rx_total_gain_dB = ue->rx_total_gain_dB;
     emos_dump_UE.eNb_id = eNB_id;
-    memcpy(&emos_dump_UE.PHY_measurements,&phy_vars_ue->PHY_measurements,sizeof(PHY_MEASUREMENTS));
+    memcpy(&emos_dump_UE.PHY_measurements,&measurements,sizeof(PHY_MEASUREMENTS));
   }
 
   if (last_slot==1) {
-    emos_dump_UE.pbch_errors = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors;
-    emos_dump_UE.pbch_errors_last = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_last;
-    emos_dump_UE.pbch_errors_conseq = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq;
-    emos_dump_UE.pbch_fer = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_fer;
+    emos_dump_UE.pbch_errors = ue->pbch_vars[eNB_id]->pdu_errors;
+    emos_dump_UE.pbch_errors_last = ue->pbch_vars[eNB_id]->pdu_errors_last;
+    emos_dump_UE.pbch_errors_conseq = ue->pbch_vars[eNB_id]->pdu_errors_conseq;
+    emos_dump_UE.pbch_fer = ue->pbch_vars[eNB_id]->pdu_fer;
   }
 
   if (last_slot==19) {
-    emos_dump_UE.dlsch_errors = phy_vars_ue->dlsch_errors[eNB_id];
-    emos_dump_UE.dlsch_errors_last = phy_vars_ue->dlsch_errors_last[eNB_id];
-    emos_dump_UE.dlsch_received = phy_vars_ue->dlsch_received[eNB_id];
-    emos_dump_UE.dlsch_received_last = phy_vars_ue->dlsch_received_last[eNB_id];
-    emos_dump_UE.dlsch_fer = phy_vars_ue->dlsch_fer[eNB_id];
-    emos_dump_UE.dlsch_cntl_errors = phy_vars_ue->dlsch_SI_errors[eNB_id];
-    emos_dump_UE.dlsch_ra_errors = phy_vars_ue->dlsch_ra_errors[eNB_id];
-    emos_dump_UE.total_TBS = phy_vars_ue->total_TBS[eNB_id];
-    emos_dump_UE.total_TBS_last = phy_vars_ue->total_TBS_last[eNB_id];
-    emos_dump_UE.bitrate = phy_vars_ue->bitrate[eNB_id];
-    emos_dump_UE.total_received_bits = phy_vars_ue->total_received_bits[eNB_id];
-    emos_dump_UE.pmi_saved = phy_vars_ue->dlsch_ue[eNB_id][0]->pmi_alloc;
-    emos_dump_UE.mcs = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs;
+    emos_dump_UE.dlsch_errors = ue->dlsch_errors[eNB_id];
+    emos_dump_UE.dlsch_errors_last = ue->dlsch_errors_last[eNB_id];
+    emos_dump_UE.dlsch_received = ue->dlsch_received[eNB_id];
+    emos_dump_UE.dlsch_received_last = ue->dlsch_received_last[eNB_id];
+    emos_dump_UE.dlsch_fer = ue->dlsch_fer[eNB_id];
+    emos_dump_UE.dlsch_cntl_errors = ue->dlsch_SI_errors[eNB_id];
+    emos_dump_UE.dlsch_ra_errors = ue->dlsch_ra_errors[eNB_id];
+    emos_dump_UE.total_TBS = ue->total_TBS[eNB_id];
+    emos_dump_UE.total_TBS_last = ue->total_TBS_last[eNB_id];
+    emos_dump_UE.bitrate = ue->bitrate[eNB_id];
+    emos_dump_UE.total_received_bits = ue->total_received_bits[eNB_id];
+    emos_dump_UE.pmi_saved = ue->dlsch[eNB_id][0]->pmi_alloc;
+    emos_dump_UE.mcs = ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs;
     emos_dump_UE.use_ia_receiver = openair_daq_vars.use_ia_receiver;
 
     bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_UE, sizeof(fifo_dump_emos_UE));
 
     if (bytes!=sizeof(fifo_dump_emos_UE)) {
-      LOG_W(PHY,"[UE  %d] frame %d, slot %d, Problem writing EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame_rx, last_slot);
+      LOG_W(PHY,"[UE  %d] frame %d, slot %d, Problem writing EMOS data to FIFO\n",Mod_id,ue->frame_rx, last_slot);
     } else {
-      if (phy_vars_ue->frame_rx%100==0) {
-        LOG_I(PHY,"[UE  %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame_rx, last_slot, bytes);
+      if (ue->frame_rx%100==0) {
+        LOG_I(PHY,"[UE  %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,ue->frame_rx, last_slot, bytes);
       }
     }
   }
@@ -1636,65 +1636,65 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_
 #endif
 
 
-void restart_phy(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag)
+void restart_phy(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag)
 {
 
   //  uint8_t last_slot;
   uint8_t i;
-  LOG_I(PHY,"[UE  %d] frame %d, slot %d, restarting PHY!\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_rx);
+  LOG_I(PHY,"[UE  %d] frame %d, slot %d, restarting PHY!\n",ue->Mod_id,ue->frame_rx,ue->slot_rx);
   mac_xface->macphy_exit("restart_phy called");
   //   first_run = 1;
 
   if (abstraction_flag ==0 ) {
-    phy_vars_ue->UE_mode[eNB_id] = NOT_SYNCHED;
+    ue->UE_mode[eNB_id] = NOT_SYNCHED;
   } else {
-    phy_vars_ue->UE_mode[eNB_id] = PRACH;
-    phy_vars_ue->prach_resources[eNB_id]=NULL;
+    ue->UE_mode[eNB_id] = PRACH;
+    ue->prach_resources[eNB_id]=NULL;
   }
 
-  phy_vars_ue->frame_rx = -1;
-  phy_vars_ue->frame_tx = -1;
-  //  phy_vars_ue->synch_wait_cnt=0;
-  //  phy_vars_ue->sched_cnt=-1;
+  ue->frame_rx = -1;
+  ue->frame_tx = -1;
+  //  ue->synch_wait_cnt=0;
+  //  ue->sched_cnt=-1;
 
-  phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq=0;
-  phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors=0;
+  ue->pbch_vars[eNB_id]->pdu_errors_conseq=0;
+  ue->pbch_vars[eNB_id]->pdu_errors=0;
 
-  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors = 0;
-  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_missed = 0;
-  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false  = 0;
-  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_received = 0;
+  ue->pdcch_vars[eNB_id]->dci_errors = 0;
+  ue->pdcch_vars[eNB_id]->dci_missed = 0;
+  ue->pdcch_vars[eNB_id]->dci_false  = 0;
+  ue->pdcch_vars[eNB_id]->dci_received = 0;
 
-  phy_vars_ue->dlsch_errors[eNB_id] = 0;
-  phy_vars_ue->dlsch_errors_last[eNB_id] = 0;
-  phy_vars_ue->dlsch_received[eNB_id] = 0;
-  phy_vars_ue->dlsch_received_last[eNB_id] = 0;
-  phy_vars_ue->dlsch_fer[eNB_id] = 0;
-  phy_vars_ue->dlsch_SI_received[eNB_id] = 0;
-  phy_vars_ue->dlsch_ra_received[eNB_id] = 0;
-  phy_vars_ue->dlsch_SI_errors[eNB_id] = 0;
-  phy_vars_ue->dlsch_ra_errors[eNB_id] = 0;
+  ue->dlsch_errors[eNB_id] = 0;
+  ue->dlsch_errors_last[eNB_id] = 0;
+  ue->dlsch_received[eNB_id] = 0;
+  ue->dlsch_received_last[eNB_id] = 0;
+  ue->dlsch_fer[eNB_id] = 0;
+  ue->dlsch_SI_received[eNB_id] = 0;
+  ue->dlsch_ra_received[eNB_id] = 0;
+  ue->dlsch_SI_errors[eNB_id] = 0;
+  ue->dlsch_ra_errors[eNB_id] = 0;
 
-  phy_vars_ue->dlsch_mch_received[eNB_id] = 0;
+  ue->dlsch_mch_received[eNB_id] = 0;
 
   for (i=0; i < MAX_MBSFN_AREA ; i ++) {
-    phy_vars_ue->dlsch_mch_received_sf[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mcch_received[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mtch_received[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mcch_errors[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mtch_errors[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mcch_trials[i][eNB_id] = 0;
-    phy_vars_ue->dlsch_mtch_trials[i][eNB_id] = 0;
+    ue->dlsch_mch_received_sf[i][eNB_id] = 0;
+    ue->dlsch_mcch_received[i][eNB_id] = 0;
+    ue->dlsch_mtch_received[i][eNB_id] = 0;
+    ue->dlsch_mcch_errors[i][eNB_id] = 0;
+    ue->dlsch_mtch_errors[i][eNB_id] = 0;
+    ue->dlsch_mcch_trials[i][eNB_id] = 0;
+    ue->dlsch_mtch_trials[i][eNB_id] = 0;
   }
 
-  //phy_vars_ue->total_TBS[eNB_id] = 0;
-  //phy_vars_ue->total_TBS_last[eNB_id] = 0;
-  //phy_vars_ue->bitrate[eNB_id] = 0;
-  //phy_vars_ue->total_received_bits[eNB_id] = 0;
+  //ue->total_TBS[eNB_id] = 0;
+  //ue->total_TBS_last[eNB_id] = 0;
+  //ue->bitrate[eNB_id] = 0;
+  //ue->total_received_bits[eNB_id] = 0;
 }
 
 
-void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abstraction_flag)
+void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,uint8_t abstraction_flag)
 {
 
   //  int i;
@@ -1704,9 +1704,9 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   static uint8_t first_run = 1;
   uint8_t pbch_trials = 0;
 
-  DevAssert(phy_vars_ue);
-  int slot_rx = phy_vars_ue->slot_rx;
-  int frame_rx = phy_vars_ue->frame_rx;
+  DevAssert(ue);
+  int slot_rx = ue->slot_rx;
+  int frame_rx = ue->frame_rx;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_IN);
 
@@ -1717,14 +1717,14 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 
   for (pbch_trials=0; pbch_trials<4; pbch_trials++) {
     //for (pbch_phase=0;pbch_phase<4;pbch_phase++) {
-    //LOG_I(PHY,"[UE  %d] Frame %d, Trying PBCH %d (NidCell %d, eNB_id %d)\n",phy_vars_ue->Mod_id,frame_rx,pbch_phase,phy_vars_ue->lte_frame_parms.Nid_cell,eNB_id);
+    //LOG_I(PHY,"[UE  %d] Frame %d, Trying PBCH %d (NidCell %d, eNB_id %d)\n",ue->Mod_id,frame_rx,pbch_phase,ue->frame_parms.Nid_cell,eNB_id);
     if (abstraction_flag == 0) {
-      pbch_tx_ant = rx_pbch(&phy_vars_ue->lte_ue_common_vars,
-                            phy_vars_ue->lte_ue_pbch_vars[eNB_id],
-                            &phy_vars_ue->lte_frame_parms,
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[eNB_id],
+                            &ue->frame_parms,
                             eNB_id,
-                            phy_vars_ue->lte_frame_parms.mode1_flag==1?SISO:ALAMOUTI,
-                            phy_vars_ue->high_speed_flag,
+                            ue->frame_parms.mode1_flag==1?SISO:ALAMOUTI,
+                            ue->high_speed_flag,
                             pbch_phase);
 
 
@@ -1733,7 +1733,7 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 
 #ifdef PHY_ABSTRACTION
     else {
-      pbch_tx_ant = rx_pbch_emul(phy_vars_ue,
+      pbch_tx_ant = rx_pbch_emul(ue,
                                  eNB_id,
                                  pbch_phase);
     }
@@ -1761,85 +1761,85 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
     }
 
 
-    phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq = 0;
-    frame_tx = (((int)(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
-    frame_tx += ((int)(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output[1]&0xfc));
+    ue->pbch_vars[eNB_id]->pdu_errors_conseq = 0;
+    frame_tx = (((int)(ue->pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
+    frame_tx += ((int)(ue->pbch_vars[eNB_id]->decoded_output[1]&0xfc));
     frame_tx += pbch_phase;
 
-    if (phy_vars_ue->mac_enabled==1) {
-      mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,frame_rx,eNB_id,
-				     phy_vars_ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
+    if (ue->mac_enabled==1) {
+      mac_xface->dl_phy_sync_success(ue->Mod_id,frame_rx,eNB_id,
+				     ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
     }
     
 #ifdef EMOS
     //emos_dump_UE.frame_tx = frame_tx;
-    //emos_dump_UE.mimo_mode = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output[1];
+    //emos_dump_UE.mimo_mode = ue->pbch_vars[eNB_id]->decoded_output[1];
 #endif
 
     if (first_run) {
       first_run = 0;
       LOG_I(PHY,"[UE %d] frame %d, slot %d: Adjusting frame counter (PBCH ant_tx=%d, frame_tx=%d, phase %d).\n",
-            phy_vars_ue->Mod_id,
+            ue->Mod_id,
             frame_rx,
             slot_rx,
             pbch_tx_ant,
             frame_tx,
             pbch_phase);
-      phy_vars_ue->frame_rx = (phy_vars_ue->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
-      phy_vars_ue->frame_tx = phy_vars_ue->frame_rx;
-      frame_rx = phy_vars_ue->frame_rx;
-    } else if (((frame_tx & 0x03FF) != (phy_vars_ue->frame_rx & 0x03FF))) {
-      //(pbch_tx_ant != phy_vars_ue->lte_frame_parms.nb_antennas_tx)) {
+      ue->frame_rx = (ue->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
+      ue->frame_tx = ue->frame_rx;
+      frame_rx = ue->frame_rx;
+    } else if (((frame_tx & 0x03FF) != (ue->frame_rx & 0x03FF))) {
+      //(pbch_tx_ant != ue->frame_parms.nb_antennas_tx)) {
       LOG_D(PHY,"[UE %d] frame %d, slot %d: Re-adjusting frame counter (PBCH ant_tx=%d, frame_rx=%d, frame%1024=%d, phase %d).\n",
-            phy_vars_ue->Mod_id,
-            phy_vars_ue->frame_rx,
+            ue->Mod_id,
+            ue->frame_rx,
             slot_rx,
             pbch_tx_ant,
             frame_tx,
             frame_rx & 0x03FF,
             pbch_phase);
 
-      phy_vars_ue->frame_rx = (phy_vars_ue->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
-      phy_vars_ue->frame_tx = phy_vars_ue->frame_rx;
-      frame_rx = phy_vars_ue->frame_rx;
+      ue->frame_rx = (ue->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
+      ue->frame_tx = ue->frame_rx;
+      frame_rx = ue->frame_rx;
       /*
       LOG_D(PHY,"[UE  %d] frame %d, slot %d: PBCH PDU does not match, ignoring it (PBCH ant_tx=%d, frame_tx=%d).\n",
-          phy_vars_ue->Mod_id,
-          phy_vars_ue->frame,
+          ue->Mod_id,
+          ue->frame,
           slot_rx,
           pbch_tx_ant,
           frame_tx);
       */
-      //phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq = 21; // this will make it go out of sync
-      //phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq += 1; // this will make it go out of sync
+      //ue->pbch_vars[eNB_id]->pdu_errors_conseq = 21; // this will make it go out of sync
+      //ue->pbch_vars[eNB_id]->pdu_errors_conseq += 1; // this will make it go out of sync
     }
 
 #ifdef DEBUG_PHY_PROC
     LOG_D(PHY,"[UE %d] frame %d, slot %d, Received PBCH (MIB): mode1_flag %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n",
-          phy_vars_ue->Mod_id,
+          ue->Mod_id,
           frame_rx,
           slot_rx,
-          phy_vars_ue->lte_frame_parms.mode1_flag,
+          ue->frame_parms.mode1_flag,
           pbch_tx_ant,
           frame_tx,
-          phy_vars_ue->lte_frame_parms.N_RB_DL,
-          phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration,
-          phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource);
+          ue->frame_parms.N_RB_DL,
+          ue->frame_parms.phich_config_common.phich_duration,
+          ue->frame_parms.phich_config_common.phich_resource);
     /*
     if (frame_rx%100 == 0) {
       LOG_I(PHY,"[UE %d] frame %d, slot %d, PBCH: mode1_flag %d, tx_ant %d, frame_tx %d, phase %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6,Frequency offset %d Hz (%d)\n",
-            phy_vars_ue->Mod_id,
+            ue->Mod_id,
             frame_rx,
             slot_rx,
-            phy_vars_ue->lte_frame_parms.mode1_flag,
+            ue->frame_parms.mode1_flag,
             pbch_tx_ant,
             frame_tx,
             pbch_phase,
-            phy_vars_ue->lte_frame_parms.N_RB_DL,
-            phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration,
-            phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource,
-            phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset);
-      //dump_frame_parms(&phy_vars_ue->lte_frame_parms);
+            ue->frame_parms.N_RB_DL,
+            ue->frame_parms.phich_config_common.phich_duration,
+            ue->frame_parms.phich_config_common.phich_resource,
+            ue->common_vars.freq_offset,openair_daq_vars.freq_offset);
+      //dump_frame_parms(&ue->frame_parms);
 
     }
       */
@@ -1847,14 +1847,14 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 
   } else {
     LOG_E(PHY,"[UE %d] frame %d, slot %d, Error decoding PBCH!\n",
-          phy_vars_ue->Mod_id,frame_rx, slot_rx);
-    phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq++;
-    phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors++;
-    if (phy_vars_ue->mac_enabled == 1) {
-      mac_xface->out_of_sync_ind(phy_vars_ue->Mod_id,frame_rx,eNB_id);
+          ue->Mod_id,frame_rx, slot_rx);
+    ue->pbch_vars[eNB_id]->pdu_errors_conseq++;
+    ue->pbch_vars[eNB_id]->pdu_errors++;
+    if (ue->mac_enabled == 1) {
+      mac_xface->out_of_sync_ind(ue->Mod_id,frame_rx,eNB_id);
     }
     else{
-      if (phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
+      if (ue->pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
 	LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
 	mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
       }
@@ -1862,20 +1862,20 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   }
 
   if (frame_rx % 100 == 0) {
-    phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_fer = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors - phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_last;
-    phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_last = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors;
+    ue->pbch_vars[eNB_id]->pdu_fer = ue->pbch_vars[eNB_id]->pdu_errors - ue->pbch_vars[eNB_id]->pdu_errors_last;
+    ue->pbch_vars[eNB_id]->pdu_errors_last = ue->pbch_vars[eNB_id]->pdu_errors;
   }
 
 #ifdef DEBUG_PHY_PROC
   LOG_D(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n",
-        phy_vars_ue->Mod_id,frame_rx, slot_rx,
-        phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors,
-        phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq);
+        ue->Mod_id,frame_rx, slot_rx,
+        ue->pbch_vars[eNB_id]->pdu_errors,
+        ue->pbch_vars[eNB_id]->pdu_errors_conseq);
 #endif
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT);
 }
 
-int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abstraction_flag)
+int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,uint8_t abstraction_flag)
 {
 
   unsigned int dci_cnt=0, i;
@@ -1883,8 +1883,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   //uint16_t ra_RNTI;
 
 
-  int frame_rx = phy_vars_ue->frame_rx;
-  int slot_rx = phy_vars_ue->slot_rx;
+  int frame_rx = ue->frame_rx;
+  int slot_rx = ue->slot_rx;
   int subframe_rx = slot_rx>>1;
 
 
@@ -1901,29 +1901,29 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   if (abstraction_flag == 0)  {
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN);
-    rx_pdcch(&phy_vars_ue->lte_ue_common_vars,
-             phy_vars_ue->lte_ue_pdcch_vars,
-             &phy_vars_ue->lte_frame_parms,
+    rx_pdcch(&ue->common_vars,
+             ue->pdcch_vars,
+             &ue->frame_parms,
              subframe_rx,
              eNB_id,
-             (phy_vars_ue->lte_frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
-             phy_vars_ue->high_speed_flag,
-             phy_vars_ue->is_secondary_ue);
+             (ue->frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
+             ue->high_speed_flag,
+             ue->is_secondary_ue);
 
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN);
-    dci_cnt = dci_decoding_procedure(phy_vars_ue,
+    dci_cnt = dci_decoding_procedure(ue,
                                      dci_alloc_rx,
-                                     (phy_vars_ue->UE_mode[eNB_id] < PUSCH)? 1 : 0,  // if we're in PUSCH don't listen to common search space,
+                                     (ue->UE_mode[eNB_id] < PUSCH)? 1 : 0,  // if we're in PUSCH don't listen to common search space,
                                      // later when we need paging or RA during connection, update this ...
                                      eNB_id,subframe_rx);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_OUT);
-    //LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d PHICH RX\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
+    //LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d PHICH RX\n",ue->Mod_id,frame_rx,subframe_rx);
 
-    if (is_phich_subframe(&phy_vars_ue->lte_frame_parms,subframe_rx)) {
+    if (is_phich_subframe(&ue->frame_parms,subframe_rx)) {
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_IN);
-      rx_phich(phy_vars_ue,
+      rx_phich(ue,
                subframe_rx,eNB_id);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_OUT);
     }
@@ -1933,7 +1933,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   else {
     for (i=0; i<NB_eNB_INST; i++) {
       for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
-        if (PHY_vars_eNB_g[i][CC_id]->lte_frame_parms.Nid_cell == phy_vars_ue->lte_frame_parms.Nid_cell)
+        if (PHY_vars_eNB_g[i][CC_id]->frame_parms.Nid_cell == ue->frame_parms.Nid_cell)
           break;
 
       if (CC_id < MAX_NUM_CCs)
@@ -1941,48 +1941,48 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
     }
 
     if (i==NB_eNB_INST) {
-      LOG_E(PHY,"[UE  %d] phy_procedures_lte_ue.c: FATAL : Could not find attached eNB for DCI emulation (Nid_cell %d)!!!!\n",phy_vars_ue->Mod_id,phy_vars_ue->lte_frame_parms.Nid_cell);
+      LOG_E(PHY,"[UE  %d] phy_procedures_lte_ue.c: FATAL : Could not find attached eNB for DCI emulation (Nid_cell %d)!!!!\n",ue->Mod_id,ue->frame_parms.Nid_cell);
       mac_xface->macphy_exit("Could not find attached eNB for DCI emulation");
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
       return(-1);
     }
 
     LOG_D(PHY,"Calling dci_decoding_proc_emul ...\n");
-    dci_cnt = dci_decoding_procedure_emul(phy_vars_ue->lte_ue_pdcch_vars,
+    dci_cnt = dci_decoding_procedure_emul(ue->pdcch_vars,
                                           PHY_vars_eNB_g[i][CC_id]->num_ue_spec_dci[subframe_rx&1],
                                           PHY_vars_eNB_g[i][CC_id]->num_common_dci[subframe_rx&1],
                                           PHY_vars_eNB_g[i][CC_id]->dci_alloc[subframe_rx&1],
                                           dci_alloc_rx,
                                           eNB_id);
     //    printf("DCI: dci_cnt %d\n",dci_cnt);
-    UE_id = (uint32_t)find_ue((int16_t)phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,PHY_vars_eNB_g[i][CC_id]);
+    UE_id = (uint32_t)find_ue((int16_t)ue->pdcch_vars[eNB_id]->crnti,PHY_vars_eNB_g[i][CC_id]);
 
     if (UE_id>=0) {
       //      msg("Checking PHICH for UE  %d (eNB %d)\n",UE_id,i);
-      if (is_phich_subframe(&phy_vars_ue->lte_frame_parms,subframe_rx)) {
-        harq_pid = phich_subframe_to_harq_pid(&phy_vars_ue->lte_frame_parms,frame_rx,subframe_rx);
-
-        if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status == ACTIVE) {
-          // phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->phich_ACK=1;
-          phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag =0;
-          phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status = IDLE;
-          phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] = 0;
-          phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round = 0;
+      if (is_phich_subframe(&ue->frame_parms,subframe_rx)) {
+        harq_pid = phich_subframe_to_harq_pid(&ue->frame_parms,frame_rx,subframe_rx);
+
+        if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->status == ACTIVE) {
+          // ue->ulsch[eNB_id]->harq_processes[harq_pid]->phich_ACK=1;
+          ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag =0;
+          ue->ulsch[eNB_id]->harq_processes[harq_pid]->status = IDLE;
+          ue->ulsch_Msg3_active[eNB_id] = 0;
+          ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
           LOG_D(PHY,"Msg3 inactive\n");
           /* Phich is not abstracted for the moment
           if (PHY_vars_eNB_g[i][CC_id]->ulsch_eNB[(uint32_t)UE_id]->harq_processes[harq_pid]->phich_ACK==0) { // NAK
-            if (phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) {
+            if (ue->ulsch_Msg3_active[eNB_id] == 1) {
           #ifdef DEBUG_PHY_PROC
               LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, subframe %d: Msg3 PHICH, received NAK\n",
-            phy_vars_ue->Mod_id,
+            ue->Mod_id,
             frame_rx,
             subframe_rx);
           #endif
-              get_Msg3_alloc_ret(&phy_vars_ue->lte_frame_parms,
+              get_Msg3_alloc_ret(&ue->frame_parms,
                subframe_rx,
                frame_rx,
-                   &phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id],
-               &phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id]);
+                   &ue->ulsch_Msg3_frame[eNB_id],
+               &ue->ulsch_Msg3_subframe[eNB_id]);
             }
             //      PHY_vars_eNB_g[i][CC_id]->ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
             //      PHY_vars_eNB_g[i][CC_id]->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Ndi = 0;
@@ -1990,16 +1990,16 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
           }
           else {
           #ifdef DEBUG_PHY_PROC
-            if (phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1)
+            if (ue->ulsch_Msg3_active[eNB_id] == 1)
               LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, subframe %d: Msg3 PHICH, received ACK\n",
-            phy_vars_ue->Mod_id,
+            ue->Mod_id,
             frame_rx,
             subframe_rx);
           #endif
                   PHY_vars_eNB_g[i][CC_id]->ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag =0;
                   PHY_vars_eNB_g[i][CC_id]->ulsch_eNB[UE_id]->harq_processes[harq_pid]->status = IDLE;
             // inform MAC?
-            phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] = 0;
+            ue->ulsch_Msg3_active[eNB_id] = 0;
           } //phich_ACK */
         } // harq_pid is ACTIVE
       } // This is a PHICH subframe
@@ -2009,19 +2009,19 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 #endif
 
   //#ifdef DEBUG_PHY_PROC
-  LOG_D(PHY,"[UE  %d] Frame %d, slot %d, Mode %s: DCI found %i\n",phy_vars_ue->Mod_id,frame_rx,slot_rx,mode_string[phy_vars_ue->UE_mode[eNB_id]],dci_cnt);
+  LOG_D(PHY,"[UE  %d] Frame %d, slot %d, Mode %s: DCI found %i\n",ue->Mod_id,frame_rx,slot_rx,mode_string[ue->UE_mode[eNB_id]],dci_cnt);
   //#endif
 
-  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_received += dci_cnt;
+  ue->pdcch_vars[eNB_id]->dci_received += dci_cnt;
   /*
   #ifdef DEBUG_PHY_PROC
   if (slot_rx==18)
     debug_LOG_D(PHY,"[UE  %d] Frame %d, slot %d: PDCCH: DCI errors %d, DCI received %d, DCI missed %d, DCI False Detection %d \n",
-        phy_vars_ue->Mod_id,frame_rx,slot_rx,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_received,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_missed,
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false);
+        ue->Mod_id,frame_rx,slot_rx,
+        ue->pdcch_vars[eNB_id]->dci_errors,
+        ue->pdcch_vars[eNB_id]->dci_received,
+        ue->pdcch_vars[eNB_id]->dci_missed,
+        ue->pdcch_vars[eNB_id]->dci_false);
   #endif
   */
 #ifdef EMOS
@@ -2030,46 +2030,46 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 
   /*
     #ifdef DIAG_PHY
-    //if (phy_vars_ue->UE_mode[eNB_id] == PUSCH)
+    //if (ue->UE_mode[eNB_id] == PUSCH)
     if (dci_cnt > 1) {
-    LOG_D(PHY,"[UE  %d][DIAG] frame %d, subframe %d: received %d>1 DCI!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_cnt);
-    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+    LOG_D(PHY,"[UE  %d][DIAG] frame %d, subframe %d: received %d>1 DCI!\n",ue->Mod_id,frame_rx,subframe_rx,dci_cnt);
+    ue->pdcch_vars[eNB_id]->dci_false++;
     }
     else if (dci_cnt==0) {
-    LOG_D(PHY,"[UE  %d][DIAG] frame %d, subframe %d: received %d DCI!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_cnt);
-    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_missed++;
+    LOG_D(PHY,"[UE  %d][DIAG] frame %d, subframe %d: received %d DCI!\n",ue->Mod_id,frame_rx,subframe_rx,dci_cnt);
+    ue->pdcch_vars[eNB_id]->dci_missed++;
     }
     #endif
   */
 
   // dci_cnt = 0;
-  //  ra_RNTI = (phy_vars_ue->prach_resources[eNB_id]) ? phy_vars_ue->prach_resources[eNB_id]->ra_RNTI : 0;
+  //  ra_RNTI = (ue->prach_resources[eNB_id]) ? ue->prach_resources[eNB_id]->ra_RNTI : 0;
   for (i=0; i<dci_cnt; i++) {
 
 #ifdef DEBUG_PHY_PROC
 
     if ( frame_rx % 100 == 0)   {
-      LOG_D(PHY,"frame %d, subframe %d, rnti %x: dci %d/%d\n",frame_rx,subframe_rx,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,i,dci_cnt);
-      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+      LOG_D(PHY,"frame %d, subframe %d, rnti %x: dci %d/%d\n",frame_rx,subframe_rx,ue->pdcch_vars[eNB_id]->crnti,i,dci_cnt);
+      dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
     }
 
 #endif
 
-    //if ((phy_vars_ue->UE_mode[eNB_id] != PRACH) &&
+    //if ((ue->UE_mode[eNB_id] != PRACH) &&
     //    (dci_alloc_rx[i].rnti != 0x1234) &&
 
-    if ((phy_vars_ue->UE_mode[eNB_id]>PRACH) &&
-	(dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) &&
+    if ((ue->UE_mode[eNB_id]>PRACH) &&
+	(dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
 	(dci_alloc_rx[i].format != format0)) {
       
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d][DCI][PDSCH %x] frame %d, subframe %d: format %d, num_pdcch_symbols %d, nCCE %d, total CCEs %d\n",
-            phy_vars_ue->Mod_id,dci_alloc_rx[i].rnti,
+            ue->Mod_id,dci_alloc_rx[i].rnti,
             frame_rx,subframe_rx,
             dci_alloc_rx[i].format,
-            phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
-            phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[subframe_rx],
-            get_nCCE(3,&phy_vars_ue->lte_frame_parms,get_mi(&phy_vars_ue->lte_frame_parms,0)));
+            ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+            ue->pdcch_vars[eNB_id]->nCCE[subframe_rx],
+            get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0)));
 
 
 #endif
@@ -2077,60 +2077,60 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
       
       if (!(((subframe_rx == 7) && (dci_alloc_rx[i].format == format1E_2A_M10PRB)) ||
             ((subframe_rx == 7) && (dci_alloc_rx[i].format == format1)))) {
-        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format %d!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format);
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format %d!\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format);
+        ue->pdcch_vars[eNB_id]->dci_errors++;
+        ue->pdcch_vars[eNB_id]->dci_false++;
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
       
 #endif
       
-      //      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
-      if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) &&
+      //      dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+      if ((ue->UE_mode[eNB_id] > PRACH) &&
 	  (generate_ue_dlsch_params_from_dci(frame_rx,
 					     subframe_rx,
 					     (void *)&dci_alloc_rx[i].dci_pdu,
-					     phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+					     ue->pdcch_vars[eNB_id]->crnti,
 					     dci_alloc_rx[i].format,
-					     phy_vars_ue->dlsch_ue[eNB_id],
-					     &phy_vars_ue->lte_frame_parms,
-					     phy_vars_ue->pdsch_config_dedicated,
+					     ue->dlsch[eNB_id],
+					     &ue->frame_parms,
+					     ue->pdsch_config_dedicated,
 					     SI_RNTI,
 					     0,
 					     P_RNTI)==0)) {
 
 #ifdef DIAG_PHY
 	
-        if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs != (((frame_rx%1024)%28))) {
-          LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: wrong mcs!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs);
-          dump_dci(&phy_vars_ue->lte_frame_parms,(void *)&dci_alloc_rx[i]);
+        if (ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs != (((frame_rx%1024)%28))) {
+          LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: wrong mcs!\n",ue->Mod_id,frame_rx,subframe_rx,
+                ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs);
+          dump_dci(&ue->frame_parms,(void *)&dci_alloc_rx[i]);
         }
 	
 #endif
 	
 	
-        phy_vars_ue->dlsch_received[eNB_id]++;
+        ue->dlsch_received[eNB_id]++;
 	
 #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Generated UE DLSCH C_RNTI format %d\n",phy_vars_ue->Mod_id,dci_alloc_rx[i].format);
-        dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
-        LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
+        LOG_D(PHY,"[UE  %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
+        dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+        LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",ue->Mod_id,subframe_rx,slot_rx,ue->dlsch[eNB_id][0]->active);
 #endif
 	
         // we received a CRNTI, so we're in PUSCH
-        if (phy_vars_ue->UE_mode[eNB_id] != PUSCH) {
+        if (ue->UE_mode[eNB_id] != PUSCH) {
 #ifdef DEBUG_PHY_PROC
-          LOG_D(PHY,"[UE  %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti);
+          LOG_D(PHY,"[UE  %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[eNB_id]->crnti);
 #endif
-          //dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
-          phy_vars_ue->UE_mode[eNB_id] = PUSCH;
+          //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+          ue->UE_mode[eNB_id] = PUSCH;
           //mac_xface->macphy_exit("Connected. Exiting\n");
         }
       } else {
-        LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Problem in DCI!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
-        dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+        LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx);
+        dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
       }
     }
 
@@ -2138,18 +2138,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
              ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[UE  %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
+      LOG_D(PHY,"[UE  %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
       /*
       if (((frame_rx%100) == 0) || (frame_rx < 20))
-      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+      dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
       */
 #endif
 #ifdef DIAG_PHY
 
       if ((subframe_rx != 5)) {
-        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received SI_RNTI!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received SI_RNTI!\n",ue->Mod_id,frame_rx,subframe_rx);
+        ue->pdcch_vars[eNB_id]->dci_errors++;
+        ue->pdcch_vars[eNB_id]->dci_false++;
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
@@ -2161,39 +2161,39 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
                                             (void *)&dci_alloc_rx[i].dci_pdu,
                                             SI_RNTI,
                                             dci_alloc_rx[i].format,
-                                            &phy_vars_ue->dlsch_ue_SI[eNB_id],
-                                            &phy_vars_ue->lte_frame_parms,
-                                            phy_vars_ue->pdsch_config_dedicated,
+                                            &ue->dlsch_SI[eNB_id],
+                                            &ue->frame_parms,
+                                            ue->pdsch_config_dedicated,
                                             SI_RNTI,
                                             0,
                                             P_RNTI)==0) {
 
-        phy_vars_ue->dlsch_SI_received[eNB_id]++;
+        ue->dlsch_SI_received[eNB_id]++;
  
 
-	LOG_D(PHY,"[UE  %d] Frame %d, subframe %d : Generate UE DLSCH SI_RNTI format 1%s\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
-        //dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+	LOG_D(PHY,"[UE  %d] Frame %d, subframe %d : Generate UE DLSCH SI_RNTI format 1%s\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
+        //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
 
       }
     }
 
-    else if ((phy_vars_ue->prach_resources[eNB_id]) &&
-             (dci_alloc_rx[i].rnti == phy_vars_ue->prach_resources[eNB_id]->ra_RNTI) &&
+    else if ((ue->prach_resources[eNB_id]) &&
+             (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) &&
              (dci_alloc_rx[i].format == format1A)) {
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[UE  %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
+      LOG_D(PHY,"[UE  %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
 
       //if (((frame_rx%100) == 0) || (frame_rx < 20))
-      //dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+      //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
       //mac_xface->macphy_exit("so far so good...\n");
 #endif
 #ifdef DIAG_PHY
 
       if (subframe_rx != 9) {
-        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received RA_RNTI!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received RA_RNTI!\n",ue->Mod_id,frame_rx,subframe_rx);
+        ue->pdcch_vars[eNB_id]->dci_errors++;
+        ue->pdcch_vars[eNB_id]->dci_false++;
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
@@ -2203,53 +2203,53 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
       if (generate_ue_dlsch_params_from_dci(frame_rx,
 					    subframe_rx,
                                             (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
-                                            phy_vars_ue->prach_resources[eNB_id]->ra_RNTI,
+                                            ue->prach_resources[eNB_id]->ra_RNTI,
                                             format1A,
-                                            &phy_vars_ue->dlsch_ue_ra[eNB_id],
-                                            &phy_vars_ue->lte_frame_parms,
-                                            phy_vars_ue->pdsch_config_dedicated,
+                                            &ue->dlsch_ra[eNB_id],
+                                            &ue->frame_parms,
+                                            ue->pdsch_config_dedicated,
                                             SI_RNTI,
-                                            phy_vars_ue->prach_resources[eNB_id]->ra_RNTI,
+                                            ue->prach_resources[eNB_id]->ra_RNTI,
                                             P_RNTI)==0) {
 
-        phy_vars_ue->dlsch_ra_received[eNB_id]++;
+        ue->dlsch_ra_received[eNB_id]++;
 
 #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ue_ra[eNB_id] %p\n",
-              phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],phy_vars_ue->dlsch_ue_ra[eNB_id]);
+        LOG_D(PHY,"[UE  %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n",
+              ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
 #endif
       }
-    } else if( (dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) &&
+    } else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
                (dci_alloc_rx[i].format == format0)) {
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n",
-            phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+            ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
       /*
         if (((frame_rx%100) == 0) || (frame_rx < 20))
-        dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+        dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
       */
 #endif
 #ifdef DIAG_PHY
 
       if (subframe_rx != 9) {
-        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format 0!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+        LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format 0!\n",ue->Mod_id,frame_rx,subframe_rx);
+        ue->pdcch_vars[eNB_id]->dci_errors++;
+        ue->pdcch_vars[eNB_id]->dci_false++;
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
 
 #endif
 
-      phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0;
-      //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]);
+      ue->ulsch_no_allocation_counter[eNB_id] = 0;
+      //dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
 
-      if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) &&
+      if ((ue->UE_mode[eNB_id] > PRACH) &&
 	  (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
-					     phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+					     ue->pdcch_vars[eNB_id]->crnti,
 					     subframe_rx,
 					     format0,
-					     phy_vars_ue,
+					     ue,
 					     SI_RNTI,
 					     0,
 					     P_RNTI,
@@ -2258,44 +2258,44 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 					     0)==0)) {
 
 #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx);
+        LOG_D(PHY,"[UE  %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
 #endif
 
       }
-    } else if( (dci_alloc_rx[i].rnti == phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0]) &&
+    } else if( (dci_alloc_rx[i].rnti == ue->ulsch[eNB_id]->cba_rnti[0]) &&
                (dci_alloc_rx[i].format == format0)) {
       // UE could belong to more than one CBA group
-      // phy_vars_ue->Mod_id%phy_vars_ue->ulsch_ue[eNB_id]->num_active_cba_groups]
+      // ue->Mod_id%ue->ulsch[eNB_id]->num_active_cba_groups]
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n",
-            phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+            ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
       /*
         if (((frame_rx%100) == 0) || (frame_rx < 20))
-        dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+        dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
       */
 #endif
       /*
       #ifdef DIAG_PHY
       if (subframe_rx != 8) {
         LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received CBA RNTI Format 0!\n",
-        phy_vars_ue->Mod_id,frame_rx,subframe_rx);
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-        phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+        ue->Mod_id,frame_rx,subframe_rx);
+        ue->pdcch_vars[eNB_id]->dci_errors++;
+        ue->pdcch_vars[eNB_id]->dci_false++;
               VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
       #endif
       */
 
-      phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0;
-      //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]);
+      ue->ulsch_no_allocation_counter[eNB_id] = 0;
+      //dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
 
-      if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) &&
+      if ((ue->UE_mode[eNB_id] > PRACH) &&
 	  (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
-					     phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0],
+					     ue->ulsch[eNB_id]->cba_rnti[0],
 					     subframe_rx,
 					     format0,
-					     phy_vars_ue,
+					     ue,
 					     SI_RNTI,
 					     0,
 					     P_RNTI,
@@ -2304,23 +2304,23 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 					     0)==0)) {
 
 #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx);
+        LOG_D(PHY,"[UE  %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
 #endif
-        phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
+        ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
       }
     }
 
     else {
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[UE  %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
-            phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
-            phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0],
+      LOG_D(PHY,"[UE  %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
+            ue->pdcch_vars[eNB_id]->crnti,
+            ue->ulsch[eNB_id]->cba_rnti[0],
             dci_alloc_rx[i].format);
-      //      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+      //      dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
 #endif
 #ifdef DIAG_PHY
-      phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_errors++;
-      phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->dci_false++;
+      ue->pdcch_vars[eNB_id]->dci_errors++;
+      ue->pdcch_vars[eNB_id]->dci_false++;
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
       return(-1);
 #endif
@@ -2329,13 +2329,13 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   }
 /*
   if ((frame_rx > 1000) && ((frame_rx&1)==0) && (subframe_rx == 5)) {
-    write_output("rxsig0.m","rxs0", phy_vars_ue->lte_ue_common_vars.rxdata[0],10*phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
-    write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],phy_vars_ue->lte_frame_parms.ofdm_symbol_size*2*((phy_vars_ue->lte_frame_parms.Ncp==0)?14:12),2,1);
-    write_output("H00.m","h00",&(phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((phy_vars_ue->lte_frame_parms.Ncp==0)?7:6)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size),1,1);
+    write_output("rxsig0.m","rxs0", ue->common_vars.rxdata[0],10*ue->frame_parms.samples_per_tti,1,1);
+    write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],ue->frame_parms.ofdm_symbol_size*2*((ue->frame_parms.Ncp==0)?14:12),2,1);
+    write_output("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1);
 
-    write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_ext[0],3*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1);
-    write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1);
-    write_output("pdcch_rxF_llr.m","pdcch_llr",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->llr,2400,1,4);
+    write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",ue->pdcch_vars[eNB_id]->rxdataF_ext[0],3*12*ue->frame_parms.N_RB_DL,1,1);
+    write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",ue->pdcch_vars[eNB_id]->rxdataF_comp[0],4*12*ue->frame_parms.N_RB_DL,1,1);
+    write_output("pdcch_rxF_llr.m","pdcch_llr",ue->pdcch_vars[eNB_id]->llr,2400,1,4);
     mac_xface->macphy_exit("debug exit");
   }
 */ 
@@ -2344,7 +2344,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 }
 
 
-int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
+int phy_procedures_UE_RX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
                          relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn)
 {
  
@@ -2364,20 +2364,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
   uint8_t sync_area=255;
   int pmch_mcs=-1;
   uint8_t mcch_active=0;
-  int frame_rx = phy_vars_ue->frame_rx;
-  int slot_rx = phy_vars_ue->slot_rx;
+  int frame_rx = ue->frame_rx;
+  int slot_rx = ue->slot_rx;
   int subframe_rx = slot_rx>>1;
   int subframe_prev = (subframe_rx+9)%10;
-  int CC_id = phy_vars_ue->CC_id;
+  int CC_id = ue->CC_id;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_IN);
 
 
-  start_meas(&phy_vars_ue->phy_proc_rx);
+  start_meas(&ue->phy_proc_rx);
 #ifdef DEBUG_PHY_PROC
   LOG_D(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX(%d)\n",
         (r_type == multicast_relay) ? "RN/UE" : "UE",
-        phy_vars_ue->Mod_id,frame_rx, subframe_rx, slot_rx);
+        ue->Mod_id,frame_rx, subframe_rx, slot_rx);
 #endif
 #ifdef EMOS
 
@@ -2390,13 +2390,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
     LOG_D(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",
           frame_rx,
           openair_daq_vars.use_ia_receiver,
-          phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs,
-          phy_vars_ue->bitrate[eNB_id]);
+          ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs,
+          ue->bitrate[eNB_id]);
   }
 
 #endif
 
-  if (phy_vars_ue->lte_frame_parms.Ncp == 0) {  // normal prefix
+  if (ue->frame_parms.Ncp == 0) {  // normal prefix
     pilot1 = 4;
     pilot2 = 7;
     pilot3 = 11;
@@ -2407,14 +2407,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
   }
 
   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-  if (subframe_select(&phy_vars_ue->lte_frame_parms,subframe_rx) == SF_S) {
+  if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) {
     if ((slot_rx%2)==0)
       n_symb = 5;//3;
     else
       n_symb = 0;
   } else {
     /*
-    if (is_pmch_subframe(frame_rx,subframe_rx,&phy_vars_ue->lte_frame_parms)) {
+    if (is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
       if ((slot_rx%2)==0) {
     n_symb=2;
     pmch_flag=1;
@@ -2423,7 +2423,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
     n_symb=0;
     }
     else*/
-    n_symb = phy_vars_ue->lte_frame_parms.symbols_per_tti/2;
+    n_symb = ue->frame_parms.symbols_per_tti/2;
   }
 
   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -2434,62 +2434,62 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
   for (l=0; l<n_symb; l++) {
     if (abstraction_flag == 0) {
-      start_meas(&phy_vars_ue->ofdm_demod_stats);
+      start_meas(&ue->ofdm_demod_stats);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
 
-      slot_fep(phy_vars_ue,
+      slot_fep(ue,
                l,
                slot_rx,
-               phy_vars_ue->rx_offset,
+               ue->rx_offset,
                0,
 	       0);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-      stop_meas(&phy_vars_ue->ofdm_demod_stats);
+      stop_meas(&ue->ofdm_demod_stats);
     }
 
-    //if (subframe_select(&phy_vars_ue->lte_frame_parms,subframe_rx) == SF_DL)
-    lte_ue_measurement_procedures(l,phy_vars_ue,eNB_id,abstraction_flag,mode);
+    //if (subframe_select(&ue->frame_parms,subframe_rx) == SF_DL)
+    ue_measurement_procedures(l,ue,eNB_id,abstraction_flag,mode);
 
 
-    if ((slot_rx==1) && (l==4-phy_vars_ue->lte_frame_parms.Ncp)) {
+    if ((slot_rx==1) && (l==4-ue->frame_parms.Ncp)) {
 
       /*
-      phy_vars_ue->ulsch_no_allocation_counter[eNB_id]++;
+      ue->ulsch_no_allocation_counter[eNB_id]++;
 
-      if (phy_vars_ue->ulsch_no_allocation_counter[eNB_id] == 10) {
+      if (ue->ulsch_no_allocation_counter[eNB_id] == 10) {
       #ifdef DEBUG_PHY_PROC
-      msg("[UE  %d] no_allocation : setting mode to PRACH\n",phy_vars_ue->Mod_id);
+      msg("[UE  %d] no_allocation : setting mode to PRACH\n",ue->Mod_id);
       #endif
-      phy_vars_ue->UE_mode[eNB_id] = PRACH;
-      phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti = 0x1234;
+      ue->UE_mode[eNB_id] = PRACH;
+      ue->pdcch_vars[eNB_id]->crnti = 0x1234;
       }
       */
 
-      lte_ue_pbch_procedures(eNB_id,phy_vars_ue,abstraction_flag);
+      ue_pbch_procedures(eNB_id,ue,abstraction_flag);
 
       /*
-      if (phy_vars_ue->UE_mode[eNB_id] == RA_RESPONSE) {
-        phy_vars_ue->Msg3_timer[eNB_id]--;
-        msg("[UE RAR] frame %d: Msg3_timer %d\n",frame_rx,phy_vars_ue->Msg3_timer);
+      if (ue->UE_mode[eNB_id] == RA_RESPONSE) {
+        ue->Msg3_timer[eNB_id]--;
+        msg("[UE RAR] frame %d: Msg3_timer %d\n",frame_rx,ue->Msg3_timer);
 
-        if (phy_vars_ue->Msg3_timer[eNB_id] == 0) {
-          LOG_D(PHY,"[UE  %d] Frame %d: Msg3_timer = 0 : setting mode to PRACH\n",phy_vars_ue->Mod_id,frame_rx);
+        if (ue->Msg3_timer[eNB_id] == 0) {
+          LOG_D(PHY,"[UE  %d] Frame %d: Msg3_timer = 0 : setting mode to PRACH\n",ue->Mod_id,frame_rx);
       // I guess here we also need to tell the RRC
-          phy_vars_ue->UE_mode[eNB_id] = PRACH;
-      phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti = 0x1234;
+          ue->UE_mode[eNB_id] = PRACH;
+      ue->pdcch_vars[eNB_id]->crnti = 0x1234;
       }
       }
       */
     }
 
 #ifdef DLSCH_THREAD
-    if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1)  {
+    if (ue->dlsch[eNB_id][0]->active == 1)  {
       // activate thread since Chest is now done for slot before slot_rx
       if (l==0) {
-        LOG_I(PHY,"frame %d, slot_rx %d: Calling rx_pdsch_thread for harq_pid %d\n",frame_rx,slot_rx, phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid);
+        LOG_I(PHY,"frame %d, slot_rx %d: Calling rx_pdsch_thread for harq_pid %d\n",frame_rx,slot_rx, ue->dlsch[eNB_id][0]->current_harq_pid);
 
         if (pthread_mutex_lock (&rx_pdsch_mutex) != 0) {               // Signal MAC_PHY Scheduler
-          LOG_E(PHY,"[UE  %d] ERROR pthread_mutex_lock\n",phy_vars_ue->Mod_id);     // lock before accessing shared resource
+          LOG_E(PHY,"[UE  %d] ERROR pthread_mutex_lock\n",ue->Mod_id);     // lock before accessing shared resource
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
         } else {
           rx_pdsch_instance_cnt++;
@@ -2498,18 +2498,18 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
           if (rx_pdsch_instance_cnt == 0) {
             if (pthread_cond_signal(&rx_pdsch_cond) != 0) {
-              LOG_E(PHY,"[UE  %d] ERROR pthread_cond_signal for rx_pdsch_cond\n",phy_vars_ue->Mod_id);
+              LOG_E(PHY,"[UE  %d] ERROR pthread_cond_signal for rx_pdsch_cond\n",ue->Mod_id);
               VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
             }
           } else {
-            LOG_W(PHY,"[UE  %d] Frame=%d, Slot=%d, RX_PDSCH thread for rx_pdsch_thread busy!!!\n",phy_vars_ue->Mod_id,frame_rx,slot_rx);
+            LOG_W(PHY,"[UE  %d] Frame=%d, Slot=%d, RX_PDSCH thread for rx_pdsch_thread busy!!!\n",ue->Mod_id,frame_rx,slot_rx);
             VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
           }
         }
 
         // trigger DLSCH decoding thread
         if ((slot_rx%2)==1) // odd slots
-          phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0;
+          ue->dlsch[eNB_id][0]->active = 0;
       }
     }
 
@@ -2518,19 +2518,19 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
     // process last DLSCH symbols + invoke decoding
     if (((slot_rx%2)==0) && (l==0)) {
       // Regular PDSCH
-      LOG_D(PHY,"[UE %d] dlsch->active in subframe %d => %d\n",phy_vars_ue->Mod_id,subframe_prev,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
+      LOG_D(PHY,"[UE %d] dlsch->active in subframe %d => %d\n",ue->Mod_id,subframe_prev,ue->dlsch[eNB_id][0]->active);
 
-      if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) {
+      if (ue->dlsch[eNB_id][0]->active == 1) {
 #ifndef DLSCH_THREAD //USER_MODE
-        harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
-        LOG_D(PHY,"[UE %d] PDSCH active in subframe %d, harq_pid %d\n",phy_vars_ue->Mod_id,subframe_prev,harq_pid);
+        harq_pid = ue->dlsch[eNB_id][0]->current_harq_pid;
+        LOG_D(PHY,"[UE %d] PDSCH active in subframe %d, harq_pid %d\n",ue->Mod_id,subframe_prev,harq_pid);
 
-        if ((phy_vars_ue->transmission_mode[eNB_id] == 5) &&
-            (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
-            (phy_vars_ue->use_ia_receiver ==1)) {
+        if ((ue->transmission_mode[eNB_id] == 5) &&
+            (ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
+            (ue->use_ia_receiver ==1)) {
           dual_stream_UE = 1;
-          eNB_id_i = phy_vars_ue->n_connected_eNB;
-          i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
+          eNB_id_i = ue->n_connected_eNB;
+          i_mod = ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm;
 
           if (frame_rx%100==0) {
             LOG_I(PHY,"using IA receiver\n");
@@ -2544,11 +2544,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
         // process symbols 10,11,12 and trigger DLSCH decoding
         if (abstraction_flag == 0) {
 
-          start_meas(&phy_vars_ue->dlsch_llr_stats);
+          start_meas(&ue->dlsch_llr_stats);
 
-          for (m=pilot3; m<phy_vars_ue->lte_frame_parms.symbols_per_tti; m++) {
+          for (m=pilot3; m<ue->frame_parms.symbols_per_tti; m++) {
 
-            rx_pdsch(phy_vars_ue,
+            rx_pdsch(ue,
                      PDSCH,
                      eNB_id,
                      eNB_id_i,
@@ -2557,157 +2557,157 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      0,                    // first_symbol_flag
                      dual_stream_UE,
                      i_mod,
-                     phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid);
+                     ue->dlsch[eNB_id][0]->current_harq_pid);
           }
 
-          stop_meas(&phy_vars_ue->dlsch_llr_stats);
+          stop_meas(&ue->dlsch_llr_stats);
         }
 
-        phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0;
+        ue->dlsch[eNB_id][0]->active = 0;
 
 	//#ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d Scheduling DLSCH decoding\n",
-              phy_vars_ue->Mod_id,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+              ue->Mod_id,
+              ue->dlsch[eNB_id][0]->rnti,
               harq_pid,
               (subframe_prev == 9) ? (frame_rx-1) : frame_rx,subframe_prev);
 	//#endif
 
-        if (phy_vars_ue->dlsch_ue[eNB_id][0]) {
+        if (ue->dlsch[eNB_id][0]) {
           if (abstraction_flag == 0) {
-            phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&phy_vars_ue->lte_frame_parms,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm,
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
-                phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+            ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
+                ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+                ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+                ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm,
+                ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
+                ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
                 frame_rx,subframe_prev);
-            start_meas(&phy_vars_ue->dlsch_unscrambling_stats);
-            dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,
+            start_meas(&ue->dlsch_unscrambling_stats);
+            dlsch_unscrambling(&ue->frame_parms,
                                0,
-                               phy_vars_ue->dlsch_ue[0][0],
-                               phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G,
-                               phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0],
+                               ue->dlsch[0][0],
+                               ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->G,
+                               ue->pdsch_vars[eNB_id]->llr[0],
                                0,
                                subframe_prev<<1);
-            stop_meas(&phy_vars_ue->dlsch_unscrambling_stats);
-
-            start_meas(&phy_vars_ue->dlsch_decoding_stats);
-            ret = dlsch_decoding(phy_vars_ue,
-                                 phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0],
-                                 &phy_vars_ue->lte_frame_parms,
-                                 phy_vars_ue->dlsch_ue[eNB_id][0],
-                                 phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid],
+            stop_meas(&ue->dlsch_unscrambling_stats);
+
+            start_meas(&ue->dlsch_decoding_stats);
+            ret = dlsch_decoding(ue,
+                                 ue->pdsch_vars[eNB_id]->llr[0],
+                                 &ue->frame_parms,
+                                 ue->dlsch[eNB_id][0],
+                                 ue->dlsch[eNB_id][0]->harq_processes[harq_pid],
                                  subframe_prev,
                                  harq_pid,
-                                 1,phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb>10 ? 1 : 0);
-            stop_meas(&phy_vars_ue->dlsch_decoding_stats);
+                                 1,ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb>10 ? 1 : 0);
+            stop_meas(&ue->dlsch_decoding_stats);
           }
 
           else {
             LOG_D(PHY,"Calling dlsch_decoding_emul ...\n");
 #ifdef PHY_ABSTRACTION
-            ret = dlsch_decoding_emul(phy_vars_ue,
+            ret = dlsch_decoding_emul(ue,
                                       subframe_prev,
                                       2,
                                       eNB_id);
 #endif
           }
 
-          if (ret == (1+phy_vars_ue->dlsch_ue[eNB_id][0]->max_turbo_iterations)) {
-            phy_vars_ue->dlsch_errors[eNB_id]++;
+          if (ret == (1+ue->dlsch[eNB_id][0]->max_turbo_iterations)) {
+            ue->dlsch_errors[eNB_id]++;
 
 #ifdef DEBUG_PHY_PROC
             LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d DLSCH in error (rv %d,mcs %d,TBS %d)\n",
-                  phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                  ue->Mod_id,ue->dlsch[eNB_id][0]->rnti,
                   harq_pid,frame_rx,subframe_prev,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rvidx,
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs,
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->TBS);
 /*
             if (abstraction_flag ==0 )
-              dump_dlsch(phy_vars_ue,eNB_id,subframe_prev,harq_pid);
+              dump_dlsch(ue,eNB_id,subframe_prev,harq_pid);
             mac_xface->macphy_exit("");
 */
 #endif
           } else {
             LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d (slot_rx %d): Received DLSCH (rv %d,mcs %d,TBS %d)\n",
-                  phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                  ue->Mod_id,ue->dlsch[eNB_id][0]->rnti,
                   harq_pid,frame_rx,subframe_prev,slot_rx,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
-                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rvidx,
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs,
+                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->TBS);
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_DLSCH
             int j;
-            LOG_D(PHY,"dlsch harq_pid %d (rx): \n",phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid);
+            LOG_D(PHY,"dlsch harq_pid %d (rx): \n",ue->dlsch[eNB_id][0]->current_harq_pid);
 
-            for (j=0; j<phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS>>3; j++)
-              LOG_T(PHY,"%x.",phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->b[j]);
+            for (j=0; j<ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->TBS>>3; j++)
+              LOG_T(PHY,"%x.",ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->b[j]);
 
             LOG_T(PHY,"\n");
 #endif
 #endif
-	    if (phy_vars_ue->mac_enabled == 1) {
-	      mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
+	    if (ue->mac_enabled == 1) {
+	      mac_xface->ue_send_sdu(ue->Mod_id,
 				     CC_id,
 				     frame_rx,
-				     phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->b,
-				     phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS>>3,
+				     ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->b,
+				     ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->TBS>>3,
 				     eNB_id);
 	    }
-            phy_vars_ue->total_TBS[eNB_id] =  phy_vars_ue->total_TBS[eNB_id] +
-                                              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS;
-            phy_vars_ue->total_received_bits[eNB_id] = phy_vars_ue->total_TBS[eNB_id] +
-                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS;
+            ue->total_TBS[eNB_id] =  ue->total_TBS[eNB_id] +
+                                              ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->TBS;
+            ue->total_received_bits[eNB_id] = ue->total_TBS[eNB_id] +
+                ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->TBS;
           }
         }
 
 
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
-              phy_vars_ue->Mod_id,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,harq_pid,
+              ue->Mod_id,
+              ue->dlsch[eNB_id][0]->rnti,harq_pid,
               frame_rx,subframe_prev,ret,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
-              phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
+              ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs,
+              ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rvidx,
+              ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->TBS);
 
         if (frame_rx%100==0) {
           LOG_D(PHY,"[UE  %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n",
-                phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
+                ue->Mod_id,ue->dlsch[eNB_id][0]->rnti,
                 frame_rx,subframe_prev,
-                phy_vars_ue->dlsch_errors[eNB_id],
-                phy_vars_ue->dlsch_received[eNB_id],
-                phy_vars_ue->dlsch_fer[eNB_id],
-                phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB_id]);
+                ue->dlsch_errors[eNB_id],
+                ue->dlsch_received[eNB_id],
+                ue->dlsch_fer[eNB_id],
+                ue->measurements.wideband_cqi_tot[eNB_id]);
         }
 
 #endif
 #endif //DLSCH_THREAD
       } else {
         //  printf("PDSCH inactive in subframe %d\n",subframe_rx-1);
-        phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[subframe_prev].send_harq_status = 0;
+        ue->dlsch[eNB_id][0]->harq_ack[subframe_prev].send_harq_status = 0;
       }
 
       // SI_DLSCH
-      if (phy_vars_ue->dlsch_ue_SI[eNB_id]->active == 1) {
+      if (ue->dlsch_SI[eNB_id]->active == 1) {
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"SI is active in subframe %d\n",subframe_prev);
 #endif
 
         // process symbols 10,11,12 (13) of last SF and trigger DLSCH decoding
         if (abstraction_flag==0) {
-          start_meas(&phy_vars_ue->dlsch_llr_stats);
+          start_meas(&ue->dlsch_llr_stats);
 
-          for (m=pilot3; m<phy_vars_ue->lte_frame_parms.symbols_per_tti; m++) {
+          for (m=pilot3; m<ue->frame_parms.symbols_per_tti; m++) {
 #ifdef DEBUG_PHY_PROC
 
             LOG_D(PHY,"[UE  %d] Frame %d, slot %d: DLSCH (SI) demod between pilot 3 and 4 (2nd slot), m %d\n",
-                  phy_vars_ue->Mod_id,frame_rx,slot_rx,m);
+                  ue->Mod_id,frame_rx,slot_rx,m);
 
 #endif
-            rx_pdsch(phy_vars_ue,
+            rx_pdsch(ue,
                      SI_PDSCH,
                      eNB_id,
                      eNB_id+1,
@@ -2715,64 +2715,64 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      m,
                      0,
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_SI[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_SI[eNB_id]->current_harq_pid);
           }
 
-          stop_meas(&phy_vars_ue->dlsch_llr_stats);
+          stop_meas(&ue->dlsch_llr_stats);
         }
 
-        //  write_output("dlsch_ra_llr.m","llr",lte_ue_pdsch_vars_ra[eNB_id]->llr[0],40,1,0);
+        //  write_output("dlsch_ra_llr.m","llr",pdsch_vars_ra[eNB_id]->llr[0],40,1,0);
 
-        phy_vars_ue->dlsch_ue_SI[eNB_id]->active = 0;
+        ue->dlsch_SI[eNB_id]->active = 0;
 
-        if (frame_rx < phy_vars_ue->dlsch_SI_errors[eNB_id])
-          phy_vars_ue->dlsch_SI_errors[eNB_id]=0;
+        if (frame_rx < ue->dlsch_SI_errors[eNB_id])
+          ue->dlsch_SI_errors[eNB_id]=0;
 
-        if (phy_vars_ue->dlsch_ue_SI[eNB_id]) {
+        if (ue->dlsch_SI[eNB_id]) {
 
           if (abstraction_flag==0) {
 
-            //          dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
-            phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G =
-              get_G(&phy_vars_ue->lte_frame_parms,
-                    phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
-                    phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
+            //          dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+            ue->dlsch_SI[eNB_id]->harq_processes[0]->G =
+              get_G(&ue->frame_parms,
+                    ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+                    ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
                     2,
 		    1,
-                    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+                    ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
                     frame_rx,subframe_prev);
 
 #ifdef DEBUG_PHY_PROC
-            LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
-                  phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols);
+            LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->G,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS,
+                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols);
 #endif
 
 
-            dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,
+            dlsch_unscrambling(&ue->frame_parms,
                                0,
-                               phy_vars_ue->dlsch_ue_SI[eNB_id],
-                               phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G,
-                               phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0],
+                               ue->dlsch_SI[eNB_id],
+                               ue->dlsch_SI[eNB_id]->harq_processes[0]->G,
+                               ue->pdsch_vars_SI[eNB_id]->llr[0],
                                0,
                                subframe_prev<<1);
 
-            ret = dlsch_decoding(phy_vars_ue,
-                                 phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0],
-                                 &phy_vars_ue->lte_frame_parms,
-                                 phy_vars_ue->dlsch_ue_SI[eNB_id],
-                                 phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0],
+            ret = dlsch_decoding(ue,
+                                 ue->pdsch_vars_SI[eNB_id]->llr[0],
+                                 &ue->frame_parms,
+                                 ue->dlsch_SI[eNB_id],
+                                 ue->dlsch_SI[eNB_id]->harq_processes[0],
                                  subframe_prev,
-                                 phy_vars_ue->dlsch_ue_SI[eNB_id]->current_harq_pid,
+                                 ue->dlsch_SI[eNB_id]->current_harq_pid,
                                  0,0);
 
 #ifdef DEBUG_PHY_PROC
 
             for (int i=0; i<11; i++)
-              LOG_D(PHY,"dlsch_output_buffer[%d]=%x\n",i,phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->c[0][i]);
+              LOG_D(PHY,"dlsch_output_buffer[%d]=%x\n",i,ue->dlsch_SI[eNB_id]->harq_processes[0]->c[0][i]);
 
 #endif
 
@@ -2781,7 +2781,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 #ifdef PHY_ABSTRACTION
           else {
             LOG_D(PHY,"Calling dlsch_decoding_emul ...\n");
-            ret = dlsch_decoding_emul(phy_vars_ue,
+            ret = dlsch_decoding_emul(ue,
                                       subframe_prev,
                                       0,
                                       eNB_id);
@@ -2789,25 +2789,25 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
 #endif
 
-          if (ret == (1+phy_vars_ue->dlsch_ue_SI[eNB_id]->max_turbo_iterations)) {
-            phy_vars_ue->dlsch_SI_errors[eNB_id]++;
+          if (ret == (1+ue->dlsch_SI[eNB_id]->max_turbo_iterations)) {
+            ue->dlsch_SI_errors[eNB_id]++;
 #ifdef DEBUG_PHY_PROC
             LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
-		  phy_vars_ue->Mod_id,
+		  ue->Mod_id,
 		  frame_rx,
 		  subframe_prev,
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1],
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2],
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]);
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rvidx,
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1],
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2],
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]);
 #endif
  
-	    //	      dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev);
+	    //	      dump_dlsch_SI(ue,eNB_id,subframe_prev);
             VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-            stop_meas(&phy_vars_ue->phy_proc_rx);
+            stop_meas(&ue->phy_proc_rx);
 	    return(-1);
           } else {
 
@@ -2815,29 +2815,29 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 #ifdef DEBUG_PHY_PROC
             //if ((frame_rx % 100) == 0)
             LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
-                  phy_vars_ue->Mod_id,frame_rx,subframe_prev,
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1],
-		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2],
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]);
+                  ue->Mod_id,frame_rx,subframe_prev,
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rvidx,
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0],
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1],
+		  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2],
+                  ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]);
 #endif
 
-	    if (phy_vars_ue->mac_enabled == 1) {
+	    if (ue->mac_enabled == 1) {
 	      /*
 		printf("\n\n");
-		for (i=0;i<phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3;i++)
-		printf("%02x ",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b[i]);
+		for (i=0;i<ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3;i++)
+		printf("%02x ",ue->dlsch_SI[eNB_id]->harq_processes[0]->b[i]);
 		printf("\n");
 	      */
-	      mac_xface->ue_decode_si(phy_vars_ue->Mod_id,
+	      mac_xface->ue_decode_si(ue->Mod_id,
 				      CC_id,
 				      frame_rx,
 				      eNB_id,
-				      phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b,
-				      phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3);
+				      ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+				      ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
 	    }
           }
         }
@@ -2845,23 +2845,23 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
         /*
         #ifdef DEBUG_PHY_PROC
         debug_LOG_D(PHY,"[UE  %d] Frame %d, slot %d: dlsch_decoding (SI) ret %d (%d errors)\n",
-            phy_vars_ue->Mod_id,frame_rx,slot_rx,ret,phy_vars_ue->dlsch_SI_errors[eNB_id]);
+            ue->Mod_id,frame_rx,slot_rx,ret,ue->dlsch_SI_errors[eNB_id]);
         #endif
         */
       }
 
 
-      if (phy_vars_ue->dlsch_ue_ra[eNB_id]->active == 1) {
+      if (ue->dlsch_ra[eNB_id]->active == 1) {
 #ifdef DEBUG_PHY_PROC
-        LOG_D(PHY,"[UE  %d] Frame %d, slot %d: DLSCH (RA) demod symbols 10,11,12\n",phy_vars_ue->Mod_id,frame_rx,slot_rx);
+        LOG_D(PHY,"[UE  %d] Frame %d, slot %d: DLSCH (RA) demod symbols 10,11,12\n",ue->Mod_id,frame_rx,slot_rx);
 #endif
 
         // process symbols 10,11,12 and trigger DLSCH decoding
         if (abstraction_flag==0) {
-          start_meas(&phy_vars_ue->dlsch_llr_stats);
+          start_meas(&ue->dlsch_llr_stats);
 
-          for (m=pilot3; m<phy_vars_ue->lte_frame_parms.symbols_per_tti; m++)
-            rx_pdsch(phy_vars_ue,
+          for (m=pilot3; m<ue->frame_parms.symbols_per_tti; m++)
+            rx_pdsch(ue,
                      RA_PDSCH,
                      eNB_id,
                      eNB_id+1,
@@ -2869,65 +2869,65 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      m, // symbol
                      0, // first_symbol_flag
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_ra[eNB_id]->current_harq_pid);
         }
 
-        stop_meas(&phy_vars_ue->dlsch_llr_stats);
+        stop_meas(&ue->dlsch_llr_stats);
 
-        phy_vars_ue->dlsch_ue_ra[eNB_id]->active = 0;
+        ue->dlsch_ra[eNB_id]->active = 0;
 
-        if (frame_rx < phy_vars_ue->dlsch_ra_errors[eNB_id])
-          phy_vars_ue->dlsch_ra_errors[eNB_id]=0;
+        if (frame_rx < ue->dlsch_ra_errors[eNB_id])
+          ue->dlsch_ra_errors[eNB_id]=0;
 
-        if (phy_vars_ue->prach_resources[eNB_id]!=NULL)
-          phy_vars_ue->dlsch_ue_ra[eNB_id]->rnti = phy_vars_ue->prach_resources[eNB_id]->ra_RNTI;
+        if (ue->prach_resources[eNB_id]!=NULL)
+          ue->dlsch_ra[eNB_id]->rnti = ue->prach_resources[eNB_id]->ra_RNTI;
         else {
-          LOG_E(PHY,"[UE %d] Frame %d, subframe %d: FATAL, prach_resources is NULL\n",phy_vars_ue->Mod_id,frame_rx,subframe_prev);
+          LOG_E(PHY,"[UE %d] Frame %d, subframe %d: FATAL, prach_resources is NULL\n",ue->Mod_id,frame_rx,subframe_prev);
           mac_xface->macphy_exit("prach_resources is NULL");
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-          stop_meas(&phy_vars_ue->phy_proc_rx);
+          stop_meas(&ue->phy_proc_rx);
           return 0;
         }
 
         if (abstraction_flag==0) {
-          phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
-									 phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
-									 phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even,
+          ue->dlsch_ra[eNB_id]->harq_processes[0]->G = get_G(&ue->frame_parms,
+									 ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+									 ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even,
 									 2,
 									 1,
-									 phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+									 ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
               frame_rx,
               subframe_prev);
 
 #ifdef DEBUG_PHY_PROC
           LOG_D(PHY,"[UE] decoding RA (subframe %d): G %d,rnti %x\n" ,subframe_prev,
-                phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G,
-                phy_vars_ue->dlsch_ue_ra[eNB_id]->rnti);
+                ue->dlsch_ra[eNB_id]->harq_processes[0]->G,
+                ue->dlsch_ra[eNB_id]->rnti);
 #endif
 
-          dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,
+          dlsch_unscrambling(&ue->frame_parms,
                              0,
-                             phy_vars_ue->dlsch_ue_ra[eNB_id],
-                             phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G,
-                             phy_vars_ue->lte_ue_pdsch_vars_ra[eNB_id]->llr[0],
+                             ue->dlsch_ra[eNB_id],
+                             ue->dlsch_ra[eNB_id]->harq_processes[0]->G,
+                             ue->pdsch_vars_ra[eNB_id]->llr[0],
                              0,
                              subframe_prev<<1);
 
-          ret = dlsch_decoding(phy_vars_ue,
-                               phy_vars_ue->lte_ue_pdsch_vars_ra[eNB_id]->llr[0],
-                               &phy_vars_ue->lte_frame_parms,
-                               phy_vars_ue->dlsch_ue_ra[eNB_id],
-                               phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0],
+          ret = dlsch_decoding(ue,
+                               ue->pdsch_vars_ra[eNB_id]->llr[0],
+                               &ue->frame_parms,
+                               ue->dlsch_ra[eNB_id],
+                               ue->dlsch_ra[eNB_id]->harq_processes[0],
                                subframe_prev,  // subframe
-			       phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid,
+			       ue->dlsch_ra[eNB_id]->current_harq_pid,
                                0,0);
         }
 
 #ifdef PHY_ABSTRACTION
         else {
           LOG_D(PHY,"Calling dlsch_decoding_emul ...\n");
-          ret = dlsch_decoding_emul(phy_vars_ue,
+          ret = dlsch_decoding_emul(ue,
                                     subframe_prev,
                                     1,
                                     eNB_id);
@@ -2935,98 +2935,98 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
 #endif
 
-        if (ret == (1+phy_vars_ue->dlsch_ue_ra[eNB_id]->max_turbo_iterations)) {
-          phy_vars_ue->dlsch_ra_errors[eNB_id]++;
-          LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received RA in error\n",phy_vars_ue->Mod_id,frame_rx,subframe_prev);
+        if (ret == (1+ue->dlsch_ra[eNB_id]->max_turbo_iterations)) {
+          ue->dlsch_ra_errors[eNB_id]++;
+          LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received RA in error\n",ue->Mod_id,frame_rx,subframe_prev);
 
-	  //          dump_dlsch_ra(phy_vars_ue,eNB_id,subframe_prev); exit(-1);
+	  //          dump_dlsch_ra(ue,eNB_id,subframe_prev); exit(-1);
 
           //    oai_exit=1;
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-          stop_meas(&phy_vars_ue->phy_proc_rx);
+          stop_meas(&ue->phy_proc_rx);
           return(-1);
 
         } else {
 #ifdef DEBUG_PHY_PROC
           LOG_D(PHY,"[UE  %d][RAPROC] Frame %d subframe %d Received RAR  mode %d\n",
-                phy_vars_ue->Mod_id,
+                ue->Mod_id,
                 frame_rx,
-                subframe_prev, phy_vars_ue->UE_mode[eNB_id]);
+                subframe_prev, ue->UE_mode[eNB_id]);
 #endif
 
-	  if (phy_vars_ue->mac_enabled == 1) {
-          if ((phy_vars_ue->UE_mode[eNB_id] != PUSCH) && (phy_vars_ue->prach_resources[eNB_id]->Msg3!=NULL)) {
+	  if (ue->mac_enabled == 1) {
+          if ((ue->UE_mode[eNB_id] != PUSCH) && (ue->prach_resources[eNB_id]->Msg3!=NULL)) {
             LOG_D(PHY,"[UE  %d][RAPROC] Frame %d subframe %d Invoking MAC for RAR (current preamble %d)\n",
-                  phy_vars_ue->Mod_id,frame_rx-((subframe_prev==9) ? 1 : 0),
+                  ue->Mod_id,frame_rx-((subframe_prev==9) ? 1 : 0),
                   subframe_prev,
-                  phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex);
+                  ue->prach_resources[eNB_id]->ra_PreambleIndex);
 
-            timing_advance = mac_xface->ue_process_rar(phy_vars_ue->Mod_id,
+            timing_advance = mac_xface->ue_process_rar(ue->Mod_id,
                              CC_id,
                              frame_rx-((subframe_prev==0) ? 1 : 0),
-                             phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b,
-                             &phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
-                             phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex);
+                             ue->dlsch_ra[eNB_id]->harq_processes[0]->b,
+                             &ue->pdcch_vars[eNB_id]->crnti,
+                             ue->prach_resources[eNB_id]->ra_PreambleIndex);
 
 
             if (timing_advance!=0xffff) {
 
               LOG_D(PHY,"[UE  %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
-                    phy_vars_ue->Mod_id,
+                    ue->Mod_id,
                     frame_rx-((subframe_prev==9) ? 1 : 0),
                     subframe_prev,
-                    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+                    ue->pdcch_vars[eNB_id]->crnti,
                     timing_advance);
 
               //timing_advance = 0;
-              process_timing_advance_rar(phy_vars_ue,timing_advance);
+              process_timing_advance_rar(ue,timing_advance);
 
               if (mode!=debug_prach) {
-                phy_vars_ue->ulsch_ue_Msg3_active[eNB_id]=1;
-                get_Msg3_alloc(&phy_vars_ue->lte_frame_parms,
+                ue->ulsch_Msg3_active[eNB_id]=1;
+                get_Msg3_alloc(&ue->frame_parms,
                                subframe_prev,
                                frame_rx-((subframe_prev==9) ? 1 : 0),
-                               &phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id],
-                               &phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id]);
+                               &ue->ulsch_Msg3_frame[eNB_id],
+                               &ue->ulsch_Msg3_subframe[eNB_id]);
 
                 LOG_D(PHY,"[UE  %d][RAPROC] Got Msg3_alloc Frame %d subframe %d: Msg3_frame %d, Msg3_subframe %d\n",
-                      phy_vars_ue->Mod_id,
+                      ue->Mod_id,
                       frame_rx-((subframe_prev==9) ? 1 : 0),
                       subframe_prev,
-                      phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id],
-                      phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id]);
-                harq_pid = subframe2harq_pid(&phy_vars_ue->lte_frame_parms,
-                                             phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id],
-                                             phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id]);
-                phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round = 0;
-
-                phy_vars_ue->UE_mode[eNB_id] = RA_RESPONSE;
-                //      phy_vars_ue->Msg3_timer[eNB_id] = 10;
-                phy_vars_ue->ulsch_ue[eNB_id]->power_offset = 6;
-                phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0;
+                      ue->ulsch_Msg3_frame[eNB_id],
+                      ue->ulsch_Msg3_subframe[eNB_id]);
+                harq_pid = subframe2harq_pid(&ue->frame_parms,
+                                             ue->ulsch_Msg3_frame[eNB_id],
+                                             ue->ulsch_Msg3_subframe[eNB_id]);
+                ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
+
+                ue->UE_mode[eNB_id] = RA_RESPONSE;
+                //      ue->Msg3_timer[eNB_id] = 10;
+                ue->ulsch[eNB_id]->power_offset = 6;
+                ue->ulsch_no_allocation_counter[eNB_id] = 0;
               }
             } else { // PRACH preamble doesn't match RAR
               LOG_W(PHY,"[UE  %d][RAPROC] Received RAR preamble (%d) doesn't match !!!\n",
-                    phy_vars_ue->Mod_id,
-                    phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex);
+                    ue->Mod_id,
+                    ue->prach_resources[eNB_id]->ra_PreambleIndex);
             }
           } // mode != PUSCH
 	  }
 	    else {
-	      rar = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b+1;
+	      rar = ue->dlsch_ra[eNB_id]->harq_processes[0]->b+1;
 	      timing_advance = ((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
-	      //timing_advance = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b[0];
-	      process_timing_advance_rar(phy_vars_ue,timing_advance);
+	      //timing_advance = ue->dlsch_ra[eNB_id]->harq_processes[0]->b[0];
+	      process_timing_advance_rar(ue,timing_advance);
 	    }
         } //ret <= MAX_ITERATIONS
 
         /*
         #ifdef DEBUG_PHY_PROC
         debug_LOG_D(PHY,"[UE  %d] Frame %d, slot %d: dlsch_decoding (RA) ret %d (%d errors)\n",
-            phy_vars_ue->Mod_id,frame_rx,slot_rx,ret,phy_vars_ue->dlsch_ra_errors[eNB_id]);
+            ue->Mod_id,frame_rx,slot_rx,ret,ue->dlsch_ra_errors[eNB_id]);
         #endif
         */
-      } // dlsch_ue_ra[eNB_id]->active == 1
+      } // dlsch_ra[eNB_id]->active == 1
 
     }
 
@@ -3035,13 +3035,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
         ((pmch_flag==1)&&(l==1)))  {
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[UE  %d] Frame %d, slot %d: Calling pdcch procedures (eNB %d)\n",phy_vars_ue->Mod_id,frame_rx,slot_rx,eNB_id);
+      LOG_D(PHY,"[UE  %d] Frame %d, slot %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,slot_rx,eNB_id);
 #endif
 
       //      rt_printk("[PDCCH] Frame %d, slot %d, start %llu\n",frame_rx,slot_rx,rt_get_time_ns());
-      if (lte_ue_pdcch_procedures(eNB_id,phy_vars_ue,abstraction_flag) == -1) {
+      if (ue_pdcch_procedures(eNB_id,ue,abstraction_flag) == -1) {
 #ifdef DEBUG_PHY_PROC
-	  LOG_E(PHY,"[UE  %d] Frame %d, slot %d: Error in pdcch procedures\n",phy_vars_ue->Mod_id,frame_rx,slot_rx);
+	  LOG_E(PHY,"[UE  %d] Frame %d, slot %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,slot_rx);
 #endif
 	  return(-1);
       }
@@ -3049,31 +3049,31 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
       //      rt_printk("[PDCCH] Frame %d, slot %d, stop  %llu\n",frame_rx,slot_rx,rt_get_time_ns());
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"num_pdcch_symbols %d\n",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols);
+      LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[eNB_id]->num_pdcch_symbols);
 #endif
     }
 
     if (abstraction_flag==0) {
 
       if (((slot_rx%2)==1) && (l==0)) {
-        start_meas(&phy_vars_ue->dlsch_llr_stats);
+        start_meas(&ue->dlsch_llr_stats);
 
-        for (m=phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols;
+        for (m=ue->pdcch_vars[eNB_id]->num_pdcch_symbols;
              m<pilot2;
              m++) {
 
 #ifndef DLSCH_THREAD
 
-          if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1)  {
-            harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
-            LOG_D(PHY,"[UE %d] PDSCH active in subframe %d (%d), harq_pid %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,harq_pid);
+          if (ue->dlsch[eNB_id][0]->active == 1)  {
+            harq_pid = ue->dlsch[eNB_id][0]->current_harq_pid;
+            LOG_D(PHY,"[UE %d] PDSCH active in subframe %d (%d), harq_pid %d\n",ue->Mod_id,subframe_rx,slot_rx,harq_pid);
 
-            if ((phy_vars_ue->transmission_mode[eNB_id] == 5) &&
-                (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
-                (phy_vars_ue->use_ia_receiver ==1)) {
+            if ((ue->transmission_mode[eNB_id] == 5) &&
+                (ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
+                (ue->use_ia_receiver ==1)) {
               dual_stream_UE = 1;
-              eNB_id_i = phy_vars_ue->n_connected_eNB;
-              i_mod =  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
+              eNB_id_i = ue->n_connected_eNB;
+              i_mod =  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm;
             } else {
               dual_stream_UE = 0;
               eNB_id_i = eNB_id+1;
@@ -3082,74 +3082,74 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
             // process DLSCH received in first slot
 
-            rx_pdsch(phy_vars_ue,
+            rx_pdsch(ue,
                      PDSCH,
                      eNB_id,
                      eNB_id_i,
                      subframe_rx,  // subframe,
                      m,
-                     (m==phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,   // first_symbol_flag
+                     (m==ue->pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,   // first_symbol_flag
                      dual_stream_UE,
                      i_mod,
-                     phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid);
+                     ue->dlsch[eNB_id][0]->current_harq_pid);
           } // CRNTI active
 
 #endif
 
-          if (phy_vars_ue->dlsch_ue_SI[eNB_id]->active == 1)  {
+          if (ue->dlsch_SI[eNB_id]->active == 1)  {
             // process SI DLSCH in first slot
-            rx_pdsch(phy_vars_ue,
+            rx_pdsch(ue,
                      SI_PDSCH,
                      eNB_id,
                      eNB_id+1,
                      subframe_rx,  // subframe,
                      m,
-                     (m==phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,   // first_symbol_flag
+                     (m==ue->pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,   // first_symbol_flag
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_SI[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_SI[eNB_id]->current_harq_pid);
           } // SI active
 
-          if (phy_vars_ue->dlsch_ue_ra[eNB_id]->active == 1)  {
-            rx_pdsch(phy_vars_ue,
+          if (ue->dlsch_ra[eNB_id]->active == 1)  {
+            rx_pdsch(ue,
                      RA_PDSCH,
                      eNB_id,
                      eNB_id+1,
                      subframe_rx,  // subframe,
                      m,
-                     (m==phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,
+                     (m==ue->pdcch_vars[eNB_id]->num_pdcch_symbols)?1:0,
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_ra[eNB_id]->current_harq_pid);
           } // RA active
         } // loop from first dlsch symbol to end of slot
 
-        stop_meas(&phy_vars_ue->dlsch_llr_stats);
+        stop_meas(&ue->dlsch_llr_stats);
       } // 2nd quarter
 
       if (((slot_rx%2)==1) && (l==pilot1)) {
-        start_meas(&phy_vars_ue->dlsch_llr_stats);
+        start_meas(&ue->dlsch_llr_stats);
 
         for (m=pilot2; m<pilot3; m++) {
 
 #ifndef DLSCH_THREAD
 
-          if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) {
-            harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
+          if (ue->dlsch[eNB_id][0]->active == 1) {
+            harq_pid = ue->dlsch[eNB_id][0]->current_harq_pid;
 
-            if ((phy_vars_ue->transmission_mode[eNB_id] == 5) &&
-                (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
-                (phy_vars_ue->use_ia_receiver ==1)) {
+            if ((ue->transmission_mode[eNB_id] == 5) &&
+                (ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
+                (ue->use_ia_receiver ==1)) {
               dual_stream_UE = 1;
-              eNB_id_i = phy_vars_ue->n_connected_eNB;
-              i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
+              eNB_id_i = ue->n_connected_eNB;
+              i_mod = ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm;
             } else {
               dual_stream_UE = 0;
               eNB_id_i = eNB_id+1;
               i_mod = 0;
             }
 
-            rx_pdsch(phy_vars_ue,
+            rx_pdsch(ue,
                      PDSCH,
                      eNB_id,
                      eNB_id_i,
@@ -3158,13 +3158,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      0,
                      dual_stream_UE,
                      i_mod,
-                     phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid);
+                     ue->dlsch[eNB_id][0]->current_harq_pid);
           } // CRNTI active
 
 #endif
 
-          if(phy_vars_ue->dlsch_ue_SI[eNB_id]->active == 1) {
-            rx_pdsch(phy_vars_ue,
+          if(ue->dlsch_SI[eNB_id]->active == 1) {
+            rx_pdsch(ue,
                      SI_PDSCH,
                      eNB_id,
                      eNB_id+1,
@@ -3172,12 +3172,12 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      m,
                      0,   // first_symbol_flag
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_SI[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_SI[eNB_id]->current_harq_pid);
           } // SI active
 
-          if (phy_vars_ue->dlsch_ue_ra[eNB_id]->active == 1) {
-            rx_pdsch(phy_vars_ue,
+          if (ue->dlsch_ra[eNB_id]->active == 1) {
+            rx_pdsch(ue,
                      RA_PDSCH,
                      eNB_id,
                      eNB_id+1,
@@ -3185,13 +3185,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                      m,
                      0,   // first_symbol_flag
                      0,
-                     phy_vars_ue->is_secondary_ue,
-                     phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid);
+                     ue->is_secondary_ue,
+                     ue->dlsch_ra[eNB_id]->current_harq_pid);
           } // RA active
 
         } // loop over 3rd quarter
 
-        stop_meas(&phy_vars_ue->dlsch_llr_stats);
+        stop_meas(&ue->dlsch_llr_stats);
       } // 3rd quarter of subframe
     } // abstraction_flag==0
   }// l loop
@@ -3199,33 +3199,33 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
   // calculate some statistics
   if (slot_rx==19) {
     if (frame_rx % 10 == 0) {
-      if ((phy_vars_ue->dlsch_received[eNB_id] - phy_vars_ue->dlsch_received_last[eNB_id]) != 0)
-        phy_vars_ue->dlsch_fer[eNB_id] = (100*(phy_vars_ue->dlsch_errors[eNB_id] - phy_vars_ue->dlsch_errors_last[eNB_id]))/(phy_vars_ue->dlsch_received[eNB_id] - phy_vars_ue->dlsch_received_last[eNB_id]);
+      if ((ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]) != 0)
+        ue->dlsch_fer[eNB_id] = (100*(ue->dlsch_errors[eNB_id] - ue->dlsch_errors_last[eNB_id]))/(ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]);
 
-      phy_vars_ue->dlsch_errors_last[eNB_id] = phy_vars_ue->dlsch_errors[eNB_id];
-      phy_vars_ue->dlsch_received_last[eNB_id] = phy_vars_ue->dlsch_received[eNB_id];
+      ue->dlsch_errors_last[eNB_id] = ue->dlsch_errors[eNB_id];
+      ue->dlsch_received_last[eNB_id] = ue->dlsch_received[eNB_id];
     }
 
-    phy_vars_ue->bitrate[eNB_id] = (phy_vars_ue->total_TBS[eNB_id] - phy_vars_ue->total_TBS_last[eNB_id])*100;
-    phy_vars_ue->total_TBS_last[eNB_id] = phy_vars_ue->total_TBS[eNB_id];
+    ue->bitrate[eNB_id] = (ue->total_TBS[eNB_id] - ue->total_TBS_last[eNB_id])*100;
+    ue->total_TBS_last[eNB_id] = ue->total_TBS[eNB_id];
     LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n",
-          phy_vars_ue->Mod_id,frame_rx,phy_vars_ue->total_TBS[eNB_id],
-          phy_vars_ue->total_TBS_last[eNB_id],(float) phy_vars_ue->bitrate[eNB_id]/1000.0);
+          ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
+          ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
     /*
     if ((frame_rx % 100 == 0)) {
-      LOG_I(PHY,"Throughput %5.1f kbps\n",(float) phy_vars_ue->bitrate[eNB_id]/1000.0);
+      LOG_I(PHY,"Throughput %5.1f kbps\n",(float) ue->bitrate[eNB_id]/1000.0);
     }
     */
   }
 
-  if (is_pmch_subframe((subframe_rx==9?-1:0)+frame_rx,subframe_rx,&phy_vars_ue->lte_frame_parms)) {
+  if (is_pmch_subframe((subframe_rx==9?-1:0)+frame_rx,subframe_rx,&ue->frame_parms)) {
     LOG_D(PHY,"ue calling pmch subframe ..\n ");
 
     if ((slot_rx%2)==1) {
       LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation(%d)\n",
-            phy_vars_ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx,slot_rx);
+            ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx,slot_rx);
 #ifdef Rel10
-      pmch_mcs = mac_xface->ue_query_mch(phy_vars_ue->Mod_id,
+      pmch_mcs = mac_xface->ue_query_mch(ue->Mod_id,
                                          CC_id,
                                          (subframe_rx==9?-1:0)+frame_rx,
                                          subframe_rx,
@@ -3241,20 +3241,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 #endif
 
       if (pmch_mcs>=0) {
-        LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",phy_vars_ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx,pmch_mcs);
-        fill_UE_dlsch_MCH(phy_vars_ue,pmch_mcs,1,0,0);
+        LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx,pmch_mcs);
+        fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0);
 
         if (abstraction_flag == 0 ) {
           for (l=2; l<12; l++) {
 
-            slot_fep_mbsfn(phy_vars_ue,
+            slot_fep_mbsfn(ue,
                            l,
                            subframe_rx,
-                           0,0);//phy_vars_ue->rx_offset,0);
+                           0,0);//ue->rx_offset,0);
           }
 
           for (l=2; l<12; l++) {
-            rx_pmch(phy_vars_ue,
+            rx_pmch(ue,
                     0,
                     subframe_rx,
                     l);
@@ -3265,31 +3265,31 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
           /*  printf("PMCH decoding, Frame %d, subframe %d, G %d\n",
                (subframe_rx==9?-1:0)+frame_rx,
                subframe_rx,
-               phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G);
+               ue->dlsch_MCH[0]->harq_processes[0]->G);
           */
-          phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
-              phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->nb_rb,
-              phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc_even,
-              phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->Qm,
+          ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
+              ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+              ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+              ue->dlsch_MCH[0]->harq_processes[0]->Qm,
               1,
               2,
               (subframe_rx==9?-1:0)+frame_rx,subframe_rx);
 
-          dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,1,phy_vars_ue->dlsch_ue_MCH[0],
-                             phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G,
-                             phy_vars_ue->lte_ue_pdsch_vars_MCH[0]->llr[0],0,subframe_prev<<1);
+          dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
+                             ue->dlsch_MCH[0]->harq_processes[0]->G,
+                             ue->pdsch_vars_MCH[0]->llr[0],0,subframe_prev<<1);
 
-          ret = dlsch_decoding(phy_vars_ue,
-                               phy_vars_ue->lte_ue_pdsch_vars_MCH[0]->llr[0],
-                               &phy_vars_ue->lte_frame_parms,
-                               phy_vars_ue->dlsch_ue_MCH[0],
-                               phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0],
+          ret = dlsch_decoding(ue,
+                               ue->pdsch_vars_MCH[0]->llr[0],
+                               &ue->frame_parms,
+                               ue->dlsch_MCH[0],
+                               ue->dlsch_MCH[0]->harq_processes[0],
                                subframe_prev,
                                0,
                                0,1);
         } else { // abstraction
 #ifdef PHY_ABSTRACTION
-          ret = dlsch_decoding_emul(phy_vars_ue,
+          ret = dlsch_decoding_emul(ue,
                                     subframe_rx,
                                     5, // PMCH
                                     eNB_id);
@@ -3297,29 +3297,29 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
         }
 
         if (mcch_active == 1)
-          phy_vars_ue->dlsch_mcch_trials[sync_area][0]++;
+          ue->dlsch_mcch_trials[sync_area][0]++;
         else
-          phy_vars_ue->dlsch_mtch_trials[sync_area][0]++;
+          ue->dlsch_mtch_trials[sync_area][0]++;
 
-        if (ret == (1+phy_vars_ue->dlsch_ue_MCH[0]->max_turbo_iterations)) {
+        if (ret == (1+ue->dlsch_MCH[0]->max_turbo_iterations)) {
           if (mcch_active == 1)
-            phy_vars_ue->dlsch_mcch_errors[sync_area][0]++;
+            ue->dlsch_mcch_errors[sync_area][0]++;
           else
-            phy_vars_ue->dlsch_mtch_errors[sync_area][0]++;
+            ue->dlsch_mtch_errors[sync_area][0]++;
 
           LOG_D(PHY,"[%s %d] Frame %d, subframe %d: PMCH in error (%d,%d), not passing to L2 (TBS %d, iter %d,G %d)\n",
-                (r_type == no_relay)? "UE": "RN/UE", phy_vars_ue->Mod_id,
+                (r_type == no_relay)? "UE": "RN/UE", ue->Mod_id,
                 (subframe_rx==9?-1:0)+frame_rx,subframe_rx,
-                phy_vars_ue->dlsch_mcch_errors[sync_area][0],
-                phy_vars_ue->dlsch_mtch_errors[sync_area][0],
-                phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS>>3,
-                phy_vars_ue->dlsch_ue_MCH[0]->max_turbo_iterations,
-                phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G);
-          dump_mch(phy_vars_ue,0,phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G,subframe_rx);
+                ue->dlsch_mcch_errors[sync_area][0],
+                ue->dlsch_mtch_errors[sync_area][0],
+                ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
+                ue->dlsch_MCH[0]->max_turbo_iterations,
+                ue->dlsch_MCH[0]->harq_processes[0]->G);
+          dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
 #ifdef DEBUG_DLSCH
 
-          for (int i=0; i<phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS>>3; i++) {
-            LOG_T(PHY,"%02x.",phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->c[0][i]);
+          for (int i=0; i<ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) {
+            LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]);
           }
 
           LOG_T(PHY,"\n");
@@ -3331,44 +3331,44 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 #ifdef Rel10
 
           if ((r_type == no_relay) || (mcch_active == 1)) {
-            mac_xface->ue_send_mch_sdu(phy_vars_ue->Mod_id,
+            mac_xface->ue_send_mch_sdu(ue->Mod_id,
                                        CC_id,
                                        frame_rx,
-                                       phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->b,
-                                       phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS>>3,
+                                       ue->dlsch_MCH[0]->harq_processes[0]->b,
+                                       ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
                                        eNB_id,// not relevant in eMBMS context
                                        sync_area);
-            /*   for (i=0;i<phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS>>3;i++)
-              msg("%2x.",phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->b[i]);
+            /*   for (i=0;i<ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3;i++)
+              msg("%2x.",ue->dlsch_MCH[0]->harq_processes[0]->b[i]);
             msg("\n");
             */
 
             if (mcch_active == 1)
-              phy_vars_ue->dlsch_mcch_received[sync_area][0]++;
+              ue->dlsch_mcch_received[sync_area][0]++;
             else
-              phy_vars_ue->dlsch_mtch_received[sync_area][0]++;
+              ue->dlsch_mtch_received[sync_area][0]++;
 
 
-            if (phy_vars_ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
-              phy_vars_ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
+            if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
+              ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
             } else {
-              phy_vars_ue->dlsch_mch_received[0]+=1;
-              phy_vars_ue->dlsch_mch_received_sf[subframe_rx][0]=1;
+              ue->dlsch_mch_received[0]+=1;
+              ue->dlsch_mch_received_sf[subframe_rx][0]=1;
             }
 
           } else if (r_type == multicast_relay) { // mcch is not active here
             // only 1 harq process exists
             // Fix me: this could be a pointer copy
             memcpy (phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->b,
-                    phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->b,
-                    phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS>>3);
+                    ue->dlsch_MCH[0]->harq_processes[0]->b,
+                    ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3);
             // keep the tbs
             phy_vars_rn->mch_avtive[subframe_rx] = 1;
             phy_vars_rn->sync_area[subframe_rx] = sync_area; // this could also go the harq data struct
-            phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS = phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->TBS;
-            phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->mcs = phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs;
+            phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS = ue->dlsch_MCH[0]->harq_processes[0]->TBS;
+            phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->mcs = ue->dlsch_MCH[0]->harq_processes[0]->mcs;
             LOG_D(PHY,"[RN/UE %d] Frame %d subframe %d: store the MCH PDU for MBSFN sync area %d (MCS %d, TBS %d)\n",
-                  phy_vars_ue->Mod_id, frame_rx,subframe_rx,sync_area,
+                  ue->Mod_id, frame_rx,subframe_rx,sync_area,
                   phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->mcs,
                   phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS>>3);
 #ifdef DEBUG_PHY
@@ -3379,7 +3379,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
             msg("\n");
 #endif
           } else
-            LOG_W(PHY,"[UE %d] Frame %d: not supported option\n",phy_vars_ue->Mod_id, frame_rx);
+            LOG_W(PHY,"[UE %d] Frame %d: not supported option\n",ue->Mod_id, frame_rx);
 
 #endif
         }
@@ -3388,11 +3388,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
   }
 
 #ifdef EMOS
-  phy_procedures_emos_UE_RX(phy_vars_ue,slot_rx,eNB_id);
+  phy_procedures_emos_UE_RX(ue,slot_rx,eNB_id);
 #endif
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-  stop_meas(&phy_vars_ue->phy_proc_rx);
+  stop_meas(&ue->phy_proc_rx);
   return (0);
 }
 
@@ -3426,136 +3426,7 @@ int phy_procedures_RN_UE_RX(uint8_t slot_rx, uint8_t next_slot, relaying_type_t
 #endif
 
 
-#if defined(ENABLE_ITTI)
-#   if ENABLE_RAL
-extern PHY_MEASUREMENTS PHY_measurements;
-
-void phy_UE_lte_measurement_thresholds_test_and_report(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP, uint16_t valP)
-{
-  MessageDef *message_p = NULL;
-
-  if (
-    (
-      (((short) threshold_phy_pP->threshold.threshold_val <  (short) valP) && (threshold_phy_pP->threshold.threshold_xdir == RAL_ABOVE_THRESHOLD)) ||
-      (((short)threshold_phy_pP->threshold.threshold_val >  (short)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_UE , 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;
-    }
-
-    //LOG_I(PHY,"[XXX] Sending link parameters report msg message to RRC\n");
-    itti_send_msg_to_task(TASK_RRC_UE, instanceP, message_p);
-  }
-}
-
-void phy_UE_lte_check_measurement_thresholds(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP)
-{
-  unsigned int  mod_id;
-  int CC_id  = 0; // this should become the function argument, requested by the upper layers.
-
-  mod_id = instanceP - NB_eNB_INST;
-
-  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_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-      break;
-
-    case RAL_LINK_PARAM_GEN_SIGNAL_STRENGTH:
-      phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-      break;
-
-    case RAL_LINK_PARAM_GEN_SINR:
-      phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, 0);
-      break;
-
-    case RAL_LINK_PARAM_GEN_THROUGHPUT:
-      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:
-      //                     phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, PHY_vars_UE_g[mod_id]->PHY_measurements.rx_rssi_dBm[0]);
-      phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, PHY_vars_UE_g[mod_id][CC_id]->PHY_measurements.rsrp[0]);
-      break;
-
-    case RAL_LINK_PARAM_LTE_UE_RSRQ:
-      phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, PHY_vars_UE_g[mod_id][CC_id]->PHY_measurements.rsrq[0]);
-      break;
-
-    case RAL_LINK_PARAM_LTE_UE_CQI:
-      phy_UE_lte_measurement_thresholds_test_and_report(instanceP, threshold_phy_pP, PHY_vars_UE_g[mod_id][CC_id]->PHY_measurements.wideband_cqi_avg[0]);
-      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:
-      LOG_W(PHY,"unknown message %d\n", threshold_phy_pP->link_param.link_param_type._union.link_param_gen);
-    }
-
-    break;
-
-  default:
-    LOG_W(PHY,"unknown message %d\n", threshold_phy_pP->link_param.link_param_type.choice);
-  }
-}
-#   endif
-#endif
-
-void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
+void phy_procedures_UE_lte(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
                            relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn)
 {
 #if defined(ENABLE_ITTI)
@@ -3568,19 +3439,19 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
 #   if ENABLE_RAL
   int           CC_id =0;
 #endif
-  int           frame_rx = phy_vars_ue->frame_rx;
-  int           frame_tx = phy_vars_ue->frame_tx;
-  int           slot_rx  = phy_vars_ue->slot_rx;
-  int           slot_tx  = phy_vars_ue->slot_tx;
+  int           frame_rx = ue->frame_rx;
+  int           frame_tx = ue->frame_tx;
+  int           slot_rx  = ue->slot_rx;
+  int           slot_tx  = ue->slot_tx;
   int           subframe_tx = slot_tx>>1;
   int           subframe_rx = slot_rx>>1;
 #undef DEBUG_PHY_PROC
 
   UE_L2_STATE_t ret;
 
-  if (phy_vars_ue->mac_enabled == 0) {
-    phy_vars_ue->UE_mode[eNB_id]=PUSCH;
-    phy_vars_ue->prach_resources[eNB_id] = &prach_resources_local;
+  if (ue->mac_enabled == 0) {
+    ue->UE_mode[eNB_id]=PUSCH;
+    ue->prach_resources[eNB_id] = &prach_resources_local;
     prach_resources_local.ra_RNTI = 0xbeef;
     prach_resources_local.ra_PreambleIndex = 0;
   }
@@ -3592,7 +3463,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX, *((volatile unsigned int *) openair0_exmimo_pci[0].rxcnt_ptr[0]));
 #endif
 #endif
-  start_meas(&phy_vars_ue->phy_proc);
+  start_meas(&ue->phy_proc);
 #if defined(ENABLE_ITTI)
 
   do {
@@ -3634,7 +3505,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
         // check if it is a measurement timer
       {
         hashtable_rc_t       hashtable_rc;
-        hashtable_rc = hashtable_is_key_exists(PHY_vars_UE_g[Mod_id][CC_id]->ral_thresholds_timed, (uint64_t)(TIMER_HAS_EXPIRED(msg_p).timer_id));
+        hashtable_rc = hashtable_is_key_exists(ue_g[Mod_id][CC_id]->ral_thresholds_timed, (uint64_t)(TIMER_HAS_EXPIRED(msg_p).timer_id));
         LOG_I(PHY, "[UE %d] Received TIMER HAS EXPIRED: (hash_rc %d, HASH_TABLE_OK %d)\n", Mod_id, hashtable_rc, HASH_TABLE_OK);
 
         if (hashtable_rc == HASH_TABLE_OK) {
@@ -3677,14 +3548,14 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
                 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_UE_g[Mod_id][CC_id]->ral_thresholds_gen_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_gen],
+                    &ue_g[Mod_id][CC_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_UE_g[Mod_id][CC_id]->ral_thresholds_lte_polled[PHY_MEAS_THRESHOLD_REQ(msg_p).cfg_param.link_param_type._union.link_param_lte],
+                    &ue_g[Mod_id][CC_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);
                   //LOG_E(PHY, "[UE %d] NORMAL/ONE SHOT - TIMER NULL - type LTE in %s\n", Mod_id, msg_name);
@@ -3708,7 +3579,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
                         &timer_id);
 
                 if (res == 0) {
-                  hashtable_rc = hashtable_insert(PHY_vars_UE_g[Mod_id][CC_id]->ral_thresholds_timed, (uint64_t )timer_id, (void*)threshold_phy_p);
+                  hashtable_rc = hashtable_insert(ue_g[Mod_id][CC_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;
@@ -3754,62 +3625,62 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
 
 #endif
 
-  if ((subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx)==SF_UL)||
-      (phy_vars_ue->lte_frame_parms.frame_type == FDD)) {
-    phy_procedures_UE_TX(phy_vars_ue,eNB_id,abstraction_flag,mode,r_type);
+  if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_UL)||
+      (ue->frame_parms.frame_type == FDD)) {
+    phy_procedures_UE_TX(ue,eNB_id,abstraction_flag,mode,r_type);
   }
 
-  if ((subframe_select(&phy_vars_ue->lte_frame_parms,subframe_rx)==SF_DL) ||
-      (phy_vars_ue->lte_frame_parms.frame_type == FDD)) {
+  if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_DL) ||
+      (ue->frame_parms.frame_type == FDD)) {
 #ifdef Rel10
 
     if (phy_procedures_RN_UE_RX(slot_rx, slot_tx, r_type) != 0 )
 #endif
-      phy_procedures_UE_RX(phy_vars_ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
+      phy_procedures_UE_RX(ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
   }
 
-  if ((subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx)==SF_S) &&
+  if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_S) &&
       ((slot_tx&1)==1)) {
-    phy_procedures_UE_S_TX(phy_vars_ue,eNB_id,abstraction_flag,r_type);
+    phy_procedures_UE_S_TX(ue,eNB_id,abstraction_flag,r_type);
   }
 
-  if ((subframe_select(&phy_vars_ue->lte_frame_parms,subframe_rx)==SF_S) &&
+  if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_S) &&
       ((slot_rx&1)==0)) {
 #ifdef Rel10
 
     if (phy_procedures_RN_UE_RX(slot_rx, slot_tx, r_type) != 0 )
 #endif
-      phy_procedures_UE_RX(phy_vars_ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
+      phy_procedures_UE_RX(ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
   }
 
-  if (phy_vars_ue->mac_enabled==1) {
+  if (ue->mac_enabled==1) {
     if (slot_rx%2==0) {
-      ret = mac_xface->ue_scheduler(phy_vars_ue->Mod_id,
+      ret = mac_xface->ue_scheduler(ue->Mod_id,
 				    frame_tx,
 				    subframe_rx,
-				    subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx),
+				    subframe_select(&ue->frame_parms,subframe_tx),
 				    eNB_id,
 				    0/*FIXME CC_id*/);
 
     if (ret == CONNECTION_LOST) {
-      LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",phy_vars_ue->Mod_id,
+      LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",ue->Mod_id,
             frame_rx,subframe_tx);
-      phy_vars_ue->UE_mode[eNB_id] = PRACH;
+      ue->UE_mode[eNB_id] = PRACH;
       //      mac_xface->macphy_exit("Connection lost");
     } else if (ret == PHY_RESYNCH) {
       LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, trying to resynch\n",
-            phy_vars_ue->Mod_id,
+            ue->Mod_id,
             frame_rx,subframe_tx);
-      phy_vars_ue->UE_mode[eNB_id] = RESYNCH;
+      ue->UE_mode[eNB_id] = RESYNCH;
       //     mac_xface->macphy_exit("Connection lost");
     } else if (ret == PHY_HO_PRACH) {
       LOG_I(PHY,"[UE %d] Frame %d, subframe %d, return to PRACH and perform a contention-free access\n",
-            phy_vars_ue->Mod_id,frame_rx,subframe_tx);
-      phy_vars_ue->UE_mode[eNB_id] = PRACH;
+            ue->Mod_id,frame_rx,subframe_tx);
+      ue->UE_mode[eNB_id] = PRACH;
     }
   }
   }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0);
-  stop_meas(&phy_vars_ue->phy_proc);
+  stop_meas(&ue->phy_proc);
 }
diff --git a/openair1/SCHED/pucch_pc.c b/openair1/SCHED/pucch_pc.c
index afcf4bd5b34ea2604359d9e1b5bee46d95ace50f..229ae3f1a332c1443b6789accfdb743a2031ec0b 100644
--- a/openair1/SCHED/pucch_pc.c
+++ b/openair1/SCHED/pucch_pc.c
@@ -42,7 +42,7 @@
 #include "PHY/LTE_TRANSPORT/proto.h"
 #include "PHY/extern.h"
 
-int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,PUCCH_FMT_t pucch_fmt)
+int8_t pucch_power_cntl(PHY_VARS_UE *ue,uint8_t subframe,uint8_t eNB_id,PUCCH_FMT_t pucch_fmt)
 {
 
   int8_t Po_PUCCH;
@@ -52,29 +52,29 @@ int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id
   //
   //if ((pucch_fmt == pucch_format1a) ||
   //    (pucch_fmt == pucch_format1b)) {  // Update g_pucch based on TPC/delta_PUCCH received in PDCCH for this process
-    //harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[subframe].harq_id;
+    //harq_pid = ue->dlsch[eNB_id][0]->harq_ack[subframe].harq_id;
     //this is now done in dci_tools
-    //phy_vars_ue->g_pucch[eNB_id] += phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->delta_PUCCH;
+    //ue->g_pucch[eNB_id] += ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->delta_PUCCH;
   //}
 
-  Po_PUCCH = get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id)+
-    phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
-    phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch;
+  Po_PUCCH = get_PL(ue->Mod_id,ue->CC_id,eNB_id)+
+    ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
+    ue->dlsch[eNB_id][0]->g_pucch;
 
   switch (pucch_fmt) {
   case pucch_format1:
   case pucch_format2a:
   case pucch_format2b:
-    Po_PUCCH += (-2+(phy_vars_ue->lte_frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format1<<1));
+    Po_PUCCH += (-2+(ue->frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format1<<1));
     break;
 
   case pucch_format1a:
   case pucch_format1b:
-    Po_PUCCH += (1+(phy_vars_ue->lte_frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format1b<<1));
+    Po_PUCCH += (1+(ue->frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format1b<<1));
     break;
 
   case pucch_format2:
-    switch (phy_vars_ue->lte_frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format2a) {
+    switch (ue->frame_parms.ul_power_control_config_common.deltaF_PUCCH_Format2a) {
     case 0:
       Po_PUCCH -= 2;
       break;
@@ -97,20 +97,20 @@ int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id
 
   if (pucch_fmt!=pucch_format1) {
     LOG_I(PHY,"[UE  %d][PDSCH %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n",
-          phy_vars_ue->Mod_id,
-          phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,phy_vars_ue->frame_tx,subframe,
+          ue->Mod_id,
+          ue->dlsch[eNB_id][0]->rnti,ue->frame_tx,subframe,
           Po_PUCCH,
-          phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-          get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id),
-          phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch);
+          ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
+          get_PL(ue->Mod_id,ue->CC_id,eNB_id),
+          ue->dlsch[eNB_id][0]->g_pucch);
   } else {
     LOG_I(PHY,"[UE  %d][SR %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n",
-          phy_vars_ue->Mod_id,
-          phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,phy_vars_ue->frame_tx,subframe,
+          ue->Mod_id,
+          ue->dlsch[eNB_id][0]->rnti,ue->frame_tx,subframe,
           Po_PUCCH,
-          phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-          get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id),
-          phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch);
+          ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
+          get_PL(ue->Mod_id,ue->CC_id,eNB_id),
+          ue->dlsch[eNB_id][0]->g_pucch);
   }
 
   return(Po_PUCCH);
diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c
index 5fb1f7449ca9a2bcf77554d6027b85f189e6a5c0..074cd507effa79ee80712abb34f9f955bf7d69a5 100644
--- a/openair1/SCHED/pusch_pc.c
+++ b/openair1/SCHED/pusch_pc.c
@@ -47,7 +47,7 @@
 int16_t hundred_times_delta_TF[100] = {-32768,-1268,-956,-768,-631,-523,-431,-352,-282,-219,-161,-107,-57,-9,36,79,120,159,197,234,269,304,337,370,402,434,465,495,525,555,583,612,640,668,696,723,750,777,803,829,856,881,907,933,958,983,1008,1033,1058,1083,1108,1132,1157,1181,1205,1229,1254,1278,1302,1325,1349,1373,1397,1421,1444,1468,1491,1515,1538,1562,1585,1609,1632,1655,1679,1702,1725,1748,1772,1795,1818,1841,1864,1887,1910,1933,1956,1980,2003,2026,2049,2072,2095,2118,2141,2164,2186,2209,2232,2255};
 uint16_t hundred_times_log10_NPRB[100] = {0,301,477,602,698,778,845,903,954,1000,1041,1079,1113,1146,1176,1204,1230,1255,1278,1301,1322,1342,1361,1380,1397,1414,1431,1447,1462,1477,1491,1505,1518,1531,1544,1556,1568,1579,1591,1602,1612,1623,1633,1643,1653,1662,1672,1681,1690,1698,1707,1716,1724,1732,1740,1748,1755,1763,1770,1778,1785,1792,1799,1806,1812,1819,1826,1832,1838,1845,1851,1857,1863,1869,1875,1880,1886,1892,1897,1903,1908,1913,1919,1924,1929,1934,1939,1944,1949,1954,1959,1963,1968,1973,1977,1982,1986,1991,1995,2000};
 
-int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor)
+int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor)
 {
 
   uint32_t Nre,sumKr,MPR_x100,Kr,r;
@@ -56,16 +56,16 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,
   DevAssert( UE_id < NUMBER_OF_UE_MAX+1 );
   DevAssert( harq_pid < 8 );
 
-  Nre = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Nsymb_initial *
-        phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb*12;
+  Nre = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_initial *
+        eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12;
 
   sumKr = 0;
 
-  for (r=0; r<phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->C; r++) {
-    if (r<phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Cminus)
-      Kr = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Kminus;
+  for (r=0; r<eNB->ulsch[UE_id]->harq_processes[harq_pid]->C; r++) {
+    if (r<eNB->ulsch[UE_id]->harq_processes[harq_pid]->Cminus)
+      Kr = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kminus;
     else
-      Kr = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Kplus;
+      Kr = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kplus;
 
     sumKr += Kr;
   }
@@ -78,16 +78,16 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,
   // FK 20140908 sumKr is only set after the ulsch_encoding
 
   beta_offset_pusch = 8;
-  //(phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->control_only == 1) ? phy_vars_eNB->ulsch_eNB[UE_id]->beta_offset_cqi_times8:8;
+  //(eNB->ulsch[UE_id]->harq_processes[harq_pid]->control_only == 1) ? eNB->ulsch[UE_id]->beta_offset_cqi_times8:8;
 
   DevAssert( UE_id < NUMBER_OF_UE_MAX );
 //#warning "This condition happens sometimes. Need more investigation" // navid
   //DevAssert( MPR_x100/6 < 100 );
 
-  if (phy_vars_eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled == 1) {
+  if (eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled == 1) {
     // This is the formula from Section 5.1.1.1 in 36.213 10*log10(deltaIF_PUSCH = (2^(MPR*Ks)-1)*beta_offset_pusch)
     if (bw_factor == 1) {
-      uint8_t nb_rb = phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb;
+      uint8_t nb_rb = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
       return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch)>>3)) + hundred_times_log10_NPRB[nb_rb-1];
     } else
       return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch)>>3));
@@ -108,23 +108,23 @@ int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rn
   return get_hundred_times_delta_IF_eNB( PHY_vars_eNB_g[module_idP][CC_id], UE_id, harq_pid, 0 );
 }
 
-int16_t get_hundred_times_delta_IF(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t harq_pid)
+int16_t get_hundred_times_delta_IF(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t harq_pid)
 {
 
-  uint32_t Nre = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->Nsymb_initial *
-                 phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb*12;
+  uint32_t Nre = ue->ulsch[eNB_id]->harq_processes[harq_pid]->Nsymb_initial *
+                 ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb*12;
 
   if (Nre==0)
     return(0);
 
-  uint32_t MPR_x100 = 100*phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->sumKr/Nre;
+  uint32_t MPR_x100 = 100*ue->ulsch[eNB_id]->harq_processes[harq_pid]->sumKr/Nre;
   // Note: MPR=is the effective spectral efficiency of the PUSCH
   // FK 20140908 sumKr is only set after the ulsch_encoding
 
-  uint16_t beta_offset_pusch = (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->control_only == 1) ?
-                               phy_vars_ue->ulsch_ue[eNB_id]->beta_offset_cqi_times8:8;
+  uint16_t beta_offset_pusch = (ue->ulsch[eNB_id]->harq_processes[harq_pid]->control_only == 1) ?
+    ue->ulsch[eNB_id]->beta_offset_cqi_times8:8;
 
-  if (phy_vars_ue->ul_power_control_dedicated[eNB_id].deltaMCS_Enabled == 1) {
+  if (ue->ul_power_control_dedicated[eNB_id].deltaMCS_Enabled == 1) {
     // This is the formula from Section 5.1.1.1 in 36.213 10*log10(deltaIF_PUSCH = (2^(MPR*Ks)-1)*beta_offset_pusch)
     return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch)>>3));
   } else {
@@ -136,15 +136,15 @@ int16_t get_hundred_times_delta_IF(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8
 
 uint8_t alpha_lut[8] = {0,40,50,60,70,80,90,100};
 
-void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,uint8_t j, uint8_t abstraction_flag)
+void pusch_power_cntl(PHY_VARS_UE *ue,uint8_t subframe,uint8_t eNB_id,uint8_t j, uint8_t abstraction_flag)
 {
 
 
-  uint8_t harq_pid = subframe2harq_pid(&phy_vars_ue->lte_frame_parms,
-                                       phy_vars_ue->frame_tx,
+  uint8_t harq_pid = subframe2harq_pid(&ue->frame_parms,
+                                       ue->frame_tx,
                                        subframe);
 
-  uint8_t nb_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb;
+  uint8_t nb_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb;
   int8_t PL;
 
 
@@ -153,46 +153,46 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
   // P_opusch(0) = P_oPTR + deltaP_Msg3 if PUSCH is transporting Msg3
   // else
   // P_opusch(0) = PO_NOMINAL_PUSCH(j) + P_O_UE_PUSCH(j)
-  PL = get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id);
+  PL = get_PL(ue->Mod_id,ue->CC_id,eNB_id);
 
-  phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH = (hundred_times_log10_NPRB[nb_rb-1]+
-      get_hundred_times_delta_IF(phy_vars_ue,eNB_id,harq_pid) +
-      100*phy_vars_ue->ulsch_ue[eNB_id]->f_pusch)/100;
+  ue->ulsch[eNB_id]->Po_PUSCH = (hundred_times_log10_NPRB[nb_rb-1]+
+				 get_hundred_times_delta_IF(ue,eNB_id,harq_pid) +
+				 100*ue->ulsch[eNB_id]->f_pusch)/100;
 
-  if( phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) {  // Msg3 PUSCH
+  if(ue->ulsch_Msg3_active[eNB_id] == 1) {  // Msg3 PUSCH
 
-    phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH += (mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0) + PL);
+    ue->ulsch[eNB_id]->Po_PUSCH += (mac_xface->get_Po_NOMINAL_PUSCH(ue->Mod_id,0) + PL);
 
     LOG_I(PHY,"[UE  %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
-          phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
-          100*mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0),
+          ue->Mod_id,ue->frame_tx,subframe,ue->ulsch[eNB_id]->Po_PUSCH,
+          100*mac_xface->get_Po_NOMINAL_PUSCH(ue->Mod_id,0),
           hundred_times_log10_NPRB[nb_rb-1],
           100*PL,
-          get_hundred_times_delta_IF(phy_vars_ue,eNB_id,harq_pid),
-          100*phy_vars_ue->ulsch_ue[eNB_id]->f_pusch);
+          get_hundred_times_delta_IF(ue,eNB_id,harq_pid),
+          100*ue->ulsch[eNB_id]->f_pusch);
   } else if (j==0) { // SPS PUSCH
   } else if (j==1) { // Normal PUSCH
 
-    phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH +=  ((alpha_lut[phy_vars_ue->lte_frame_parms.ul_power_control_config_common.alpha]*PL)/100);
-    phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH +=  phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
-    phy_vars_ue->ulsch_ue[eNB_id]->PHR       =  phy_vars_ue->tx_power_max_dBm-phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH;  
+    ue->ulsch[eNB_id]->Po_PUSCH +=  ((alpha_lut[ue->frame_parms.ul_power_control_config_common.alpha]*PL)/100);
+    ue->ulsch[eNB_id]->Po_PUSCH +=  ue->frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
+    ue->ulsch[eNB_id]->PHR       =  ue->tx_power_max_dBm-ue->ulsch[eNB_id]->Po_PUSCH;  
 
-    if (phy_vars_ue->ulsch_ue[eNB_id]->PHR < -23)
-      phy_vars_ue->ulsch_ue[eNB_id]->PHR = -23;
-    else if (phy_vars_ue->ulsch_ue[eNB_id]->PHR > 40)
-      phy_vars_ue->ulsch_ue[eNB_id]->PHR = 40;
+    if (ue->ulsch[eNB_id]->PHR < -23)
+      ue->ulsch[eNB_id]->PHR = -23;
+    else if (ue->ulsch[eNB_id]->PHR > 40)
+      ue->ulsch[eNB_id]->PHR = 40;
 
     LOG_D(PHY,"[UE  %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
-          phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_tx,subframe,
-          phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
-          phy_vars_ue->tx_power_max_dBm,
-          phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH,
+          ue->Mod_id,harq_pid,ue->frame_tx,subframe,
+          ue->ulsch[eNB_id]->Po_PUSCH,
+          ue->tx_power_max_dBm,
+          ue->frame_parms.ul_power_control_config_common.p0_NominalPUSCH,
           hundred_times_log10_NPRB[nb_rb-1]/100.0,
-          phy_vars_ue->ulsch_ue[eNB_id]->PHR,
+          ue->ulsch[eNB_id]->PHR,
           PL,
-          alpha_lut[phy_vars_ue->lte_frame_parms.ul_power_control_config_common.alpha]*PL/100.0,
-          get_hundred_times_delta_IF(phy_vars_ue,eNB_id,harq_pid)/100.0,
-          phy_vars_ue->ulsch_ue[eNB_id]->f_pusch);
+          alpha_lut[ue->frame_parms.ul_power_control_config_common.alpha]*PL/100.0,
+          get_hundred_times_delta_IF(ue,eNB_id,harq_pid)/100.0,
+          ue->ulsch[eNB_id]->f_pusch);
   }
 
 }
@@ -200,7 +200,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
 int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id,uint8_t eNB_index)
 {
 
-  return PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[eNB_index]->PHR;
+  return PHY_vars_UE_g[Mod_id][CC_id]->ulsch[eNB_index]->PHR;
 }
 
 // uint8_t eNB_id,uint8_t harq_pid, uint8_t UE_id,
@@ -260,7 +260,7 @@ int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only,
   if (control_only == 1 )
     beta_offset_pusch_x8=8; // fixme
 
-  //(beta_offset_pusch_x8=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? phy_vars_ue->ulsch_ue[eNB_id]->beta_offset_cqi_times8:8;
+  //(beta_offset_pusch_x8=ue->ulsch[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? ue->ulsch[eNB_id]->beta_offset_cqi_times8:8;
 
   // if deltamcs_enabledm
   delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch_x8)>>3))/100.0);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index a6c4eaeb16eb039d1136f6a0ac351fc887da77e9..65098e975f2aeac893b713b8fc5ce0b45582d311 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -146,8 +146,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 	  LOG_D(MAC,"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d) \n",i,rnti,UE_list->UE_sched_ctrl[i].ul_failure_timer);	    
 	  DLSCH_dci = (void *)UE_list->UE_template[CC_id][i].DLSCH_DCI[0];
 	  *(uint32_t*)DLSCH_dci = 0;
-	  if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-	    switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+	  if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+	    switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
 	    case 6:
 	      ((DCI1A_1_5MHz_TDD_1_6_t*)DLSCH_dci)->type = 1;
 	      ((DCI1A_1_5MHz_TDD_1_6_t*)DLSCH_dci)->rballoc = 31;
@@ -175,7 +175,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 	    }
 	  }
 	  else { // FDD
-	    switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+	    switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
 	    case 6:
 	      ((DCI1A_1_5MHz_FDD_t*)DLSCH_dci)->type = 1;
 	      ((DCI1A_1_5MHz_FDD_t*)DLSCH_dci)->rballoc = 31;
@@ -361,11 +361,11 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     schedule_RA(module_idP,frameP,subframeP,2);
 
 
-    if (mac_xface->lte_frame_parms->frame_type == FDD) {  //FDD
+    if (mac_xface->frame_parms->frame_type == FDD) {  //FDD
       schedule_ulsch(module_idP,frameP,cooperation_flag,0,4);//,calibration_flag);
-    } else if  ((mac_xface->lte_frame_parms->tdd_config == TDD) || //TDD
-                (mac_xface->lte_frame_parms->tdd_config == 3) ||
-                (mac_xface->lte_frame_parms->tdd_config == 6)) {
+    } else if  ((mac_xface->frame_parms->tdd_config == TDD) || //TDD
+                (mac_xface->frame_parms->tdd_config == 3) ||
+                (mac_xface->frame_parms->tdd_config == 6)) {
       //schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,4);//,calibration_flag);
     }
 
@@ -378,8 +378,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 
     // TDD, schedule UL for subframeP 7 (TDD config 0,1) / subframeP 8 (TDD Config 6)
     // FDD, schedule normal UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) { // TDD
+      switch (mac_xface->frame_parms->tdd_config) {
       case 0:
       case 1:
         schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7);
@@ -406,7 +406,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 
     // TDD, nothing
     // FDD, normal UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == FDD) {  //FDD
+    if (mac_xface->frame_parms->frame_type == FDD) {  //FDD
       schedule_ulsch(module_idP,frameP,cooperation_flag,2,6);
       schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status);
       fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
@@ -419,8 +419,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     // TDD Config 2, ULSCH for subframeP 7
     // TDD Config 2/5 normal DLSCH
     // FDD, normal UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == TDD) {
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) {
+      switch (mac_xface->frame_parms->tdd_config) {
       case 2:
         schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7);
 
@@ -447,8 +447,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     // TDD Config 1, ULSCH for subframeP 8
     // TDD Config 1/2/4/5 DLSCH
     // FDD UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == 1) { // TDD
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == 1) { // TDD
+      switch (mac_xface->frame_parms->tdd_config) {
       case 1:
         //        schedule_RA(module_idP,frameP,subframeP);
         schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8);
@@ -470,7 +470,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
         break;
       }
     } else {
-      if (mac_xface->lte_frame_parms->frame_type == FDD) {  //FDD
+      if (mac_xface->frame_parms->frame_type == FDD) {  //FDD
 
 	schedule_ulsch(module_idP, frameP, cooperation_flag, 4, 8);
 	schedule_ue_spec(module_idP, frameP, subframeP,  mbsfn_status);
@@ -488,13 +488,13 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     schedule_SI(module_idP,frameP,subframeP);
 
     //schedule_RA(module_idP,frameP,subframeP,5);
-    if (mac_xface->lte_frame_parms->frame_type == FDD) {
+    if (mac_xface->frame_parms->frame_type == FDD) {
       schedule_RA(module_idP,frameP,subframeP,1);
       schedule_ulsch(module_idP,frameP,cooperation_flag,5,9);
       schedule_ue_spec(module_idP, frameP, subframeP,  mbsfn_status);
       fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
-    } else if ((mac_xface->lte_frame_parms->tdd_config == 0) || // TDD Config 0
-               (mac_xface->lte_frame_parms->tdd_config == 6)) { // TDD Config 6
+    } else if ((mac_xface->frame_parms->tdd_config == 0) || // TDD Config 0
+               (mac_xface->frame_parms->tdd_config == 6)) { // TDD Config 6
       //schedule_ulsch(module_idP,cooperation_flag,subframeP);
       fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_status);
     } else {
@@ -509,8 +509,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     // TDD Config 0,1,6 ULSCH for subframes 2,3
     // TDD Config 3,4,5 Normal DLSCH
     // FDD normal ULSCH/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) { // TDD
+      switch (mac_xface->frame_parms->tdd_config) {
       case 0:
         break;
 
@@ -553,8 +553,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 
     // TDD Config 3,4,5 Normal DLSCH
     // FDD Normal UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) { // TDD
+      switch (mac_xface->frame_parms->tdd_config) {
       case 3:
       case 4:
         schedule_RA(module_idP,frameP,subframeP,3);  // 3 = Msg3 subframeP, not
@@ -583,8 +583,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     // TDD Config 2,3,4,5 ULSCH for subframeP 2
     //
     // FDD Normal UL/DLSCH
-    if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) { // TDD
+      switch (mac_xface->frame_parms->tdd_config) {
       case 2:
       case 3:
       case 4:
@@ -610,8 +610,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
   case 9:
 
     // TDD Config 1,3,4,6 ULSCH for subframes 3,3,3,4
-    if (mac_xface->lte_frame_parms->frame_type == TDD) {
-      switch (mac_xface->lte_frame_parms->tdd_config) {
+    if (mac_xface->frame_parms->frame_type == TDD) {
+      switch (mac_xface->frame_parms->tdd_config) {
       case 1:
         schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,3);
         schedule_RA(module_idP,frameP,subframeP,7);  // 7 = Msg3 subframeP, not
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 3f9872a590b0f5b3f1ce566ec58f8aef601a3911..e673a333718069e8f8a7a60e4686b565a000f289 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -115,8 +115,8 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 
 
 
-          if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-            switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+          if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+            switch(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
               ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
@@ -126,7 +126,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -140,7 +140,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -154,7 +154,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -168,7 +168,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -182,13 +182,13 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
             }
           } else {
-            switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+            switch(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->type=1;
               ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type=0;
@@ -198,7 +198,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -212,7 +212,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+              ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_UL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -226,7 +226,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -240,7 +240,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
               ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->harq_pid=0;
               ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->TPC=1;
               ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->padding=0;
-              ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+              ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
               rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->vrb_type,
                                 ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu1[0])->rballoc);
               break;
@@ -307,7 +307,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 	    /*
 	    // randomize frequency allocation for RA
 	    while (1) {
-	      first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
+	      first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
 	      
 	      if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
 		break;
@@ -324,9 +324,9 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
             // Compute MCS for 3 PRB
             msg4_header = 1+6+1;  // CR header, CR CE, SDU header
 
-            if (mac_xface->lte_frame_parms->frame_type == TDD) {
+            if (mac_xface->frame_parms->frame_type == TDD) {
 
-              switch (mac_xface->lte_frame_parms->N_RB_DL) {
+              switch (mac_xface->frame_parms->N_RB_DL) {
               case 6:
                 ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
 
@@ -355,7 +355,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_1_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
 		
@@ -391,7 +391,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
@@ -425,7 +425,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_10MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
 
@@ -460,13 +460,13 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rv=0;
 		((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
-		((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_20MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
               }
             } else { // FDD DCI
-              switch (mac_xface->lte_frame_parms->N_RB_DL) {
+              switch (mac_xface->frame_parms->N_RB_DL) {
               case 6:
                 ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
 
@@ -496,7 +496,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_1_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
@@ -530,7 +530,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
@@ -564,7 +564,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_10MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
@@ -597,7 +597,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 		((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->harq_pid=0;
 		((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->TPC=1;
 		((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->padding=0;
-		((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+		((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc= mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
 		rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 							 ((DCI1A_20MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
                 break;
@@ -668,7 +668,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 	if (round>0) {
 	  //RA_template->wait_ack_Msg4++;
 	  // we have to schedule a retransmission
-	  if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+	  if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
 	    ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
 	  } else {
 	    ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->ndi=1;
@@ -677,7 +677,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 	  /*
 	  // randomize frequency allocation for RA
 	  while (1) {
-	    first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
+	    first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
 	    
 	    if ((vrb_map[first_rb] != 1) && (vrb_map[first_rb+3] != 1))
 	      break;
@@ -689,12 +689,12 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
 	  vrb_map[first_rb+2] = 1;
 	  vrb_map[first_rb+3] = 1;
 	  
-	  if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-	    ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+	  if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+	    ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_UL,first_rb,4);
 	    rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 						     ((DCI1A_5MHz_TDD_1_6_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
 	  } else {
-	    ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_UL,first_rb,4);
+	    ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_UL,first_rb,4);
 	    rballoc[CC_id] |= mac_xface->get_rballoc(((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->vrb_type,
 						     ((DCI1A_5MHz_FDD_t*)&RA_template->RA_alloc_pdu2[0])->rballoc);
 	  }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index f3774777a1b287b7d4fd44a401393b97324a651a..e24ac2f72921328649993611cbccbdc32ccc3dbe 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -113,7 +113,7 @@ schedule_SI(
       // Allocate 4 PRBs in a random location
       /*
       while (1) {
-	first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL-4));
+	first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
 	if ((vrb_map[first_rb] != 1) && 
 	    (vrb_map[first_rb+1] != 1) && 
 	    (vrb_map[first_rb+2] != 1) && 
@@ -121,7 +121,7 @@ schedule_SI(
 	  break;
       }
       */
-      switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+      switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
       case 6:
 	first_rb = 0;
 	break;
@@ -167,11 +167,11 @@ schedule_SI(
 
 
 
-      if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-        switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+      if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+        switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
         case 6:
           ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_1_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -186,7 +186,7 @@ schedule_SI(
 
         case 25:
           ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_5MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -201,7 +201,7 @@ schedule_SI(
 
         case 50:
           ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_10MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -216,7 +216,7 @@ schedule_SI(
 
         case 100:
           ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_20MHz_TDD_1_6_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -231,10 +231,10 @@ schedule_SI(
         }
 
       } else {
-        switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+        switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
         case 6:
           ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_1_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -250,7 +250,7 @@ schedule_SI(
 
         case 25:
           ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_5MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -266,7 +266,7 @@ schedule_SI(
 
         case 50:
           ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_10MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -282,7 +282,7 @@ schedule_SI(
 
         case 100:
           ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->mcs = mcs;
-          ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL,first_rb,4);
+          ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->rballoc = mac_xface->computeRIV(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL,first_rb,4);
           ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->type = 1;
           ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->vrb_type = 0;
           ((DCI1A_20MHz_FDD_t*)BCCH_alloc_pdu)->ndi = 1;
@@ -325,7 +325,7 @@ schedule_SI(
 	LOG_D(OPT,"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
 	    module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
       }
-      if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+      if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
         LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3, TBS %d)\n",
               frameP,
               CC_id,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 62422bf9ae12b7fef1a067d06f6b39ae75cb9785..c5415b1d26dacc9406e19b56b6c3a1159c547a21 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -1527,7 +1527,7 @@ fill_DLSCH_dci(
 
 
         /// Synchronizing rballoc with rballoc_sub
-        for(i=0; i<PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RBG; i++) {
+        for(i=0; i<PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RBG; i++) {
           rballoc_sub[i] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][i];
         }
 
@@ -1539,8 +1539,8 @@ fill_DLSCH_dci(
         case 2:
           LOG_D(MAC,"[eNB %d] CC_id %d Adding UE %d spec DCI for %d PRBS \n",module_idP, CC_id, UE_id, nb_rb);
 
-          if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-            switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+          if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+            switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
               ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->rah = 0;
@@ -1579,7 +1579,7 @@ fill_DLSCH_dci(
 
 
           } else {
-            switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+            switch(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
               ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rah = 0;
@@ -1632,8 +1632,8 @@ fill_DLSCH_dci(
           LOG_D(MAC,"[eNB %d] CC_id %d Adding Format 2A UE %d spec DCI for %d PRBS (rb alloc: %x) \n",
                 module_idP, CC_id, UE_id, nb_rb);
 
-          if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
-            switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+          if (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.frame_type == TDD) {
+            switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
               ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
@@ -1672,7 +1672,7 @@ fill_DLSCH_dci(
 
 
           } else {
-            switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+            switch(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
             case 6:
               ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
               ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
@@ -1834,7 +1834,7 @@ update_ul_dci(
   int                  i;
   DCI0_5MHz_TDD_1_6_t *ULSCH_dci = NULL;;
 
-  if (mac_xface->lte_frame_parms->frame_type == TDD) {
+  if (mac_xface->frame_parms->frame_type == TDD) {
     for (i=0; i<DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci; i++) {
       ULSCH_dci = (DCI0_5MHz_TDD_1_6_t *)DCI_pdu->dci_alloc[i].dci_pdu;
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index a6926e15ad3e5f090ef95667d1d2213f2a0d42a7..d13c42362c5a6d44e0623f91040ff01a8a674675 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -159,7 +159,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
         // Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
         switch (subframeP) {
         case 1:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) {
               if (msi_pos == 1) {
                 msi_flag = 1;
@@ -177,7 +177,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 2:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) {
               if (msi_pos == 2) {
                 msi_flag = 1;
@@ -195,7 +195,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 3:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { // TDD
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) {
               if (msi_pos == 1) {
                 msi_flag = 1;
@@ -226,7 +226,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 4:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) {
+          if (mac_xface->frame_parms->frame_type == TDD) {
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) {
               if (msi_pos == 2) {
                 msi_flag = 1;
@@ -244,7 +244,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 6:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) {
               if (msi_pos == 4) {
                 msi_flag = 1;
@@ -262,7 +262,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 7:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { // TDD
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) {
               if (msi_pos == 3) {
                 msi_flag = 1;
@@ -293,7 +293,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 8:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { //TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { //TDD
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) {
               if (msi_pos == 4) {
                 msi_flag = 1;
@@ -324,7 +324,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
           break;
 
         case 9:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) {
+          if (mac_xface->frame_parms->frame_type == TDD) {
             if ((eNB_mac_inst[module_idP].common_channels[CC_id].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) {
               if (msi_pos == 5) {
                 msi_flag = 1;
@@ -441,7 +441,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
 
       header_len_mcch = 2;
 
-      if (mac_xface->lte_frame_parms->frame_type == TDD) {
+      if (mac_xface->frame_parms->frame_type == TDD) {
         LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n",
               module_idP, CC_id,
               frameP,subframeP,
@@ -473,7 +473,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
     }
   }
 
-  TBS = mac_xface->get_TBS_DL(eNB_mac_inst[module_idP].common_channels[CC_id].MCH_pdu.mcs, mac_xface->lte_frame_parms->N_RB_DL);
+  TBS = mac_xface->get_TBS_DL(eNB_mac_inst[module_idP].common_channels[CC_id].MCH_pdu.mcs, mac_xface->frame_parms->N_RB_DL);
 #ifdef Rel10
   // do not let mcch and mtch multiplexing when relaying is active
   // for sync area 1, so not transmit data
@@ -484,10 +484,10 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
   if (mtch_flag == 1) {
     // Calculate TBS
     /* if ((msi_flag==1) || (mcch_flag==1)) {
-     TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->lte_frame_parms->N_RB_DL);
+     TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL);
      }
      else { // only MTCH in this subframeP
-     TBS = mac_xface->get_TBS(eNB_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9, mac_xface->lte_frame_parms->N_RB_DL);
+     TBS = mac_xface->get_TBS(eNB_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL);
      }
 
     // get MTCH data from RLC (like for DTCH)
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index ece06a5e090160a3603dfacda0ae05c87914608d..25663bafdb44d5d802f0eaa3cba91f1c6fdfc839 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -731,7 +731,7 @@ uint32_t allocate_prbs(int UE_id,unsigned char nb_rb, uint32_t *rballoc)
   uint32_t rballoc_dci=0;
   unsigned char nb_rb_alloc=0;
 
-  for (i=0; i<(mac_xface->lte_frame_parms->N_RB_DL-2); i+=2) {
+  for (i=0; i<(mac_xface->frame_parms->N_RB_DL-2); i+=2) {
     if (((*rballoc>>i)&3)==0) {
       *rballoc |= (3<<i);
       rballoc_dci |= (1<<((12-i)>>1));
@@ -743,10 +743,10 @@ uint32_t allocate_prbs(int UE_id,unsigned char nb_rb, uint32_t *rballoc)
     }
   }
 
-  if ((mac_xface->lte_frame_parms->N_RB_DL&1)==1) {
-    if ((*rballoc>>(mac_xface->lte_frame_parms->N_RB_DL-1)&1)==0) {
-      *rballoc |= (1<<(mac_xface->lte_frame_parms->N_RB_DL-1));
-      rballoc_dci |= 1;//(1<<(mac_xface->lte_frame_parms->N_RB_DL>>1));
+  if ((mac_xface->frame_parms->N_RB_DL&1)==1) {
+    if ((*rballoc>>(mac_xface->frame_parms->N_RB_DL-1)&1)==0) {
+      *rballoc |= (1<<(mac_xface->frame_parms->N_RB_DL-1));
+      rballoc_dci |= 1;//(1<<(mac_xface->frame_parms->N_RB_DL>>1));
     }
   }
 
@@ -793,20 +793,20 @@ uint32_t allocate_prbs_sub(int nb_rb, uint8_t *rballoc)
   //uint8_t number_of_subbands=13;
 
   LOG_T(MAC,"*****Check1RBALLOC****: %d%d%d%d (nb_rb %d,N_RBG %d)\n",
-        rballoc[3],rballoc[2],rballoc[1],rballoc[0],nb_rb,mac_xface->lte_frame_parms->N_RBG);
+        rballoc[3],rballoc[2],rballoc[1],rballoc[0],nb_rb,mac_xface->frame_parms->N_RBG);
 
-  while((nb_rb >0) && (check < mac_xface->lte_frame_parms->N_RBG)) {
+  while((nb_rb >0) && (check < mac_xface->frame_parms->N_RBG)) {
     //printf("rballoc[%d] %d\n",check,rballoc[check]);
     if(rballoc[check] == 1) {
-      rballoc_dci |= (1<<((mac_xface->lte_frame_parms->N_RBG-1)-check));
+      rballoc_dci |= (1<<((mac_xface->frame_parms->N_RBG-1)-check));
 
-      switch (mac_xface->lte_frame_parms->N_RB_DL) {
+      switch (mac_xface->frame_parms->N_RB_DL) {
       case 6:
         nb_rb--;
         break;
 
       case 25:
-        if ((check == mac_xface->lte_frame_parms->N_RBG-1)) {
+        if ((check == mac_xface->frame_parms->N_RBG-1)) {
           nb_rb--;
         } else {
           nb_rb-=2;
@@ -815,7 +815,7 @@ uint32_t allocate_prbs_sub(int nb_rb, uint8_t *rballoc)
         break;
 
       case 50:
-        if ((check == mac_xface->lte_frame_parms->N_RBG-1)) {
+        if ((check == mac_xface->frame_parms->N_RBG-1)) {
           nb_rb-=2;
         } else {
           nb_rb-=3;
@@ -846,7 +846,7 @@ int get_nb_subband(void)
 
   int nb_sb=0;
 
-  switch (mac_xface->lte_frame_parms->N_RB_DL) {
+  switch (mac_xface->frame_parms->N_RB_DL) {
   case 6:
     nb_sb=0;
     break;
diff --git a/openair2/LAYER2/MAC/lte_transport_init.c b/openair2/LAYER2/MAC/lte_transport_init.c
index fa446a4aeebd4ed75194814ef1169744a538c32e..43343ad8eed1a91abf8d23d410a03c330e85161a 100755
--- a/openair2/LAYER2/MAC/lte_transport_init.c
+++ b/openair2/LAYER2/MAC/lte_transport_init.c
@@ -27,9 +27,9 @@
 
 *******************************************************************************/
 
-#define UL_RB_ALLOC mac_xface->computeRIV(mac_xface->lte_frame_parms->N_RB_UL,0,24)
-#define BCCH_RB_ALLOC mac_xface->computeRIV(mac_xface->lte_frame_parms->N_RB_UL,0,4)
-#define RA_RB_ALLOC mac_xface->computeRIV(mac_xface->lte_frame_parms->N_RB_UL,0,4)
+#define UL_RB_ALLOC mac_xface->computeRIV(mac_xface->frame_parms->N_RB_UL,0,24)
+#define BCCH_RB_ALLOC mac_xface->computeRIV(mac_xface->frame_parms->N_RB_UL,0,4)
+#define RA_RB_ALLOC mac_xface->computeRIV(mac_xface->frame_parms->N_RB_UL,0,4)
 #define DLSCH_RB_ALLOC 0x1fff
 #include "extern.h"
 
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index d5a445744d780ae0aa1e1bf7d7fed4a5a7e53a25..7480babd246d1fe7bc1b7bcc76611e38455e4235 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -224,8 +224,8 @@ int mac_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ui
       RA_template = (RA_TEMPLATE *)&eNB_mac_inst[i].common_channels[CC_id].RA_template[0];
 
       for (j=0; j<NB_RA_PROC_MAX; j++) {
-        if (mac_xface->lte_frame_parms->frame_type == TDD) {
-          switch (mac_xface->lte_frame_parms->N_RB_DL) {
+        if (mac_xface->frame_parms->frame_type == TDD) {
+          switch (mac_xface->frame_parms->N_RB_DL) {
           case 6:
             size_bytes1 = sizeof(DCI1A_1_5MHz_TDD_1_6_t);
             size_bytes2 = sizeof(DCI1A_1_5MHz_TDD_1_6_t);
@@ -263,7 +263,7 @@ int mac_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ui
           }
 
         } else {
-          switch (mac_xface->lte_frame_parms->N_RB_DL) {
+          switch (mac_xface->frame_parms->N_RB_DL) {
           case 6:
             size_bytes1 = sizeof(DCI1A_1_5MHz_FDD_t);
             size_bytes2 = sizeof(DCI1A_1_5MHz_FDD_t);
@@ -326,7 +326,7 @@ int mac_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, ui
   //ICIC init param
 #ifdef ICIC
   uint8_t SB_size;
-  SB_size=mac_xface->get_SB_size(mac_xface->lte_frame_parms->N_RB_DL);
+  SB_size=mac_xface->get_SB_size(mac_xface->frame_parms->N_RB_DL);
 
   srand (time(NULL));
 
@@ -465,7 +465,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui
   mac_xface->UL_failure_indication     = UL_failure_indication;
   mac_xface->rx_sdu                    = rx_sdu;
   mac_xface->get_dlsch_sdu             = get_dlsch_sdu;
-  mac_xface->get_eNB_UE_stats          = get_eNB_UE_stats;
+  mac_xface->get_eNB_UE_stats          = get_UE_stats;
   mac_xface->get_transmission_mode     = get_transmission_mode;
   mac_xface->get_rballoc               = get_rballoc;
   mac_xface->get_nb_rb                 = conv_nprb;
@@ -494,7 +494,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui
 
 
   LOG_I(MAC,"[MAIN] PHY Frame configuration \n");
-  mac_xface->lte_frame_parms = frame_parms;
+  mac_xface->frame_parms = frame_parms;
 
   mac_xface->get_ue_active_harq_pid = get_ue_active_harq_pid;
   mac_xface->get_PL                 = get_PL;
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index d28614699bbcf67c21e4a76318d57d424d7daaae..a3e2b2699bd7ea60ab22114faaa49db4d77b3fa7 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -198,7 +198,7 @@ void assign_rbs_required (module_id_t Mod_id,
 
     /*
     if ((mac_get_rrc_status(Mod_id,1,UE_id) < RRC_RECONFIGURED)){  // If we still don't have a default radio bearer
-      nb_rbs_required[pCCid][UE_id] = PHY_vars_eNB_g[Mod_id][pCCid]->lte_frame_parms.N_RB_DL;
+      nb_rbs_required[pCCid][UE_id] = PHY_vars_eNB_g[Mod_id][pCCid]->frame_parms.N_RB_DL;
       continue;
     }
     */
@@ -649,8 +649,8 @@ void dlsch_scheduler_pre_processor (module_id_t   Mod_id,
 
 
                         if ((j == N_RBG[CC_id]-1) &&
-                            ((PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms.N_RB_DL == 25) ||
-                             (PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms.N_RB_DL == 50))) {
+                            ((PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms.N_RB_DL == 25) ||
+                             (PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms.N_RB_DL == 50))) {
 			  
                           nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit[CC_id]+1;
                           ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit[CC_id]-1;
@@ -759,7 +759,7 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
   UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
   rnti_t rnti = UE_RNTI(module_idP,UE_id);
   uint8_t *vrb_map = eNB_mac_inst[module_idP].common_channels[CC_id].vrb_map;
-  int RBGsize = PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL/N_RBG;
+  int RBGsize = PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL/N_RBG;
 #ifdef SF05_LIMIT
   //int subframe05_limit=0;
   int sf05_upper=-1,sf05_lower=-1;
@@ -776,7 +776,7 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
     // WE SHOULD PROTECT the eNB_UE_stats with a mutex here ...
 
     ue_sched_ctl->ta_timer = 20;  // wait 20 subframes before taking TA measurement from PHY
-    switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+    switch (PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL) {
     case 6:
       ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update;
       break;
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index 669077bf4fddde7f649eb779cdde92088d329064..7c9c96f01e8683fc70dbcaf760fc78a3326773ac 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -252,13 +252,13 @@ void get_prach_resources(module_id_t module_idP,
 
   // choose random PRACH resource in TDD
   if (UE_mac_inst[module_idP].tdd_Config) {
-    num_prach = mac_xface->get_num_prach_tdd(mac_xface->lte_frame_parms);
+    num_prach = mac_xface->get_num_prach_tdd(mac_xface->frame_parms);
 
     if ((num_prach>0) && (num_prach<6)) {
       UE_mac_inst[module_idP].RA_prach_resources.ra_TDD_map_index = (taus()%num_prach);
     }
 
-    f_id = mac_xface->get_fid_prach_tdd(mac_xface->lte_frame_parms,
+    f_id = mac_xface->get_fid_prach_tdd(mac_xface->frame_parms,
                                         UE_mac_inst[module_idP].RA_prach_resources.ra_TDD_map_index);
   }
 
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index ee6340cb43a4b7dfb6483725b3e57cffeba8d328..1d7e49070bca1232f3dd748535d782eac8c44485 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -728,7 +728,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
         // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
         switch (subframe) {
         case 1:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) {
               if (msi_pos == 1) {
                 msi_flag = 1;
@@ -746,7 +746,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 2:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) {
               if (msi_pos == 2) {
                 msi_flag = 1;
@@ -764,7 +764,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 3:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { // TDD
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) {
               if (msi_pos == 1) {
                 msi_flag = 1;
@@ -795,7 +795,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 4:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) {
+          if (mac_xface->frame_parms->frame_type == TDD) {
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) {
               if (msi_pos == 2) {
                 msi_flag = 1;
@@ -813,7 +813,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 6:
-          if (mac_xface->lte_frame_parms->frame_type == FDD) {
+          if (mac_xface->frame_parms->frame_type == FDD) {
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) {
               if (msi_pos == 4) {
                 msi_flag = 1;
@@ -831,7 +831,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 7:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { // TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { // TDD
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) {
               if (msi_pos == 3) {
                 msi_flag = 1;
@@ -862,7 +862,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 8:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) { //TDD
+          if (mac_xface->frame_parms->frame_type == TDD) { //TDD
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) {
               if (msi_pos == 4) {
                 msi_flag = 1;
@@ -893,7 +893,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
           break;
 
         case 9:
-          if (mac_xface->lte_frame_parms->frame_type == TDD) {
+          if (mac_xface->frame_parms->frame_type == TDD) {
             if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) {
               if (msi_pos == 5) {
                 msi_flag = 1;
diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h
index a85c2b15f2bf8212654a82ad73ea6e8d48553ab4..5d933094f31931c9842daff9f5e79a35d8dea01b 100755
--- a/openair2/PHY_INTERFACE/defs.h
+++ b/openair2/PHY_INTERFACE/defs.h
@@ -332,7 +332,7 @@ typedef struct {
   unsigned char cluster_head_index;
 
   /// PHY Frame Configuration
-  LTE_DL_FRAME_PARMS *lte_frame_parms;
+  LTE_DL_FRAME_PARMS *frame_parms;
 
   uint8_t (*get_prach_prb_offset)(LTE_DL_FRAME_PARMS *frame_parms, uint8_t tdd_mapindex, uint16_t Nf); 
 
diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c
index 01c1ee6ca90489ee55afe0c4f5502c5ced82599e..c72c106e0f458b3412328cef5967b1d59d5358d1 100644
--- a/openair2/RRC/LITE/rrc_UE.c
+++ b/openair2/RRC/LITE/rrc_UE.c
@@ -3467,7 +3467,7 @@ void ue_meas_filtering( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
           UE_rrc_inst[ctxt_pP->module_id].rsrp_db[eNB_offset] =
             (dB_fixed_times10(mac_xface->get_RSRP(ctxt_pP->module_id,0,eNB_offset))/10.0) -
             mac_xface->get_rx_total_gain_dB(ctxt_pP->module_id,0) -
-            dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12);
+            dB_fixed(mac_xface->frame_parms->N_RB_DL*12);
           UE_rrc_inst[ctxt_pP->module_id].rsrp_db_filtered[eNB_offset] =
             (1.0-a)*UE_rrc_inst[ctxt_pP->module_id].rsrp_db_filtered[eNB_offset] +
             a*UE_rrc_inst[ctxt_pP->module_id].rsrp_db[eNB_offset];
@@ -3478,7 +3478,7 @@ void ue_meas_filtering( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
 
           LOG_D(RRC,"RSRP_dBm: %3.2f \n",(dB_fixed_times10(mac_xface->get_RSRP(ctxt_pP->module_id,0,eNB_offset))/10.0));
           LOG_D(RRC,"gain_loss_dB: %d \n",mac_xface->get_rx_total_gain_dB(ctxt_pP->module_id,0));
-          LOG_D(RRC,"gain_fixed_dB: %d \n",dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12));
+          LOG_D(RRC,"gain_fixed_dB: %d \n",dB_fixed(mac_xface->frame_parms->N_RB_DL*12));
           LOG_D(PHY,"[UE %d] Frame %d, RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB)\n",
                 ctxt_pP->module_id,
                 ctxt_pP->frame,
@@ -3736,7 +3736,7 @@ static uint8_t check_trigger_meas_event(
   TimeToTrigger_t ttt )
 {
   uint8_t eNB_offset;
-  uint8_t currentCellIndex = mac_xface->lte_frame_parms->Nid_cell;
+  uint8_t currentCellIndex = mac_xface->frame_parms->Nid_cell;
   uint8_t tmp_offset;
 
   LOG_I(RRC,"[UE %d] ofn(%d) ocn(%d) hys(%d) ofs(%d) ocs(%d) a3_offset(%d) ttt(%d) rssi %3.1f\n",
@@ -3769,9 +3769,9 @@ static uint8_t check_trigger_meas_event(
         LOG_D(RRC,"[UE %d] Frame %d eNB %d: Handover triggered: targetCellId: %d currentCellId: %d eNB_offset: %d rsrp source: %3.1f rsrp target: %3.1f\n", \
               ue_mod_idP, frameP, eNB_index,
               UE_rrc_inst->HandoverInfoUe.targetCellId,ue_cnx_index,eNB_offset,
-              (dB_fixed_times10(UE_rrc_inst[ue_mod_idP].rsrp_db[0])/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP,0)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12),
+              (dB_fixed_times10(UE_rrc_inst[ue_mod_idP].rsrp_db[0])/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP,0)-dB_fixed(mac_xface->frame_parms->N_RB_DL*12),
               (dB_fixed_times10(UE_rrc_inst[ue_mod_idP].rsrp_db[eNB_offset])/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP,
-                  0)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12));
+                  0)-dB_fixed(mac_xface->frame_parms->N_RB_DL*12));
         UE_rrc_inst->Info[0].handoverTarget = eNB_offset;
         //LOG_D(RRC,"PHY_ID: %d \n",UE_rrc_inst->HandoverInfoUe.targetCellId);
         return 1;
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 0d7c8f915ea208bda9a0aec3d67087017c035337..dcc3264828404ef2889d1262271eb5f4cb2b9ed8 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -194,7 +194,7 @@ init_SI(
     eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].sizeof_SIB1 = do_SIB1(
           ctxt_pP->module_id,
           CC_id,
-          mac_xface->lte_frame_parms,
+          mac_xface->frame_parms,
           (uint8_t*)eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].SIB1,
           &eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].siblock1,
           &eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].sib1
@@ -224,7 +224,7 @@ init_SI(
     eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].sizeof_SIB23 = do_SIB23(
           ctxt_pP->module_id,
           CC_id,
-          mac_xface->lte_frame_parms,
+          mac_xface->frame_parms,
           eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].SIB23,
           &eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].systemInformation,
           &eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].sib2,
@@ -390,7 +390,7 @@ init_MCCH(
       mac_xface->macphy_exit("[RRC][init_MCCH] not enough memory\n");
     } else {
       eNB_rrc_inst[enb_mod_idP].carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig(enb_mod_idP,
-          mac_xface->lte_frame_parms,
+          mac_xface->frame_parms,
           sync_area,
           (uint8_t *)eNB_rrc_inst[enb_mod_idP].carrier[CC_id].MCCH_MESSAGE[sync_area],
           &eNB_rrc_inst[enb_mod_idP].carrier[CC_id].mcch,
@@ -571,7 +571,7 @@ rrc_eNB_ue_context_stmsi_exist(
 	  m_tmsiP, mme_codeP, ue_context_p, 
 	  ue_context_p->ue_context.rnti);
     if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
-      printf("S-TMSI %x, MME %x\n",
+      printf("=> S-TMSI %x, MME %x\n",
 	    ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
 	    ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code);
       if (ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi == m_tmsiP)
@@ -2322,11 +2322,11 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
   physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup;
   physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = ue_context_pP->local_uid;
 
-  if (mac_xface->lte_frame_parms->frame_type == 0) {  // FDD
+  if (mac_xface->frame_parms->frame_type == 0) {  // FDD
     physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5 + (ue_context_pP->local_uid %
         10);   // Isr = 5 (every 10 subframes, offset=2+UE_id mod3)
   } else {
-    switch (mac_xface->lte_frame_parms->tdd_config) {
+    switch (mac_xface->frame_parms->tdd_config) {
     case 1:
       physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_context_pP->local_uid & 1) + ((
             ue_context_pP->local_uid & 3) >> 1) * 5;    // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 7 for UE2, 8 for UE3 , 2 for UE4 etc..)
@@ -3299,9 +3299,9 @@ rrc_eNB_generate_RRCConnectionSetup(
     do_RRCConnectionSetup(ctxt_pP,
                           ue_context_pP,
                           (uint8_t*) eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Payload,
-                          (mac_xface->lte_frame_parms->nb_antennas_tx==2)?2:1,
+                          (mac_xface->frame_parms->nb_antennas_tx==2)?2:1,
                           rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
-                          mac_xface->lte_frame_parms,
+                          mac_xface->frame_parms,
                           SRB_configList,
                           &ue_context_pP->ue_context.physicalConfigDedicated);
 
@@ -3742,7 +3742,7 @@ rrc_eNB_decode_ccch(
             if ((ue_context_p = rrc_eNB_ue_context_stmsi_exist(ctxt_pP, mme_code, m_tmsi))) {
 
 		//#warning "TODO: stmsi_exist: remove UE from MAC/PHY (how?)"
-	      LOG_I(RRC," S-TMSI exists, ue_context_p %p\n",ue_context_p);
+	      LOG_I(RRC," S-TMSI exists, ue_context_p %p, old rnti %x => %x\n",ue_context_p,ue_context_p->ue_context.rnti);
 	      stmsi_received=1;
 	      ue_context_p->ue_context.rnti = ctxt_pP->rnti;
 	      //   AssertFatal(0 == 1, "TODO: remove UE from MAC/PHY (how?)");
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 7234cf4f087cc4c1c4bfa400e8e933cdcace1ca7..582610c5c2de17166e0b781d5641a70a5cb3f9bf 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -135,19 +135,7 @@ extern pthread_cond_t sync_cond;
 extern pthread_mutex_t sync_mutex;
 extern int sync_var;
 
-pthread_attr_t                  attr_eNB_proc_tx[MAX_NUM_CCs][NUM_ENB_THREADS];
-pthread_attr_t                  attr_eNB_proc_rx[MAX_NUM_CCs][NUM_ENB_THREADS];
-
-#ifndef LOWLATENCY
-struct sched_param              sched_param_eNB_proc_tx[MAX_NUM_CCs][NUM_ENB_THREADS];
-struct sched_param              sched_param_eNB_proc_rx[MAX_NUM_CCs][NUM_ENB_THREADS];
-#endif
-
-pthread_t                       main_eNB_thread;
-pthread_attr_t                  attr_dlsch_threads;
-#ifndef LOWLATENCY
-struct sched_param              sched_param_dlsch;
-#endif
+//pthread_t                       main_eNB_thread;
 
 time_stats_t softmodem_stats_mt; // main thread
 time_stats_t softmodem_stats_hw; //  hw acquisition
@@ -171,7 +159,7 @@ static struct {
 
 void exit_fun(const char* s);
 
-void init_eNB(void);
+void init_eNB(eNB_func_t node_function);
 void stop_eNB(void);
 
 void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
@@ -180,51 +168,51 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
   unsigned int aa,slot_offset, slot_offset_F;
   int dummy_tx_b[7680*4] __attribute__((aligned(32)));
   int i, tx_offset;
-  int slot_sizeF = (phy_vars_eNB->lte_frame_parms.ofdm_symbol_size)*
-                   ((phy_vars_eNB->lte_frame_parms.Ncp==1) ? 6 : 7);
+  int slot_sizeF = (phy_vars_eNB->frame_parms.ofdm_symbol_size)*
+                   ((phy_vars_eNB->frame_parms.Ncp==1) ? 6 : 7);
   int len;
 
   slot_offset_F = (subframe<<1)*slot_sizeF;
 
-  slot_offset = subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti;
+  slot_offset = subframe*phy_vars_eNB->frame_parms.samples_per_tti;
 
-  if ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_DL)||
-      ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_S))) {
+  if ((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_DL)||
+      ((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_S))) {
     //    LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
 
 
-    for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
-      if (phy_vars_eNB->lte_frame_parms.Ncp == EXTENDED) {
-        PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
+    for (aa=0; aa<phy_vars_eNB->frame_parms.nb_antennas_tx; aa++) {
+      if (phy_vars_eNB->frame_parms.Ncp == EXTENDED) {
+        PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
                      dummy_tx_b,
-                     phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
+                     phy_vars_eNB->frame_parms.ofdm_symbol_size,
                      6,
-                     phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
+                     phy_vars_eNB->frame_parms.nb_prefix_samples,
                      CYCLIC_PREFIX);
-        PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
-                     dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1),
-                     phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
+        PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
+                     dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
+                     phy_vars_eNB->frame_parms.ofdm_symbol_size,
                      6,
-                     phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
+                     phy_vars_eNB->frame_parms.nb_prefix_samples,
                      CYCLIC_PREFIX);
       } else {
-        normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
+        normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
                           dummy_tx_b,
                           7,
-                          &(phy_vars_eNB->lte_frame_parms));
+                          &(phy_vars_eNB->frame_parms));
 	// if S-subframe generate first slot only
-	if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL)
-	  normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
-			    dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1),
+	if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL)
+	  normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
+			    dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
 			    7,
-			    &(phy_vars_eNB->lte_frame_parms));
+			    &(phy_vars_eNB->frame_parms));
       }
 
       // if S-subframe generate first slot only
-      if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S)
-	len = phy_vars_eNB->lte_frame_parms.samples_per_tti>>1;
+      if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S)
+	len = phy_vars_eNB->frame_parms.samples_per_tti>>1;
       else
-	len = phy_vars_eNB->lte_frame_parms.samples_per_tti;
+	len = phy_vars_eNB->frame_parms.samples_per_tti;
       /*
       for (i=0;i<len;i+=4) {
 	dummy_tx_b[i] = 0x100;
@@ -237,38 +225,38 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
 
 	
         if (tx_offset<0)
-          tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
+          tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
 
-        if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti))
-          tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
+        if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti))
+          tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
 
-	((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<<openair0_cfg[0].iq_txshift;
+	((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<<openair0_cfg[0].iq_txshift;
 	
-	((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<<openair0_cfg[0].iq_txshift;
+	((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<<openair0_cfg[0].iq_txshift;
      }
      // if S-subframe switch to RX in second subframe
-     if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) {
+     if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S) {
        for (i=0; i<len; i++) {
-	 phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset++] = 0x00010001;
+	 phy_vars_eNB->common_vars.txdata[0][aa][tx_offset++] = 0x00010001;
        }
      }
 
-     if ((((phy_vars_eNB->lte_frame_parms.tdd_config==0) ||
-	  (phy_vars_eNB->lte_frame_parms.tdd_config==1) ||
-	  (phy_vars_eNB->lte_frame_parms.tdd_config==2) ||
-	  (phy_vars_eNB->lte_frame_parms.tdd_config==6)) && 
+     if ((((phy_vars_eNB->frame_parms.tdd_config==0) ||
+	  (phy_vars_eNB->frame_parms.tdd_config==1) ||
+	  (phy_vars_eNB->frame_parms.tdd_config==2) ||
+	  (phy_vars_eNB->frame_parms.tdd_config==6)) && 
 	  (subframe==0)) || (subframe==5)) {
        // turn on tx switch N_TA_offset before
        //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
        for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
 	 tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2;
 	 if (tx_offset<0)
-	   tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
+	   tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
 	 
-	 if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti))
-	   tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
+	 if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti))
+	   tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
 	 
-	 phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset] = 0x00000000;
+	 phy_vars_eNB->common_vars.txdata[0][aa][tx_offset] = 0x00000000;
        }
      }
     }
@@ -290,11 +278,11 @@ static void* eNB_thread_tx( void* param )
   char tx_time_name[101];
 
   if (opp_enabled == 1) {
-    snprintf(tx_time_name, 100,"/tmp/%s_tx_time_thread_sf_%d", "eNB", proc->subframe);
+    snprintf(tx_time_name, 100,"/tmp/%s_tx_time_thread_sf_%d", "eNB", proc->thread_index);
     tx_time_file = fopen(tx_time_name,"w");
   }
   // set default return value
-  eNB_thread_tx_status[proc->subframe] = 0;
+  eNB_thread_tx_status[proc->thread_index] = 0;
 
   MSC_START_USE();
 
@@ -317,10 +305,10 @@ static void* eNB_thread_tx( void* param )
 
   if (sched_setattr(0, &attr, flags) < 0 ) {
     perror("[SCHED] eNB tx thread: sched_setattr failed\n");
-    return &eNB_thread_tx_status[proc->subframe];
+    return &eNB_thread_tx_status[proc->thread_index];
   }
 
-  LOG_I( HW, "[SCHED] eNB TX deadline thread %d(TID %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() );
+  LOG_I( HW, "[SCHED] eNB TX deadline thread %d(TID %ld) started on CPU %d\n", proc->thread_index, gettid(), sched_getcpu() );
 
 #else //LOW_LATENCY
   int policy, s, j;
@@ -383,7 +371,7 @@ static void* eNB_thread_tx( void* param )
 
    }
 
- LOG_I( HW, "[SCHED][eNB] TX thread %d started on CPU %d TID %ld, sched_policy = %s , priority = %d, CPU Affinity=%s \n", proc->subframe, sched_getcpu(),gettid(),
+ LOG_I( HW, "[SCHED][eNB] TX thread %d started on CPU %d TID %ld, sched_policy = %s , priority = %d, CPU Affinity=%s \n", proc->thread_index, sched_getcpu(),gettid(),
                    (policy == SCHED_FIFO)  ? "SCHED_FIFO" :
                    (policy == SCHED_RR)    ? "SCHED_RR" :
                    (policy == SCHED_OTHER) ? "SCHED_OTHER" :
@@ -396,12 +384,13 @@ static void* eNB_thread_tx( void* param )
 
   mlockall(MCL_CURRENT | MCL_FUTURE);
 
+
   while (!oai_exit) {
 
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe), 0 );
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->thread_index), 0 );
 
     if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
-      LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc %d\n", proc->subframe );
+      LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc %d\n", proc->thread_index );
       exit_fun("nothing to add");
       break;
     }
@@ -413,66 +402,68 @@ static void* eNB_thread_tx( void* param )
     }
 
     if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {
-      LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe);
+      LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->thread_index);
       exit_fun("nothing to add");
       break;
     }
 
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe), 1 );
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->thread_index), 1 );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_ENB, proc->frame_tx );
-    start_meas( &softmodem_stats_tx_sf[proc->subframe] );
-
+    start_meas( &softmodem_stats_tx_sf[proc->thread_index] );
+  
     if (oai_exit) break;
 
-    if (((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD) &&
-         ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx) == SF_DL) ||
-          (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx) == SF_S))) ||
-        (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD)) {
+    if (((PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.frame_type == TDD) &&
+         ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->frame_parms,proc->subframe_tx) == SF_DL) ||
+          (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->frame_parms,proc->subframe_tx) == SF_S))) ||
+        (PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.frame_type == FDD)) {
       /* run PHY TX procedures the one after the other for all CCs to avoid race conditions
        * (may be relaxed in the future for performance reasons)
        */
-      if (pthread_mutex_lock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) {
-        LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->subframe);
+      if (pthread_mutex_lock(&sync_phy_proc[proc->thread_index].mutex_phy_proc_tx) != 0) {
+        LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->thread_index);
         exit_fun("nothing to add");
         break;
       }
       /* wait for our turn or oai_exit */
-      while (sync_phy_proc[proc->subframe].phy_proc_CC_id != proc->CC_id && !oai_exit) {
-        pthread_cond_wait(&sync_phy_proc[proc->subframe].cond_phy_proc_tx,
-                          &sync_phy_proc[proc->subframe].mutex_phy_proc_tx);
+      while (sync_phy_proc[proc->thread_index].phy_proc_CC_id != proc->CC_id && !oai_exit) {
+        pthread_cond_wait(&sync_phy_proc[proc->thread_index].cond_phy_proc_tx,
+                          &sync_phy_proc[proc->thread_index].mutex_phy_proc_tx);
       }
 
-      if (pthread_mutex_unlock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) {
-        LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->subframe);
+      if (pthread_mutex_unlock(&sync_phy_proc[proc->thread_index].mutex_phy_proc_tx) != 0) {
+        LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->thread_index);
         exit_fun("nothing to add");
       }
 
       if (oai_exit)
         break;
-
-      phy_procedures_eNB_TX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay, NULL );
-
-      /* we're done, let the next one proceed */
-      if (pthread_mutex_lock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) {
-        LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->subframe);
-        exit_fun("nothing to add");
-        break;
-      }
-      sync_phy_proc[proc->subframe].phy_proc_CC_id++;
-      sync_phy_proc[proc->subframe].phy_proc_CC_id %= MAX_NUM_CCs;
-      pthread_cond_broadcast(&sync_phy_proc[proc->subframe].cond_phy_proc_tx);
-      if (pthread_mutex_unlock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) {
-        LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->subframe);
-        exit_fun("nothing to add");
-        break;
+      if (PHY_vars_eNB_g[0][proc->CC_id]->node_function != NGFI_RRU_IF4) { 
+	phy_procedures_eNB_TX( proc->thread_index, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay, NULL );
+	
+	/* we're done, let the next one proceed */
+	if (pthread_mutex_lock(&sync_phy_proc[proc->thread_index].mutex_phy_proc_tx) != 0) {
+	  LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->thread_index);
+	  exit_fun("nothing to add");
+	  break;
+	}
+	sync_phy_proc[proc->thread_index].phy_proc_CC_id++;
+	sync_phy_proc[proc->thread_index].phy_proc_CC_id %= MAX_NUM_CCs;
+	pthread_cond_broadcast(&sync_phy_proc[proc->thread_index].cond_phy_proc_tx);
+	if (pthread_mutex_unlock(&sync_phy_proc[proc->thread_index].mutex_phy_proc_tx) != 0) {
+	  LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->thread_index);
+	  exit_fun("nothing to add");
+	  break;
+	}
       }
     }
 
-    do_OFDM_mod_rt( proc->subframe_tx, PHY_vars_eNB_g[0][proc->CC_id] );
+    if (PHY_vars_eNB_g[0][proc->CC_id]->node_function != NGFI_RCC_IF4) {
+      do_OFDM_mod_rt( proc->subframe_tx, PHY_vars_eNB_g[0][proc->CC_id] );
     /*
-    short *txdata = (short*)&PHY_vars_eNB_g[0][proc->CC_id]->lte_eNB_common_vars.txdata[0][0][proc->subframe_tx*PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.samples_per_tti];
-    int i;
-    for (i=0;i<PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.samples_per_tti*2;i+=8) {
+      short *txdata = (short*)&PHY_vars_eNB_g[0][proc->CC_id]->common_vars.txdata[0][0][proc->subframe_tx*PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.samples_per_tti];
+      int i;
+      for (i=0;i<PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.samples_per_tti*2;i+=8) {
       txdata[i] = 2047;
       txdata[i+1] = 0;
       txdata[i+2] = 0;
@@ -481,10 +472,12 @@ static void* eNB_thread_tx( void* param )
       txdata[i+5] = 0;
       txdata[i+6] = 0;
       txdata[i+7] = -2047;
-    }
+      }
     */
+    }
+
     if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
-      LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc %d\n", proc->subframe );
+      LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc %d\n", proc->thread_index );
       exit_fun("nothing to add");
       break;
     }
@@ -492,39 +485,56 @@ static void* eNB_thread_tx( void* param )
     proc->instance_cnt_tx--;
 
     if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {
-      LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n", proc->subframe );
+      LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n", proc->thread_index );
       exit_fun("nothing to add");
       break;
     }
 
-    proc->frame_tx++;
-
-    if (proc->frame_tx==1024)
-      proc->frame_tx=0;
-    stop_meas( &softmodem_stats_tx_sf[proc->subframe] );
+    stop_meas( &softmodem_stats_tx_sf[proc->thread_index] );
 #ifdef LOWLATENCY
     if (opp_enabled){
-      if(softmodem_stats_tx_sf[proc->subframe].diff_now/(cpuf) > attr.sched_runtime){
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, (softmodem_stats_tx_sf[proc->subframe].diff_now/cpuf - attr.sched_runtime)/1000000.0);
+      if(softmodem_stats_tx_sf[proc->thread_index].diff_now/(cpuf) > attr.sched_runtime){
+	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, (softmodem_stats_tx_sf[proc->thread_index].diff_now/cpuf - attr.sched_runtime)/1000000.0);
       }
     }
 #endif 
-    print_meas_now(&softmodem_stats_tx_sf[proc->subframe],"eNB_TX_SF",proc->subframe, tx_time_file);
+    print_meas_now(&softmodem_stats_tx_sf[proc->thread_index],"eNB_TX_SF",proc->thread_index, tx_time_file);
 
   }
 
 
 
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe), 0 );
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->thread_index), 0 );
 
 #ifdef DEBUG_THREADS
-  printf( "Exiting eNB thread TX %d\n", proc->subframe );
+  printf( "Exiting eNB thread TX %d\n", proc->thread_index );
 #endif
 
-  eNB_thread_tx_status[proc->subframe] = 0;
-  return &eNB_thread_tx_status[proc->subframe];
+  eNB_thread_tx_status[proc->thread_index] = 0;
+  return &eNB_thread_tx_status[proc->thread_index];
 }
 
+#if defined(ENABLE_ITTI)
+static void wait_system_ready (char *message, volatile int *start_flag)
+{
+  /* Wait for eNB application initialization to be complete (eNB registration to MME) */
+  {
+    static char *indicator[] = {".    ", "..   ", "...  ", ".... ", ".....",
+                                " ....", "  ...", "   ..", "    .", "     "
+                               };
+    int i = 0;
+
+    while ((!oai_exit) && (*start_flag == 0)) {
+      LOG_N(EMU, message, indicator[i]);
+      fflush(stdout);
+      i = (i + 1) % (sizeof(indicator) / sizeof(indicator[0]));
+      usleep(200000);
+    }
+
+    LOG_D(EMU,"\n");
+  }
+}
+#endif
 
 /*!
  * \brief The receive thread of eNB.
@@ -537,17 +547,19 @@ static void* eNB_thread_rx( void* param )
   static int eNB_thread_rx_status[NUM_ENB_THREADS];
 
   eNB_proc_t *proc = (eNB_proc_t*)param;
+  PHY_VARS_eNB *eNB = PHY_vars_eNB_g[0][proc->CC_id];
+  LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
 
   FILE  *rx_time_file = NULL;
   char rx_time_name[101];
   //int i;
 
   if (opp_enabled == 1){
-    snprintf(rx_time_name, 100,"/tmp/%s_rx_time_thread_sf_%d", "eNB", proc->subframe);
+    snprintf(rx_time_name, 100,"/tmp/%s_rx_time_thread_sf_%d", "eNB", proc->thread_index);
     rx_time_file = fopen(rx_time_name,"w");
   }
   // set default return value
-  eNB_thread_rx_status[proc->subframe] = 0;
+  eNB_thread_rx_status[proc->thread_index] = 0;
 
   MSC_START_USE();
 
@@ -570,10 +582,10 @@ static void* eNB_thread_rx( void* param )
 
   if (sched_setattr(0, &attr, flags) < 0 ) {
     perror("[SCHED] eNB RX sched_setattr failed\n");
-    return &eNB_thread_rx_status[proc->subframe];
+    return &eNB_thread_rx_status[proc->thread_index];
   }
 
-  LOG_I( HW, "[SCHED] eNB RX deadline thread %d(TID %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() );
+  LOG_I( HW, "[SCHED] eNB RX deadline thread %d(TID %ld) started on CPU %d\n", proc->thread_index, gettid(), sched_getcpu() );
 #else // LOW_LATENCY
   int policy, s, j;
   struct sched_param sparam;
@@ -640,7 +652,7 @@ static void* eNB_thread_rx( void* param )
    }
 
 
-  LOG_I( HW, "[SCHED][eNB] RX thread %d started on CPU %d TID %ld, sched_policy = %s, priority = %d, CPU Affinity = %s\n", proc->subframe, sched_getcpu(),gettid(),
+  LOG_I( HW, "[SCHED][eNB] RX thread %d started on CPU %d TID %ld, sched_policy = %s, priority = %d, CPU Affinity = %s\n", proc->thread_index, sched_getcpu(),gettid(),
 	 (policy == SCHED_FIFO)  ? "SCHED_FIFO" :
 	 (policy == SCHED_RR)    ? "SCHED_RR" :
 	 (policy == SCHED_OTHER) ? "SCHED_OTHER" :
@@ -653,84 +665,240 @@ static void* eNB_thread_rx( void* param )
  mlockall(MCL_CURRENT | MCL_FUTURE);
 
 
+ // wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe of TX and RX threads
+ printf( "waiting for sync (eNB_thread_rx %d)\n",proc->thread_index);
+ pthread_mutex_lock( &sync_mutex );
+
+ while (sync_var<0)
+   pthread_cond_wait( &sync_cond, &sync_mutex );
+ 
+ pthread_mutex_unlock(&sync_mutex);
+ 
+ printf( "got sync (eNB_thread)\n" );
+ 
+#if defined(ENABLE_ITTI)
+  wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
+#endif 
+
+ // This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
  while (!oai_exit) {
    
-   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->subframe), 0 );
-   
-   if (pthread_mutex_lock(&proc->mutex_rx) != 0) {
-     LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB RX proc %d\n", proc->subframe );
-     exit_fun( "error locking mutex" );
-     break;
-   }
-   
-   while (proc->instance_cnt_rx < 0) {
-     // most of the time the thread is waiting here
-     // proc->instance_cnt_rx is -1
-     pthread_cond_wait( &proc->cond_rx, &proc->mutex_rx ); // this unlocks mutex_rx while waiting and then locks it again
-   }
+   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0, 0 );
    
-   if (pthread_mutex_unlock(&proc->mutex_rx) != 0) {
-     LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB RX proc %d\n", proc->subframe );
-     exit_fun( "error unlocking mutex" );
-     break;
-   }
    
-   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->subframe), 1 );
+   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->thread_index), 1 );
+
    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX_ENB, proc->frame_rx );
-   start_meas( &softmodem_stats_rx_sf[proc->subframe] );
+   start_meas( &softmodem_stats_rx_sf[proc->thread_index] );
    
    if (oai_exit) break;
    
-   if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD )&&(subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_rx)==SF_UL)) ||
-	(PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) {
-     
-     phy_procedures_eNB_RX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay );
+   if ((((fp->frame_type == TDD )&&(subframe_select(fp,proc->subframe_rx)==SF_UL)) ||
+	(fp->frame_type == FDD))) {
+     // this spawns the prach and TX threads inside and updates the frame and subframe counters
+     phy_procedures_eNB_common_RX(proc->thread_index, eNB, 0);
+     if (eNB->node_function != NGFI_RRU_IF4)
+       // this is the ue-specific processing for the subframe and can be multi-threaded later
+       phy_procedures_eNB_uespec_RX(proc->thread_index, eNB, 0, no_relay );
    }
    
-   if ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_rx) == SF_S)) {
-     phy_procedures_eNB_S_RX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay );
+   if ((subframe_select(fp,proc->subframe_rx) == SF_S)) {
+     phy_procedures_eNB_S_RX(proc->thread_index, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay );
+   }
+   
+   stop_meas( &softmodem_stats_rx_sf[proc->thread_index] );
+#ifdef LOWLATENCY
+   if (opp_enabled){
+     if(softmodem_stats_rx_sf[proc->thread_index].diff_now/(cpuf) > attr.sched_runtime){
+       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB, (softmodem_stats_rx_sf[proc->thread_index].diff_now/cpuf - attr.sched_runtime)/1000000.0);
+     }
+   }
+#endif // LOWLATENCY  
+    print_meas_now(&softmodem_stats_rx_sf[proc->thread_index],"eNB_RX_SF",proc->thread_index, rx_time_file);
+  }
+
+  //stop_meas( &softmodem_stats_rx_sf[proc->thread_index] );
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->thread_index), 0 );
+
+
+#ifdef DEBUG_THREADS
+  printf( "Exiting eNB thread RX %d\n", proc->thread_index );
+#endif
+
+  eNB_thread_rx_status[proc->thread_index] = 0;
+  return &eNB_thread_rx_status[proc->thread_index];
+}
+
+
+
+/*!
+ * \brief The prach receive thread of eNB.
+ * \param param is a \ref eNB_proc_t structure which contains the info what to process.
+ * \returns a pointer to an int. The storage is not on the heap and must not be freed.
+ */
+static void* eNB_thread_prach( void* param )
+{
+  static int eNB_thread_prach_status;
+
+  eNB_proc_t *proc = (eNB_proc_t*)param;
+  PHY_VARS_eNB *eNB= PHY_vars_eNB_g[0][proc->CC_id];
+  // set default return value
+  eNB_thread_prach_status = 0;
+
+  MSC_START_USE();
+
+  AssertFatal(proc->thread_index!=0,"Invalid thread index %d for PRACH thread\n",proc->thread_index);
+    
+#ifdef LOWLATENCY
+  struct sched_attr attr;
+  unsigned int flags = 0;
+  uint64_t runtime  = 870000 ;
+  uint64_t deadline = 1   *  1000000;
+  uint64_t period   = 1   * 10000000; // each prach thread has a period of 10ms from the starting point
+ 
+  attr.size = sizeof(attr);
+  attr.sched_flags = 0;
+  attr.sched_nice = 0;
+  attr.sched_priority = 0;
+
+  attr.sched_policy = SCHED_DEADLINE;
+  attr.sched_runtime  = runtime;
+  attr.sched_deadline = deadline;
+  attr.sched_period   = period; 
+
+  if (sched_setattr(0, &attr, flags) < 0 ) {
+    perror("[SCHED] eNB PRACH sched_setattr failed\n");
+    return &eNB_thread_prach_status;
+  }
+
+  LOG_I( HW, "[SCHED] eNB PRACH deadline thread (TID %ld) started on CPU %d\n", 0, gettid(), sched_getcpu() );
+#else // LOW_LATENCY
+  int policy, s, j;
+  struct sched_param sparam;
+  char cpu_affinity[1024];
+  cpu_set_t cpuset;
+
+  /* Set affinity mask to include CPUs 1 to MAX_CPUS */
+  /* CPU 0 is reserved for UHD */
+  /* CPU 1 is reserved for all TX threads */
+  /* CPU 2..MAX_CPUS is reserved for all RX threads */
+  /* Set CPU Affinity only if number of CPUs >2 */
+  CPU_ZERO(&cpuset);
+#ifdef CPU_AFFINITY
+  if (get_nprocs() >2)
+  {
+    for (j = 1; j < get_nprocs(); j++)
+       CPU_SET(j, &cpuset);
+  
+    s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+    if (s != 0)
+    {
+      perror( "pthread_setaffinity_np");  
+      exit_fun (" Error setting processor affinity :");
+    }
+  }
+#endif //CPU_AFFINITY
+  /* Check the actual affinity mask assigned to the thread */
+
+  s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+  if (s != 0)
+  {
+     perror ("pthread_getaffinity_np");
+     exit_fun (" Error getting processor affinity :");
+  }
+  memset(cpu_affinity,0, sizeof(cpu_affinity));
+
+  for (j = 0; j < CPU_SETSIZE; j++)
+     if (CPU_ISSET(j, &cpuset))
+     {  
+        char temp[1024];
+        sprintf (temp, " CPU_%d", j);
+        strcat(cpu_affinity, temp);
+     }
+
+
+  memset(&sparam, 0 , sizeof (sparam)); 
+  sparam.sched_priority = sched_get_priority_max(SCHED_FIFO)-1;
+
+  policy = SCHED_FIFO ; 
+  s = pthread_setschedparam(pthread_self(), policy, &sparam);
+  if (s != 0)
+     {
+     perror("pthread_setschedparam : ");
+     exit_fun("Error setting thread priority");
+     }
+
+  memset(&sparam, 0 , sizeof (sparam));
+
+  s = pthread_getschedparam(pthread_self(), &policy, &sparam);
+  if (s != 0)
+   {
+     perror("pthread_getschedparam");
+     exit_fun("Error getting thread priority");
    }
+
+
+  LOG_I( HW, "[SCHED][eNB] RX thread %d started on CPU %d TID %ld, sched_policy = %s, priority = %d, CPU Affinity = %s\n", proc->thread_index, sched_getcpu(),gettid(),
+	 (policy == SCHED_FIFO)  ? "SCHED_FIFO" :
+	 (policy == SCHED_RR)    ? "SCHED_RR" :
+	 (policy == SCHED_OTHER) ? "SCHED_OTHER" :
+	 "???",
+	 sparam.sched_priority, cpu_affinity);
+  
+  
+#endif // LOWLATENCY
+
+ mlockall(MCL_CURRENT | MCL_FUTURE);
+
+
+ while (!oai_exit) {
+ 
    
-   if (pthread_mutex_lock(&proc->mutex_rx) != 0) {
-     LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB RX proc %d\n", proc->subframe );
+   if (oai_exit) break;
+        
+   if (pthread_mutex_lock(&proc->mutex_prach) != 0) {
+     LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB PRACH proc %d\n", proc->thread_index );
      exit_fun( "error locking mutex" );
      break;
    }
-   
-   proc->instance_cnt_rx--;
-   
-   if (pthread_mutex_unlock(&proc->mutex_rx) != 0) {
-     LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB RX proc %d\n", proc->subframe );
+
+   while (proc->instance_cnt_prach < 0) {
+     // most of the time the thread is waiting here
+     // proc->instance_cnt_tx is -1
+     pthread_cond_wait( &proc->cond_prach, &proc->mutex_prach ); // this unlocks mutex_tx while waiting and then locks it again
+   }
+
+   if (pthread_mutex_unlock(&proc->mutex_prach) != 0) {
+     LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB PRACH proc %d\n", proc->thread_index );
      exit_fun( "error unlocking mutex" );
      break;
    }
    
-   proc->frame_rx++;
+   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,1);
+   prach_procedures(eNB,proc->thread_index,0);
+   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
+    
+   if (pthread_mutex_lock(&proc->mutex_prach) != 0) {
+     LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB PRACH proc %d\n", proc->thread_index );
+     exit_fun( "error locking mutex" );
+     break;
+   }
    
-   if (proc->frame_rx==1024)
-     proc->frame_rx=0;
+   proc->instance_cnt_prach--;
    
-   stop_meas( &softmodem_stats_rx_sf[proc->subframe] );
-#ifdef LOWLATENCY
-   if (opp_enabled){
-     if(softmodem_stats_rx_sf[proc->subframe].diff_now/(cpuf) > attr.sched_runtime){
-       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB, (softmodem_stats_rx_sf[proc->subframe].diff_now/cpuf - attr.sched_runtime)/1000000.0);
-     }
+   if (pthread_mutex_unlock(&proc->mutex_prach) != 0) {
+     LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB RX proc %d\n", proc->thread_index );
+     exit_fun( "error unlocking mutex" );
+     break;
    }
-#endif // LOWLATENCY  
-    print_meas_now(&softmodem_stats_rx_sf[proc->subframe],"eNB_RX_SF",proc->subframe, rx_time_file);
-  }
-
-  //stop_meas( &softmodem_stats_rx_sf[proc->subframe] );
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->subframe), 0 );
-
+ }
 
 #ifdef DEBUG_THREADS
-  printf( "Exiting eNB thread RX %d\n", proc->subframe );
+  printf( "Exiting eNB thread PRACH\n");
 #endif
 
-  eNB_thread_rx_status[proc->subframe] = 0;
-  return &eNB_thread_rx_status[proc->subframe];
+  eNB_thread_prach_status = 0;
+  return &eNB_thread_prach_status;
 }
 
 
@@ -740,9 +908,14 @@ void init_eNB_proc(void)
 {
   int i;
   int CC_id;
+  PHY_VARS_eNB *eNB;
+  eNB_proc_t *proc;
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
+    eNB = PHY_vars_eNB_g[0][CC_id];
+
     for (i=0; i<NUM_ENB_THREADS; i++) {
+      proc = &eNB->proc[i];
       // set the stack size
      
 
@@ -757,48 +930,41 @@ void init_eNB_proc(void)
         perror("[ENB_PROC_RX] setting thread stack size failed\n");
       */
       // set the kernel scheduling policy and priority
-      sched_param_eNB_proc_tx[CC_id][i].sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
-      pthread_attr_setschedparam  (&attr_eNB_proc_tx[CC_id][i], &sched_param_eNB_proc_tx[CC_id][i]);
-      pthread_attr_setschedpolicy (&attr_eNB_proc_tx[CC_id][i], SCHED_FIFO);
-      sched_param_eNB_proc_rx[CC_id][i].sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
-      pthread_attr_setschedparam  (&attr_eNB_proc_rx[CC_id][i], &sched_param_eNB_proc_rx[CC_id][i]);
-      pthread_attr_setschedpolicy (&attr_eNB_proc_rx[CC_id][i], SCHED_FIFO);
+      proc->sched_param_tx.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
+      pthread_attr_setschedparam  (&proc->attr_tx, &proc->sched_param_tx);
+      pthread_attr_setschedpolicy (&proc->attr_tx, SCHED_FIFO);
+
+      proc->sched_param_rx.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
+      pthread_attr_setschedparam  (&proc->attr_rx, &proc->sched_param_rx);
+      pthread_attr_setschedpolicy (&proc->attr_rx, SCHED_FIFO);
+
+      proc->sched_param_prach.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY;
+      pthread_attr_setschedparam  (&proc->attr_prach, &proc->sched_param_prach);
+      pthread_attr_setschedpolicy (&proc->attr_prach, SCHED_FIFO);
+
       printf("Setting OS scheduler to SCHED_FIFO for eNB [cc%d][thread%d] \n",CC_id, i);
 #endif
-      PHY_vars_eNB_g[0][CC_id]->proc[i].instance_cnt_tx = -1;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].instance_cnt_rx = -1;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].subframe = i;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].CC_id = CC_id;
-      pthread_mutex_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].mutex_tx, NULL);
-      pthread_mutex_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].mutex_rx, NULL);
-      pthread_cond_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_tx, NULL);
-      pthread_cond_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_rx, NULL);
+      proc->instance_cnt_tx = -1;
+      proc->instance_cnt_prach = -1;
+      proc->CC_id = CC_id;
+      pthread_mutex_init( &proc->mutex_tx, NULL);
+      pthread_cond_init( &proc->cond_tx, NULL);
+      pthread_cond_init( &proc->cond_prach, NULL);
 #ifndef LOWLATENCY
-      pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, &attr_eNB_proc_tx[CC_id][i], eNB_thread_tx, &PHY_vars_eNB_g[0][CC_id]->proc[i] );
-      pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, &attr_eNB_proc_rx[CC_id][i], eNB_thread_rx, &PHY_vars_eNB_g[0][CC_id]->proc[i] );
+      pthread_create( &proc->pthread_tx, &proc->attr_tx, eNB_thread_tx, &eNB->proc[i] );
+      pthread_create( &proc->pthread_rx, &proc->attr_rx, eNB_thread_rx, &eNB->proc[i] );
+      pthread_create( &proc->pthread_prach, &proc->attr_prach, eNB_thread_prach, &eNB->proc[i] );
 #else 
-      pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, NULL, eNB_thread_tx, &PHY_vars_eNB_g[0][CC_id]->proc[i] );
-      pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, NULL, eNB_thread_rx, &PHY_vars_eNB_g[0][CC_id]->proc[i] );
+      pthread_create( &proc->pthread_tx, NULL, eNB_thread_tx, &eNB->proc[i] );
+      pthread_create( &proc->pthread_rx, NULL, eNB_thread_rx, &eNB->proc[i] );
+      pthread_create( &proc->pthread_prach, NULL, eNB_thread_prach, &eNB->proc[i] );
 #endif
       char name[16];
       snprintf( name, sizeof(name), "TX %d", i );
-      pthread_setname_np( PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, name );
+      pthread_setname_np( proc->pthread_tx, name );
       snprintf( name, sizeof(name), "RX %d", i );
-      pthread_setname_np( PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, name );
-      PHY_vars_eNB_g[0][CC_id]->proc[i].frame_tx = 0;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].frame_rx = 0;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].subframe_rx = i;
-      PHY_vars_eNB_g[0][CC_id]->proc[i].subframe_tx = (i+2)%10;
+      pthread_setname_np( proc->pthread_rx, name );
     }
-
-
-
-    // TX processes subframe +2, RX subframe
-    // Note this inialization is because the first process awoken for frame 0 is number 1 and so processes 8,9 and 0 have to start with frame 1
-    //    PHY_vars_eNB_g[0][CC_id]->proc[7].frame_tx = 1;
-    PHY_vars_eNB_g[0][CC_id]->proc[8].frame_tx = 1;
-    PHY_vars_eNB_g[0][CC_id]->proc[9].frame_tx = 1;
-    //    PHY_vars_eNB_g[0][CC_id]->proc[0].frame_tx = 1;
   }
 
   /* setup PHY proc TX sync mechanism */
@@ -815,22 +981,25 @@ void init_eNB_proc(void)
 void kill_eNB_proc(void)
 {
   int *status;
-
-  for (int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
+  PHY_VARS_eNB *eNB;
+  eNB_proc_t *proc;
+  for (int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
+    eNB=PHY_vars_eNB_g[0][CC_id];
     for (int i=0; i<NUM_ENB_THREADS; i++) {
-
+      proc = &eNB->proc[i];
+      
 #ifdef DEBUG_THREADS
       printf( "Killing TX CC_id %d thread %d\n", CC_id, i );
 #endif
 
-      PHY_vars_eNB_g[0][CC_id]->proc[i].instance_cnt_tx = 0; // FIXME data race!
-      pthread_cond_signal( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_tx );
+      proc->instance_cnt_tx = 0; // FIXME data race!
+      pthread_cond_signal( &proc->cond_tx );
       pthread_cond_broadcast(&sync_phy_proc[i].cond_phy_proc_tx);
 
 #ifdef DEBUG_THREADS
       printf( "Joining eNB TX CC_id %d thread %d...\n", CC_id, i );
 #endif
-      int result = pthread_join( PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, (void**)&status );
+      int result = pthread_join( proc->pthread_tx, (void**)&status );
 
 #ifdef DEBUG_THREADS
 
@@ -852,13 +1021,10 @@ void kill_eNB_proc(void)
       printf( "Killing RX CC_id %d thread %d\n", CC_id, i );
 #endif
 
-      PHY_vars_eNB_g[0][CC_id]->proc[i].instance_cnt_rx = 0; // FIXME data race!
-      pthread_cond_signal( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_rx );
-
 #ifdef DEBUG_THREADS
       printf( "Joining eNB RX CC_id %d thread %d...\n", CC_id, i );
 #endif
-      result = pthread_join( PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, (void**)&status );
+      result = pthread_join( proc->pthread_rx, (void**)&status );
 
 #ifdef DEBUG_THREADS
 
@@ -876,14 +1042,12 @@ void kill_eNB_proc(void)
       UNUSED(result)
 #endif
 
-      pthread_mutex_destroy( &PHY_vars_eNB_g[0][CC_id]->proc[i].mutex_tx );
-      pthread_mutex_destroy( &PHY_vars_eNB_g[0][CC_id]->proc[i].mutex_rx );
-      pthread_cond_destroy( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_tx );
-      pthread_cond_destroy( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_rx );
+      pthread_mutex_destroy( &proc->mutex_tx );
+      pthread_cond_destroy( &proc->cond_tx );
     }
+  }
 }
 
-
 /* this function maps the phy_vars_eNB tx and rx buffers to the available rf chains.
    Each rf chain is is addressed by the card number and the chain on the card. The
    rf_map specifies for each CC, on which rf chain the mapping should start. Multiple
@@ -902,7 +1066,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
     if (phy_vars_eNB[CC_id]) {
-      frame_parms = &(phy_vars_eNB[CC_id]->lte_frame_parms);
+      frame_parms = &(phy_vars_eNB[CC_id]->frame_parms);
       printf("setup_eNB_buffers: frame_parms = %p\n",frame_parms);
     } else {
       printf("phy_vars_eNB[%d] not initialized\n", CC_id);
@@ -929,8 +1093,8 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
 
     for (i=0; i<frame_parms->nb_antennas_rx; i++) {
       printf("Mapping eNB CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n",CC_id,i,downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i],rf_map[CC_id].card,rf_map[CC_id].chain+i);
-      free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]);
-      phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].adc_head[rf_map[CC_id].chain+i];
+      free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
+      phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].adc_head[rf_map[CC_id].chain+i];
 
       if (openair0_cfg[rf_map[CC_id].card].rx_freq[rf_map[CC_id].chain+i]) {
         printf("Error with rf_map! A channel has already been allocated!\n");
@@ -941,18 +1105,18 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
         openair0_cfg[rf_map[CC_id].card].rx_num_channels++;
       }
 
-      printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]);
+      printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
 
       for (j=0; j<16; j++) {
-        printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i][j]);
-        phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i][j] = 16-j;
+        printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j]);
+        phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j] = 16-j;
       }
     }
 
     for (i=0; i<frame_parms->nb_antennas_tx; i++) {
       printf("Mapping eNB CC_id %d, tx_ant %d, freq %u on card %d, chain %d\n",CC_id,i,downlink_frequency[CC_id][i],rf_map[CC_id].card,rf_map[CC_id].chain+i);
-      free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]);
-      phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].dac_head[rf_map[CC_id].chain+i];
+      free(phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
+      phy_vars_eNB[CC_id]->common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].dac_head[rf_map[CC_id].chain+i];
 
       if (openair0_cfg[rf_map[CC_id].card].tx_freq[rf_map[CC_id].chain+i]) {
         printf("Error with rf_map! A channel has already been allocated!\n");
@@ -963,11 +1127,11 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
         openair0_cfg[rf_map[CC_id].card].tx_num_channels++;
       }
 
-      printf("txdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]);
+      printf("txdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
 
       for (j=0; j<16; j++) {
-        printf("txbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i][j]);
-        phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i][j] = 16-j;
+        printf("txbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.txdata[0][i][j]);
+        phy_vars_eNB[CC_id]->common_vars.txdata[0][i][j] = 16-j;
       }
     }
 
@@ -976,20 +1140,20 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
     txdata = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*));
 
     for (i=0; i<frame_parms->nb_antennas_rx; i++) {
-      free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]);
+      free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
       rxdata[i] = (int32_t*)(32 + malloc16(32+openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t))); // FIXME broken memory allocation
-      phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD         FIXME! N_TA_offset > 16 => access of unallocated memory
+      phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD         FIXME! N_TA_offset > 16 => access of unallocated memory
       memset(rxdata[i], 0, openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t));
-      printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
+      printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
       
     }
 
     for (i=0; i<frame_parms->nb_antennas_tx; i++) {
-      free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]);
+      free(phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
       txdata[i] = (int32_t*)(32 + malloc16(32 + openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t))); // FIXME broken memory allocation
-      phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = txdata[i];
+      phy_vars_eNB[CC_id]->common_vars.txdata[0][i] = txdata[i];
       memset(txdata[i],0, openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t));
-      printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]);
+      printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
 
     }
 
@@ -1000,33 +1164,14 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
 }
 
 
-#if defined(ENABLE_ITTI)
-static void wait_system_ready (char *message, volatile int *start_flag)
-{
-  /* Wait for eNB application initialization to be complete (eNB registration to MME) */
-  {
-    static char *indicator[] = {".    ", "..   ", "...  ", ".... ", ".....",
-                                " ....", "  ...", "   ..", "    .", "     "
-                               };
-    int i = 0;
-
-    while ((!oai_exit) && (*start_flag == 0)) {
-      LOG_N(EMU, message, indicator[i]);
-      fflush(stdout);
-      i = (i + 1) % (sizeof(indicator) / sizeof(indicator[0]));
-      usleep(200000);
-    }
 
-    LOG_D(EMU,"\n");
-  }
-}
-#endif
 
 /*!
  * \brief This is the main eNB thread.
  * \param arg unused
  * \returns a pointer to an int. The storage is not on the heap and must not be freed.
  */
+/*
 static void* eNB_thread( void* arg )
 {
   UNUSED(arg);
@@ -1035,13 +1180,14 @@ static void* eNB_thread( void* arg )
   unsigned char slot;
   // the USRP implementation operates on subframes, not slots
   // one subframe consists of one even and one odd slot
+
   slot = 1;
   int spp;
   int tx_launched = 0;
   int card=0;
 
-  void *rxp[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_rx
-  void *txp[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_tx
+  void *rxp[2]; // FIXME hard coded array size; indexed by frame_parms.nb_antennas_rx
+  void *txp[2]; // FIXME hard coded array size; indexed by frame_parms.nb_antennas_tx
 
   int hw_subframe = 0; // 0..NUM_ENB_THREADS-1 => 0..9
   
@@ -1051,7 +1197,7 @@ static void* eNB_thread( void* arg )
   int CC_id=0;	
   struct timespec trx_time0, trx_time1, trx_time2;
 
-  /* avoid gcc warnings */
+  //avoid gcc warnings
   (void)trx_time0;
   (void)trx_time1;
   (void)trx_time2;
@@ -1065,7 +1211,7 @@ static void* eNB_thread( void* arg )
   attr.sched_nice = 0;
   attr.sched_priority = 0;
 
-  /* This creates a .2 ms  reservation */
+  //This creates a .2 ms  reservation
   attr.sched_policy = SCHED_DEADLINE;
   attr.sched_runtime  = (0.3 * 100) * 10000;
   attr.sched_deadline = (0.9 * 100) * 10000;
@@ -1086,8 +1232,8 @@ static void* eNB_thread( void* arg )
   char cpu_affinity[1024];
   cpu_set_t cpuset;
 
-  /* Set affinity mask to include CPUs 1 to MAX_CPUS */
-  /* CPU 0 is reserved for UHD threads */
+  //Set affinity mask to include CPUs 1 to MAX_CPUS
+  //CPU 0 is reserved for UHD threads
   CPU_ZERO(&cpuset);
 #ifdef CPU_AFFINITY
   if (get_nprocs() >2)
@@ -1104,7 +1250,7 @@ static void* eNB_thread( void* arg )
   }
 #endif // CPU_AFFINITY
 
-  /* Check the actual affinity mask assigned to the thread */
+  //Check the actual affinity mask assigned to the thread
 
   s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
   if (s != 0)
@@ -1192,7 +1338,7 @@ static void* eNB_thread( void* arg )
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME, frame );
     tx_launched = 0;
 
-    while (rx_pos < ((1+hw_subframe)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti)) {
+    while (rx_pos < ((1+hw_subframe)*PHY_vars_eNB_g[0][0]->frame_parms.samples_per_tti)) {
 
       unsigned int rxs;
 #ifndef USRP_DEBUG
@@ -1202,12 +1348,12 @@ static void* eNB_thread( void* arg )
 
       clock_gettime( CLOCK_MONOTONIC, &trx_time0 );
 
-       start_meas( &softmodem_stats_hw );
+      start_meas( &softmodem_stats_hw );
 
       openair0_timestamp timestamp;
       int i=0;
       // prepare rx buffer pointers
-      for (i=0; i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx; i++)
+      for (i=0; i<PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_rx; i++)
         rxp[i] = (void*)&rxdata[i][rx_pos];
 	// check if nsymb_read == spp
 	// map antenna port i to the cc_id. Now use the 1:1 mapping
@@ -1215,7 +1361,7 @@ static void* eNB_thread( void* arg )
 				     &timestamp,
 				     rxp,
 				     spp,
-				     PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx);
+				     PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_rx);
       
       stop_meas( &softmodem_stats_hw );
       if (frame > 50) { 
@@ -1232,7 +1378,7 @@ static void* eNB_thread( void* arg )
     
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
       // prepare tx buffer pointers
-      for (i=0; i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx; i++)
+      for (i=0; i<PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx; i++)
 	txp[i] = (void*)&txdata[i][tx_pos];
       // if symb_written < spp ==> error 
       if (frame > 50) {
@@ -1240,7 +1386,7 @@ static void* eNB_thread( void* arg )
 				(timestamp+(openair0_cfg[card].tx_scheduling_advance)-openair0_cfg[card].tx_sample_advance),
 				txp,
 				spp,
-				PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx,
+				PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx,
 				1);
       }
       
@@ -1259,16 +1405,11 @@ static void* eNB_thread( void* arg )
       // USRP_DEBUG is active
       rt_sleep_ns(1000000);
 #endif
-      /* FT configurable tx lauch delay (in slots): txlaunch_wait, txlaunch_wait_slotcount is device specific and 
-	 set in the corresponding library (with txlaunch_wait=1 and txlaunch_wait_slotcount=1 the check is as it previously was) */
-      /* old check:
-	 if ((frame>50) &&
-	 (tx_launched == 0) &&
-	 (rx_pos >= (((2*hw_subframe)+1)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti>>1))) {*/
+
       if ( (frame>50) && (tx_launched == 0) &&
 	   ((openair0_cfg[card].txlaunch_wait == 0) ||
 	    ((openair0_cfg[card].txlaunch_wait == 1) &&
-	     (rx_pos >= (((2*hw_subframe)+openair0_cfg[card].txlaunch_wait_slotcount)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti>>1))))) { 
+	     (rx_pos >= (((2*hw_subframe)+openair0_cfg[card].txlaunch_wait_slotcount)*PHY_vars_eNB_g[0][0]->frame_parms.samples_per_tti>>1))))) { 
 	
         tx_launched = 1;
 
@@ -1339,7 +1480,7 @@ static void* eNB_thread( void* arg )
 	    exit_fun( "error locking mutex_rx" );
 	    break;
 	  }
-	  
+	 
 	  int cnt_rx = ++PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx;
 	  
 	  pthread_mutex_unlock( &PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx );
@@ -1390,6 +1531,7 @@ eNB_thread_cleanup:
 
   return &eNB_thread_status;
 }
+*/
 
 void reset_opp_meas(void) {
   int sfn;
@@ -1415,25 +1557,19 @@ void print_opp_meas(void) {
 }
 
 
-void init_eNB() {
+void init_eNB(eNB_func_t node_function) {
 
-  int error_code;
 
-  pthread_attr_init (&attr_dlsch_threads);
-  pthread_attr_setstacksize(&attr_dlsch_threads,4*PTHREAD_STACK_MIN);
+  int CC_id;
 
-#ifndef LOWLATENCY
-  sched_param_dlsch.sched_priority = sched_get_priority_max(SCHED_FIFO); //OPENAIR_THREAD_PRIORITY;
-  pthread_attr_setschedparam  (&attr_dlsch_threads, &sched_param_dlsch);
-  pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO);
-  printf("Setting eNB_thread FIFO scheduling policy with priority %d \n", sched_param_dlsch.sched_priority);
-#endif
+  for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++)
+    PHY_vars_eNB_g[0][CC_id]->node_function = node_function;
 
   init_eNB_proc();
   sleep(1);
   LOG_D(HW,"[lte-softmodem.c] eNB threads created\n");
   
-  
+  /*  
   printf("Creating main eNB_thread \n");
   error_code = pthread_create( &main_eNB_thread, &attr_dlsch_threads, eNB_thread, NULL );
   
@@ -1443,16 +1579,19 @@ void init_eNB() {
     LOG_D( HW, "[lte-softmodem.c] Allocate eNB_thread successful\n" );
     pthread_setname_np( main_eNB_thread, "main eNB" );
   }
+  */
 }
 
 
 void stop_eNB() {
 
+  /*
 #ifdef DEBUG_THREADS
   printf("Joining eNB_thread ...");
 #endif
-  int *eNB_thread_status_p;
-  int result = pthread_join( main_eNB_thread, (void**)&eNB_thread_status_p );
+    int *eNB_thread_status_p;
+    int result = pthread_join( main_eNB_thread, (void**)&eNB_thread_status_p );
+
 #ifdef DEBUG_THREADS
   
   if (result != 0) {
@@ -1468,6 +1607,7 @@ void stop_eNB() {
 #else
   UNUSED(result);
 #endif // DEBUG_THREADS
+  */
   
   printf("Killing eNB processing threads\n");
   kill_eNB_proc();
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index e903fd0c9a5ce5e485551e5b31d9f38c8f199cc0..26c4a9ae88891180e28e59c0a7bb4f1ea7e844f7 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -115,7 +115,7 @@ unsigned short config_frames[4] = {2,9,11,13};
 
 // In lte-enb.c
 extern int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_cfg, openair0_rf_map rf_map[MAX_NUM_CCs]);
-extern void init_eNB(void);
+extern void init_eNB(eNB_func_t);
 extern void stop_eNB(void);
 extern void kill_eNB_proc(void);
 
@@ -427,27 +427,27 @@ void reset_stats(FL_OBJECT *button, long arg)
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     for (k=0; k<8; k++) { //harq_processes
-      for (j=0; j<phy_vars_eNB->dlsch_eNB[i][0]->Mlimit; j++) {
-        phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0;
-        phy_vars_eNB->eNB_UE_stats[i].dlsch_ACK[k][j]=0;
-        phy_vars_eNB->eNB_UE_stats[i].dlsch_trials[k][j]=0;
+      for (j=0; j<phy_vars_eNB->dlsch[i][0]->Mlimit; j++) {
+        phy_vars_eNB->UE_stats[i].dlsch_NAK[k][j]=0;
+        phy_vars_eNB->UE_stats[i].dlsch_ACK[k][j]=0;
+        phy_vars_eNB->UE_stats[i].dlsch_trials[k][j]=0;
       }
 
-      phy_vars_eNB->eNB_UE_stats[i].dlsch_l2_errors[k]=0;
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[k]=0;
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
+      phy_vars_eNB->UE_stats[i].dlsch_l2_errors[k]=0;
+      phy_vars_eNB->UE_stats[i].ulsch_errors[k]=0;
+      phy_vars_eNB->UE_stats[i].ulsch_consecutive_errors=0;
 
-      for (j=0; j<phy_vars_eNB->ulsch_eNB[i]->Mlimit; j++) {
-        phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=0;
-        phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
-        phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[k][j]=0;
-        phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[k][j]=0;
+      for (j=0; j<phy_vars_eNB->ulsch[i]->Mlimit; j++) {
+        phy_vars_eNB->UE_stats[i].ulsch_decoding_attempts[k][j]=0;
+        phy_vars_eNB->UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
+        phy_vars_eNB->UE_stats[i].ulsch_round_errors[k][j]=0;
+        phy_vars_eNB->UE_stats[i].ulsch_round_fer[k][j]=0;
       }
     }
 
-    phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0;
-    phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK_round0=0;
-    phy_vars_eNB->eNB_UE_stats[i].dlsch_mcs_offset=0;
+    phy_vars_eNB->UE_stats[i].dlsch_sliding_cnt=0;
+    phy_vars_eNB->UE_stats[i].dlsch_NAK_round0=0;
+    phy_vars_eNB->UE_stats[i].dlsch_mcs_offset=0;
   }
 }
 
@@ -507,7 +507,7 @@ static void *scope_thread(void *arg)
       ue_cnt=0;
       for(UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
 	for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-	  if ((PHY_vars_eNB_g[0][CC_id]->dlsch_eNB[UE_id][0]->rnti>0) && (ue_cnt<scope_enb_num_ue)) {
+	  if ((PHY_vars_eNB_g[0][CC_id]->dlsch[UE_id][0]->rnti>0) && (ue_cnt<scope_enb_num_ue)) {
 	    phy_scope_eNB(form_enb[CC_id][ue_cnt],
 			  PHY_vars_eNB_g[0][CC_id],
 			  UE_id);
@@ -1120,6 +1120,7 @@ int main( int argc, char **argv )
   uint16_t Nid_cell = 0;
   uint8_t  cooperation_flag=0,  abstraction_flag=0;
   uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
+  eNB_func_t node_function=eNodeB_3GPP;
 
 #if defined (XFORMS)
   int ret;
@@ -1358,14 +1359,14 @@ int main( int argc, char **argv )
       UE[CC_id]->UE_scan_carrier = UE_scan_carrier;
       UE[CC_id]->mode    = mode;
 
-      compute_prach_seq(&UE[CC_id]->lte_frame_parms.prach_config_common,
-                        UE[CC_id]->lte_frame_parms.frame_type,
+      compute_prach_seq(&UE[CC_id]->frame_parms.prach_config_common,
+                        UE[CC_id]->frame_parms.frame_type,
                         UE[CC_id]->X_u);
 
       if (UE[CC_id]->mac_enabled == 1) 
-	UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
+	UE[CC_id]->pdcch_vars[0]->crnti = 0x1234;
       else
-	UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
+	UE[CC_id]->pdcch_vars[0]->crnti = 0x1235;
 
       UE[CC_id]->rx_total_gain_dB =  (int)rx_gain[CC_id][0];
       UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
@@ -1398,11 +1399,11 @@ int main( int argc, char **argv )
 	}
       }
 
-      compute_prach_seq(&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.prach_config_common,
-                        PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.frame_type,
+      compute_prach_seq(&PHY_vars_eNB_g[0][CC_id]->frame_parms.prach_config_common,
+                        PHY_vars_eNB_g[0][CC_id]->frame_parms.frame_type,
                         PHY_vars_eNB_g[0][CC_id]->X_u);
 
-      PHY_vars_eNB_g[0][CC_id]->rx_total_gain_eNB_dB = (int)rx_gain[CC_id][0];
+      PHY_vars_eNB_g[0][CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0];
 
       PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0;
 
@@ -1466,8 +1467,8 @@ int main( int argc, char **argv )
     }
 
     printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card,
-           ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_tx),
-           ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx));
+           ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx),
+           ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx));
     openair0_cfg[card].Mod_id = 0;
 #ifdef ETHERNET
 
@@ -1484,8 +1485,8 @@ int main( int argc, char **argv )
     // since the USRP only supports one CC (for the moment), we initialize all the cards with first CC.
     // in the case of EXMIMO2, these values are overwirtten in the function setup_eNB/UE_buffer
 
-    openair0_cfg[card].tx_num_channels=min(2,((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_tx));
-    openair0_cfg[card].rx_num_channels=min(2,((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx));
+    openair0_cfg[card].tx_num_channels=min(2,((UE_flag==0) ? PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx));
+    openair0_cfg[card].rx_num_channels=min(2,((UE_flag==0) ? PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx));
 
     for (i=0; i<4; i++) {
 
@@ -1500,7 +1501,7 @@ int main( int argc, char **argv )
       openair0_cfg[card].autocal[i] = 1;
       openair0_cfg[card].tx_gain[i] = tx_gain[0][i];
       if (UE_flag == 0) {
-	openair0_cfg[card].rx_gain[i] = PHY_vars_eNB_g[0][0]->rx_total_gain_eNB_dB;
+	openair0_cfg[card].rx_gain[i] = PHY_vars_eNB_g[0][0]->rx_total_gain_dB;
       }
       else {
 	openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;
@@ -1650,12 +1651,12 @@ int main( int argc, char **argv )
     for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
       for (i=0; i<frame_parms[CC_id]->samples_per_tti*10; i++)
         for (aa=0; aa<frame_parms[CC_id]->nb_antennas_tx; aa++)
-          UE[CC_id]->lte_ue_common_vars.txdata[aa][i] = 0x00010001;
+          UE[CC_id]->common_vars.txdata[aa][i] = 0x00010001;
     }
 
     if (input_fd) {
       printf("Reading in from file to antenna buffer %d\n",0);
-      if (fread(UE[0]->lte_ue_common_vars.rxdata[0],
+      if (fread(UE[0]->common_vars.rxdata[0],
 	        sizeof(int32_t),
 	        frame_parms[0]->samples_per_tti*10,
 	        input_fd) != frame_parms[0]->samples_per_tti*10)
@@ -1678,7 +1679,7 @@ int main( int argc, char **argv )
       PHY_vars_eNB_g[0][CC_id]->hw_timing_advance = 0;
       for (i=0; i<frame_parms[CC_id]->samples_per_tti*10; i++)
         for (aa=0; aa<frame_parms[CC_id]->nb_antennas_tx; aa++)
-          PHY_vars_eNB_g[0][CC_id]->lte_eNB_common_vars.txdata[0][aa][i] = 0x00010001;
+          PHY_vars_eNB_g[0][CC_id]->common_vars.txdata[0][aa][i] = 0x00010001;
     }
   }
 
@@ -1751,7 +1752,7 @@ int main( int argc, char **argv )
 
   // start the main thread
   if (UE_flag == 1) init_UE();
-  else init_eNB();
+  else init_eNB(node_function);
 
   // Sleep to allow all threads to setup
   sleep(1);
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 865f257135ee2d59529953e7b6f0c4116d1a222d..1fc30885984aeea5737c743b94366b4254b020eb 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -361,7 +361,7 @@ static void *UE_thread_synch(void *arg)
         openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
 
 #if 0 // UHD 3.8	
-        switch(UE->lte_frame_parms.N_RB_DL) {
+        switch(UE->frame_parms.N_RB_DL) {
         case 6:
           openair0_cfg[card].rx_gain[i] -= 12;
           break;
@@ -379,7 +379,7 @@ static void *UE_thread_synch(void *arg)
           break;
 
         default:
-          printf( "Unknown number of RBs %d\n", UE->lte_frame_parms.N_RB_DL );
+          printf( "Unknown number of RBs %d\n", UE->frame_parms.N_RB_DL );
           break;
         }
 #endif
@@ -440,7 +440,7 @@ static void *UE_thread_synch(void *arg)
           openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;  // 65 calibrated for USRP B210 @ 2.6 GHz
 
 #if 0 // UHD 3.8	  
-          switch(UE->lte_frame_parms.N_RB_DL) {
+          switch(UE->frame_parms.N_RB_DL) {
           case 6:
             openair0_cfg[card].rx_gain[i] -= 12;
             break;
@@ -458,7 +458,7 @@ static void *UE_thread_synch(void *arg)
             break;
 
           default:
-            printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL);
+            printf("Unknown number of RBs %d\n",UE->frame_parms.N_RB_DL);
             break;
           }
 #endif	  
@@ -485,7 +485,7 @@ static void *UE_thread_synch(void *arg)
       LOG_I(PHY,"[UE thread Synch] Running Initial Synch\n");
       if (initial_sync( UE, UE->mode ) == 0) {
 
-        hw_slot_offset = (UE->rx_offset<<1) / UE->lte_frame_parms.samples_per_tti;
+        hw_slot_offset = (UE->rx_offset<<1) / UE->frame_parms.samples_per_tti;
         LOG_I( HW, "Got synch: hw_slot_offset %d\n", hw_slot_offset );
 	if (UE->UE_scan_carrier == 1) {
 
@@ -493,14 +493,14 @@ static void *UE_thread_synch(void *arg)
 	  // rerun with new cell parameters and frequency-offset
 	  for (i=0;i<openair0_cfg[0].rx_num_channels;i++) {
 	    openair0_cfg[0].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
-	    openair0_cfg[0].rx_freq[i] -= UE->lte_ue_common_vars.freq_offset;
+	    openair0_cfg[0].rx_freq[i] -= UE->common_vars.freq_offset;
 	    openair0_cfg[0].tx_freq[i] =  openair0_cfg[0].rx_freq[i]+uplink_frequency_offset[0][i];
 	    downlink_frequency[0][i] = openair0_cfg[0].rx_freq[i];
 	    freq_offset=0;	    
 	  }
 
 	  // reconfigure for potentially different bandwidth
-	  switch(UE->lte_frame_parms.N_RB_DL) {
+	  switch(UE->frame_parms.N_RB_DL) {
 	  case 6:
 	    openair0_cfg[0].sample_rate =1.92e6;
 	    openair0_cfg[0].rx_bw          =.96e6;
@@ -531,7 +531,7 @@ static void *UE_thread_synch(void *arg)
 	  //openair0.trx_set_gains_func(&openair0,&openair0_cfg[0]);
 	  //openair0.trx_stop_func(0);	  
 	  sleep(1);
-	  init_frame_parms(&UE->lte_frame_parms,1);
+	  init_frame_parms(&UE->frame_parms,1);
 	}
 	else {
 	  UE->is_synchronized = 1;
@@ -540,9 +540,9 @@ static void *UE_thread_synch(void *arg)
 	   FILE *fd;
 	   if ((UE->frame_rx&1) == 0) {  // this guarantees SIB1 is present 
 	     if ((fd = fopen("rxsig_frame0.dat","w")) != NULL) {
-	       fwrite((void*)&UE->lte_ue_common_vars.rxdata[0][0],
+	       fwrite((void*)&UE->common_vars.rxdata[0][0],
 		      sizeof(int32_t),
-		      10*UE->lte_frame_parms.samples_per_tti,
+		      10*UE->frame_parms.samples_per_tti,
 		      fd);
 	       LOG_I(PHY,"Dummping Frame ... bye bye \n");
 	       fclose(fd);
@@ -578,9 +578,9 @@ static void *UE_thread_synch(void *arg)
 	    LOG_I( PHY, "[initial_sync] No cell synchronization found, abandoning\n" );
 	    FILE *fd;
 	    if ((fd = fopen("rxsig_frame0.dat","w"))!=NULL) {
-	      fwrite((void*)&UE->lte_ue_common_vars.rxdata[0][0],
+	      fwrite((void*)&UE->common_vars.rxdata[0][0],
 		     sizeof(int32_t),
-		     10*UE->lte_frame_parms.samples_per_tti,
+		     10*UE->frame_parms.samples_per_tti,
 		     fd);
 	      LOG_I(PHY,"Dummping Frame ... bye bye \n");
 	      fclose(fd);
@@ -793,12 +793,12 @@ static void *UE_thread_tx(void *arg)
     }
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, 1 );
 
-    if ((subframe_select( &UE->lte_frame_parms, UE->slot_tx>>1 ) == SF_UL) ||
-        (UE->lte_frame_parms.frame_type == FDD)) {
+    if ((subframe_select( &UE->frame_parms, UE->slot_tx>>1 ) == SF_UL) ||
+        (UE->frame_parms.frame_type == FDD)) {
       phy_procedures_UE_TX( UE, 0, 0, UE->mode, no_relay );
     }
 
-    if ((subframe_select( &UE->lte_frame_parms, UE->slot_tx>>1 ) == SF_S) &&
+    if ((subframe_select( &UE->frame_parms, UE->slot_tx>>1 ) == SF_S) &&
         ((UE->slot_tx&1) == 1)) {
       phy_procedures_UE_S_TX( UE, 0, 0, no_relay );
     }
@@ -999,14 +999,14 @@ static void *UE_thread_rx(void *arg)
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, 1 );
     for (i=0; i<2; i++) {
-      if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_DL) ||
-          (UE->lte_frame_parms.frame_type == FDD)) {
+      if ((subframe_select( &UE->frame_parms, UE->slot_rx>>1 ) == SF_DL) ||
+          (UE->frame_parms.frame_type == FDD)) {
 	/*
 #ifdef OAI_USRP
 	// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
-	int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
+	int slot_length = UE->frame_parms.samples_per_tti>>1;
 	int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
-	int frame_length = UE->lte_frame_parms.samples_per_tti*10;
+	int frame_length = UE->frame_parms.samples_per_tti*10;
 	int aa;
 	if (rx_offset > frame_length)
 	  rx_offset-=frame_length;
@@ -1014,24 +1014,24 @@ static void *UE_thread_rx(void *arg)
 
 	if (rx_offset >= 0) {
 	  if (rx_offset + slot_length < frame_length)
-	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+	    for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++)
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][rx_offset&(~0x3)],
 		      slot_length);
 	  else {
 	    int diff = rx_offset + slot_length - frame_length;
-	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+	    for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][rx_offset&(~0x3)],
 		      slot_length-diff);
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][0],
 		      diff);
 	    }
 	  }
 	}
 	else {
-	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
+	    for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
 		      -rx_offset);
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][0],
 		      slot_length+rx_offset);
 	    }
 	}
@@ -1040,38 +1040,38 @@ static void *UE_thread_rx(void *arg)
         phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
       }
 
-      if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_S) &&
+      if ((subframe_select( &UE->frame_parms, UE->slot_rx>>1 ) == SF_S) &&
           ((UE->slot_rx&1) == 0)) {
 	/*
 #ifdef OAI_USRP
 	// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
-	int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
+	int slot_length = UE->frame_parms.samples_per_tti>>1;
 	int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
-	int frame_length = UE->lte_frame_parms.samples_per_tti*10;
+	int frame_length = UE->frame_parms.samples_per_tti*10;
 	if (rx_offset > frame_length)
 	  rx_offset-=frame_length;
 	int aa;
 
 	if (rx_offset >= 0) {
 	  if (rx_offset + slot_length < frame_length)
-	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+	    for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++)
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][rx_offset&(~0x3)],
 		      slot_length);
 	  else {
 	    int diff = rx_offset + slot_length - frame_length;
-	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+	    for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][rx_offset&(~0x3)],
 		      slot_length-diff);
-	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+	      rescale((int16_t*)&UE->common_vars.rxdata[aa][0],
 		      diff);
 	    }
 	  }
 	}
 	else {
-	  for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
-	    rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
+	  for (aa=0;aa<UE->frame_parms.nb_antennas_rx;aa++){
+	    rescale((int16_t*)&UE->common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
 		    -rx_offset);
-	    rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+	    rescale((int16_t*)&UE->common_vars.rxdata[aa][0],
 		    slot_length+rx_offset);
 	  }
 	}
@@ -1084,7 +1084,7 @@ static void *UE_thread_rx(void *arg)
         ret = mac_xface->ue_scheduler(UE->Mod_id,
                                       UE->frame_tx,
                                       UE->slot_rx>>1,
-                                      subframe_select(&UE->lte_frame_parms,UE->slot_tx>>1),
+                                      subframe_select(&UE->frame_parms,UE->slot_tx>>1),
                                       0,
                                       0/*FIXME CC_id*/);
 
@@ -1238,15 +1238,15 @@ void *UE_thread(void *arg)
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP, dummy_dump );
 
 
-    while (rxpos < (1+hw_subframe)*UE->lte_frame_parms.samples_per_tti) {
+    while (rxpos < (1+hw_subframe)*UE->frame_parms.samples_per_tti) {
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 );
 
 #ifndef USRP_DEBUG
 
-      DevAssert( UE->lte_frame_parms.nb_antennas_rx <= 2 );
+      DevAssert( UE->frame_parms.nb_antennas_rx <= 2 );
       void* rxp[2];
 
-      for (int i=0; i<UE->lte_frame_parms.nb_antennas_rx; i++)
+      for (int i=0; i<UE->frame_parms.nb_antennas_rx; i++)
         rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i];
       
       /*      if (dummy_dump == 0)
@@ -1257,7 +1257,7 @@ void *UE_thread(void *arg)
 				     &timestamp,
 				     rxp,
 				     spp - ((first_rx==1) ? rx_off_diff : 0),
-				     UE->lte_frame_parms.nb_antennas_rx);
+				     UE->frame_parms.nb_antennas_rx);
 
 	if (rxs != (spp- ((first_rx==1) ? rx_off_diff : 0))) {
 	  printf("rx error: asked %d got %d ",spp - ((first_rx==1) ? rx_off_diff : 0),rxs);
@@ -1277,17 +1277,17 @@ void *UE_thread(void *arg)
       if ((tx_enabled==1) && (UE->mode!=loop_through_memory)) {
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
 
-        DevAssert( UE->lte_frame_parms.nb_antennas_tx <= 2 );
+        DevAssert( UE->frame_parms.nb_antennas_tx <= 2 );
         void* txp[2];
 
-        for (int i=0; i<UE->lte_frame_parms.nb_antennas_tx; i++)
+        for (int i=0; i<UE->frame_parms.nb_antennas_tx; i++)
           txp[i] = (void*)&txdata[i][txpos];
 
         openair0.trx_write_func(&openair0,
                                 (timestamp+openair0_cfg[0].tx_scheduling_advance-openair0_cfg[0].tx_sample_advance),
                                 txp,
 				spp - ((first_rx==1) ? rx_off_diff : 0),
-                                UE->lte_frame_parms.nb_antennas_tx,
+                                UE->frame_parms.nb_antennas_tx,
                                 1);
 
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
@@ -1305,12 +1305,12 @@ void *UE_thread(void *arg)
       rxpos += spp;
       txpos += spp;
 
-      if (txpos >= 10*PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti)
-        txpos -= 10*PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti;
+      if (txpos >= 10*PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti)
+        txpos -= 10*PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti;
     }
 
-    if (rxpos >= 10*PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti)
-      rxpos -= 10*PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti;
+    if (rxpos >= 10*PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti)
+      rxpos -= 10*PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti;
 
     if (UE->is_synchronized == 1)  {
       LOG_D( HW, "UE_thread: hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 );
@@ -1353,14 +1353,14 @@ void *UE_thread(void *arg)
             if (frame == 10) {
               LOG_D(PHY,
                     "[SCHED][UE] Found cell with N_RB_DL %"PRIu8", PHICH CONFIG (%d,%d), Nid_cell %"PRIu16", NB_ANTENNAS_TX %"PRIu8", frequency offset "PRIi32" Hz, RSSI (digital) %hu dB, measured Gain %d dB, total_rx_gain %"PRIu32" dB, USRP rx gain %f dB\n",
-                    UE->lte_frame_parms.N_RB_DL,
-                    UE->lte_frame_parms.phich_config_common.phich_duration,
-                    UE->lte_frame_parms.phich_config_common.phich_resource,
-                    UE->lte_frame_parms.Nid_cell,
-                    UE->lte_frame_parms.nb_antennas_tx_eNB,
-                    UE->lte_ue_common_vars.freq_offset,
-                    UE->PHY_measurements.rx_power_avg_dB[0],
-                    UE->PHY_measurements.rx_power_avg_dB[0] - rx_input_level_dBm,
+                    UE->frame_parms.N_RB_DL,
+                    UE->frame_parms.phich_config_common.phich_duration,
+                    UE->frame_parms.phich_config_common.phich_resource,
+                    UE->frame_parms.Nid_cell,
+                    UE->frame_parms.nb_antennas_tx_eNB,
+                    UE->common_vars.freq_offset,
+                    UE->measurements.rx_power_avg_dB[0],
+                    UE->measurements.rx_power_avg_dB[0] - rx_input_level_dBm,
                     UE->rx_total_gain_dB,
                     openair0_cfg[0].rx_gain[0]
                    );
@@ -1471,7 +1471,7 @@ void *UE_thread(void *arg)
         // the UE_thread_synch is ready
         if (UE->is_synchronized == 1) {
           rx_off_diff = 0;
-          LTE_DL_FRAME_PARMS *frame_parms = &UE->lte_frame_parms; // for macro FRAME_LENGTH_COMPLEX_SAMPLES
+          LTE_DL_FRAME_PARMS *frame_parms = &UE->frame_parms; // for macro FRAME_LENGTH_COMPLEX_SAMPLES
 
 	  //	  LOG_I(PHY,"UE->rx_offset %d\n",UE->rx_offset);
           if ((UE->rx_offset > RX_OFF_MAX) && (start_rx_stream == 0)) {
@@ -1486,7 +1486,7 @@ void *UE_thread(void *arg)
 					   &timestamp,
 					   (void**)rxdata,
 					   UE->rx_offset,
-					   UE->lte_frame_parms.nb_antennas_rx);
+					   UE->frame_parms.nb_antennas_rx);
 	      if (rxs != UE->rx_offset) {
 		exit_fun("problem in rx");
 		return &UE_thread_retval;
@@ -1616,7 +1616,7 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg,
   
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
   if (phy_vars_ue[CC_id]) {
-  frame_parms = &(phy_vars_ue[CC_id]->lte_frame_parms);
+  frame_parms = &(phy_vars_ue[CC_id]->frame_parms);
   } else {
     printf("phy_vars_UE[%d] not initialized\n", CC_id);
     return(-1);
@@ -1639,20 +1639,20 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg,
 
   for (i=0; i<frame_parms->nb_antennas_rx; i++) {
     printf( "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map[CC_id].card, rf_map[CC_id].chain+i );
-    free( phy_vars_ue[CC_id]->lte_ue_common_vars.rxdata[i] );
+    free( phy_vars_ue[CC_id]->common_vars.rxdata[i] );
     rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
-    phy_vars_ue[CC_id]->lte_ue_common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
+    phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
   }
   
   for (i=0; i<frame_parms->nb_antennas_tx; i++) {
     printf( "Mapping UE CC_id %d, tx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map[CC_id].card, rf_map[CC_id].chain+i );
-    free( phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] );
+    free( phy_vars_ue[CC_id]->common_vars.txdata[i] );
     txdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
-    phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] = txdata[i];
+    phy_vars_ue[CC_id]->common_vars.txdata[i] = txdata[i];
   }
   
-  // rxdata[x] points now to the same memory region as phy_vars_ue[CC_id]->lte_ue_common_vars.rxdata[x]
-  // txdata[x] points now to the same memory region as phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[x]
+  // rxdata[x] points now to the same memory region as phy_vars_ue[CC_id]->common_vars.rxdata[x]
+  // txdata[x] points now to the same memory region as phy_vars_ue[CC_id]->common_vars.txdata[x]
   // be careful when releasing memory!
   // because no "release_ue_buffers"-function is available, at least rxdata and txdata memory will leak (only some bytes)
 
diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c
index 861bfa6cbf9bd0eab11a964f4f584086b96a042c..583891f1ac369f1eff4fb695c718e553c3a639e1 100644
--- a/targets/SIMU/USER/init_lte.c
+++ b/targets/SIMU/USER/init_lte.c
@@ -59,9 +59,9 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
   memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB));
   PHY_vars_eNB->Mod_id=eNB_id;
   PHY_vars_eNB->cooperation_flag=cooperation_flag;
-  memcpy(&(PHY_vars_eNB->lte_frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
-  PHY_vars_eNB->lte_frame_parms.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3);
-  PHY_vars_eNB->lte_frame_parms.nushift = PHY_vars_eNB->lte_frame_parms.Nid_cell%6;
+  memcpy(&(PHY_vars_eNB->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
+  PHY_vars_eNB->frame_parms.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3);
+  PHY_vars_eNB->frame_parms.nushift = PHY_vars_eNB->frame_parms.Nid_cell%6;
   phy_init_lte_eNB(PHY_vars_eNB,0,cooperation_flag,abstraction_flag);
 
   LOG_I(PHY,"init eNB: Nid_cell %d\n", frame_parms->Nid_cell);
@@ -73,20 +73,20 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     for (j=0; j<2; j++) {
-      PHY_vars_eNB->dlsch_eNB[i][j] = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL,abstraction_flag);
+      PHY_vars_eNB->dlsch[i][j] = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL,abstraction_flag);
 
-      if (!PHY_vars_eNB->dlsch_eNB[i][j]) {
+      if (!PHY_vars_eNB->dlsch[i][j]) {
         LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i);
         exit(-1);
       } else {
-        LOG_D(PHY,"dlsch_eNB[%d][%d] => %p\n",i,j,PHY_vars_eNB->dlsch_eNB[i][j]);
-        PHY_vars_eNB->dlsch_eNB[i][j]->rnti=0;
+        LOG_D(PHY,"dlsch[%d][%d] => %p\n",i,j,PHY_vars_eNB->dlsch[i][j]);
+        PHY_vars_eNB->dlsch[i][j]->rnti=0;
       }
     }
 
-    PHY_vars_eNB->ulsch_eNB[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,frame_parms->N_RB_UL, abstraction_flag);
+    PHY_vars_eNB->ulsch[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,frame_parms->N_RB_UL, abstraction_flag);
 
-    if (!PHY_vars_eNB->ulsch_eNB[1+i]) {
+    if (!PHY_vars_eNB->ulsch[1+i]) {
       LOG_E(PHY,"Can't get eNB ulsch structures\n");
       exit(-1);
     }
@@ -95,45 +95,45 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
     // this will be overwritten with the real transmission mode by the RRC once the UE is connected
     PHY_vars_eNB->transmission_mode[i] = transmission_mode;
 #ifdef LOCALIZATION
-    PHY_vars_eNB->ulsch_eNB[1+i]->aggregation_period_ms = 5000; // 5000 milliseconds // could be given as an argument (TBD))
+    PHY_vars_eNB->ulsch[1+i]->aggregation_period_ms = 5000; // 5000 milliseconds // could be given as an argument (TBD))
     struct timeval ts;
     gettimeofday(&ts, NULL);
-    PHY_vars_eNB->ulsch_eNB[1+i]->reference_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
+    PHY_vars_eNB->ulsch[1+i]->reference_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
     int j;
 
     for (j=0; j<10; j++) {
-      initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->loc_rss_list[j]);
-      initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->loc_rssi_list[j]);
-      initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->loc_subcarrier_rss_list[j]);
-      initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->loc_timing_advance_list[j]);
-      initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->loc_timing_update_list[j]);
+      initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rss_list[j]);
+      initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rssi_list[j]);
+      initialize(&PHY_vars_eNB->ulsch[1+i]->loc_subcarrier_rss_list[j]);
+      initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_advance_list[j]);
+      initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_update_list[j]);
     }
 
-    initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->tot_loc_rss_list);
-    initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->tot_loc_rssi_list);
-    initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->tot_loc_subcarrier_rss_list);
-    initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->tot_loc_timing_advance_list);
-    initialize(&PHY_vars_eNB->ulsch_eNB[1+i]->tot_loc_timing_update_list);
+    initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rss_list);
+    initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rssi_list);
+    initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_subcarrier_rss_list);
+    initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_advance_list);
+    initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_update_list);
 #endif
   }
 
   // ULSCH for RA
-  PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS, frame_parms->N_RB_UL, abstraction_flag);
+  PHY_vars_eNB->ulsch[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS, frame_parms->N_RB_UL, abstraction_flag);
 
-  if (!PHY_vars_eNB->ulsch_eNB[0]) {
+  if (!PHY_vars_eNB->ulsch[0]) {
     LOG_E(PHY,"Can't get eNB ulsch structures\n");
     exit(-1);
   }
 
-  PHY_vars_eNB->dlsch_eNB_SI  = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag);
-  LOG_D(PHY,"eNB %d : SI %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_SI);
-  PHY_vars_eNB->dlsch_eNB_ra  = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag);
-  LOG_D(PHY,"eNB %d : RA %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_ra);
-  PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, 0);
-  LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_MCH);
+  PHY_vars_eNB->dlsch_SI  = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag);
+  LOG_D(PHY,"eNB %d : SI %p\n",eNB_id,PHY_vars_eNB->dlsch_SI);
+  PHY_vars_eNB->dlsch_ra  = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag);
+  LOG_D(PHY,"eNB %d : RA %p\n",eNB_id,PHY_vars_eNB->dlsch_ra);
+  PHY_vars_eNB->dlsch_MCH = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, 0);
+  LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_MCH);
 
 
-  PHY_vars_eNB->rx_total_gain_eNB_dB=130;
+  PHY_vars_eNB->rx_total_gain_dB=130;
 
   for(i=0; i<NUMBER_OF_UE_MAX; i++)
     PHY_vars_eNB->mu_mimo_mode[i].dl_pow_off = 2;
@@ -146,7 +146,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
 
   PHY_vars_eNB->check_for_SUMIMO_transmissions = 0;
 
-  PHY_vars_eNB->lte_frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
+  PHY_vars_eNB->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
 
   return (PHY_vars_eNB);
 }
@@ -161,38 +161,38 @@ PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms,
   PHY_VARS_UE* PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
   memset(PHY_vars_UE,0,sizeof(PHY_VARS_UE));
   PHY_vars_UE->Mod_id=UE_id;
-  memcpy(&(PHY_vars_UE->lte_frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
+  memcpy(&(PHY_vars_UE->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
   phy_init_lte_ue(PHY_vars_UE,1,abstraction_flag);
 
   for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
     for (j=0; j<2; j++) {
-      PHY_vars_UE->dlsch_ue[i][j]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+      PHY_vars_UE->dlsch[i][j]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
 
-      if (!PHY_vars_UE->dlsch_ue[i][j]) {
+      if (!PHY_vars_UE->dlsch[i][j]) {
         LOG_E(PHY,"Can't get ue dlsch structures\n");
         exit(-1);
       } else
-        LOG_D(PHY,"dlsch_ue[%d][%d] => %p\n",UE_id,i,PHY_vars_UE->dlsch_ue[i][j]);
+        LOG_D(PHY,"dlsch[%d][%d] => %p\n",UE_id,i,PHY_vars_UE->dlsch[i][j]);
     }
 
 
 
-    PHY_vars_UE->ulsch_ue[i]  = new_ue_ulsch(frame_parms->N_RB_UL, abstraction_flag);
+    PHY_vars_UE->ulsch[i]  = new_ue_ulsch(frame_parms->N_RB_UL, abstraction_flag);
 
-    if (!PHY_vars_UE->ulsch_ue[i]) {
+    if (!PHY_vars_UE->ulsch[i]) {
       LOG_E(PHY,"Can't get ue ulsch structures\n");
       exit(-1);
     }
 
-    PHY_vars_UE->dlsch_ue_SI[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
-    PHY_vars_UE->dlsch_ue_ra[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+    PHY_vars_UE->dlsch_SI[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+    PHY_vars_UE->dlsch_ra[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
 
     PHY_vars_UE->transmission_mode[i] = transmission_mode;
   }
 
-  PHY_vars_UE->lte_frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
+  PHY_vars_UE->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
 
-  PHY_vars_UE->dlsch_ue_MCH[0]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS_MBSFN,frame_parms->N_RB_DL,0);
+  PHY_vars_UE->dlsch_MCH[0]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS_MBSFN,frame_parms->N_RB_DL,0);
 
   return (PHY_vars_UE);
 }