diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 6c616bf62286708dd35e316dfc03a88e53a2a8a8..b19179e07d8f00b852c2f5b1d8471df36a950e82 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -33,6 +33,9 @@
 #include "assertions.h"
 #include <math.h>
 
+#include "PHY/NR_REFSIG/defs.h" 
+#include "PHY/LTE_REFSIG/lte_refsig.h"
+
 extern uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn);
 extern int32_t get_uldl_offset(int eutra_bandP);
 
@@ -62,7 +65,6 @@ int l1_north_init_gNB() {
         LOG_I(PHY,"%s() RC.gNB[%d][%d] installing callbacks\n", __FUNCTION__, i,  j);
 
         RC.gNB[i][j]->if_inst->PHY_config_req = nr_phy_config_request;
-        nr_phy_config_request(&RC.gNB[i][j]->gNB_config);
         RC.gNB[i][j]->if_inst->schedule_response = schedule_response;
       }
     }
diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c
index 1fcaaed494362ce17fcacf5bb354c0c437d3fd71..89ce1f8ee36140bd2b0d68de20f714c840d84a38 100644
--- a/openair1/PHY/INIT/nr_parms.c
+++ b/openair1/PHY/INIT/nr_parms.c
@@ -26,12 +26,12 @@
 uint32_t nr_subcarrier_spacing[MAX_NUM_SUBCARRIER_SPACING] = {15e3, 30e3, 60e3, 120e3, 240e3};
 uint16_t nr_slots_per_subframe[MAX_NUM_SUBCARRIER_SPACING] = {1, 2, 4, 16, 32};
 
-int nr_init_frame_parms(nfapi_config_request_t* config,
+int nr_init_frame_parms(nfapi_nr_config_request_t* config,
                         NR_DL_FRAME_PARMS *frame_parms)
 {
 
-  int N_RB = config->rf_config.dl_channel_bandwidth.value;
-  int Ncp = config->subframe_config.dl_cyclic_prefix_type.value;
+  int N_RB = config->rf_config.dl_carrierBandwidth.value;
+  int Ncp = config->subframe_config.dl_prefix_type.value;
   int mu = config->subframe_config.numerology_index_mu.value;
 
 #if DISABLE_LOG_X
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index 26793bcad2ce4491ba3893da106e35a98550f75a..070cbadd95359edc2638fb9c68732e5b7ab32a2d 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -374,12 +374,13 @@ void phy_config_request(PHY_Config_t *phy_config);
 
 int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
 void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
-int nr_init_frame_parms(nfapi_config_request_t* config, NR_DL_FRAME_PARMS *frame_parms);
+int nr_init_frame_parms(nfapi_nr_config_request_t* config, NR_DL_FRAME_PARMS *frame_parms);
 int nr_init_frame_parms_ue(nfapi_config_request_t* config, NR_DL_FRAME_PARMS *frame_parms);
 void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
 int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);
 void nr_phy_config_request(NR_PHY_Config_t *gNB);
 void phy_free_nr_gNB(PHY_VARS_gNB *gNB);
+int l1_north_init_gNB(void);
 
 /** @} */
 #endif
diff --git a/openair1/PHY/NR_REFSIG/nr_gold.c b/openair1/PHY/NR_REFSIG/nr_gold.c
index dca4089e6a09d53c39ebf73b6b6e93c5725ff420..715e495b7b0c2ccacc4d533562e7d6f9a8b5fbe7 100644
--- a/openair1/PHY/NR_REFSIG/nr_gold.c
+++ b/openair1/PHY/NR_REFSIG/nr_gold.c
@@ -27,7 +27,7 @@ void nr_init_pbch_dmrs(PHY_VARS_gNB* gNB)
   unsigned int n, x1, x2;
   unsigned char Nid, i_ssb, i_ssb2;
   unsigned char Lmax, l, n_hf, N_hf;
-  nfapi_config_request_t *cfg = &gNB->gNB_config;
+  nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
   NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
 
   Nid = cfg->sch_config.physical_cell_id.value;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
index 842f35ae524baaf39c299ae9055591072be7a1bc..6cad9c0a5f43be8f3563c6d8d5614784bdd4c896 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
@@ -46,7 +46,7 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
                           int16_t amp,
                           uint8_t ssb_start_symbol,
                           uint8_t nushift,
-                          nfapi_config_request_t* config,
+                          nfapi_nr_config_request_t* config,
                           NR_DL_FRAME_PARMS *frame_parms)
 {
   int k,l;
@@ -159,7 +159,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
                      uint8_t n_hf,
                      int sfn,
                      int frame_mod8,
-                     nfapi_config_request_t* config,
+                     nfapi_nr_config_request_t* config,
                      NR_DL_FRAME_PARMS *frame_parms)
 {
 
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c
index bb0d43da76c87d866b4561ae9c5eab010b2f912d..3c4f296cd616794c7dc190e1b408033fde04082a 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c
@@ -28,7 +28,7 @@ int nr_generate_pss(  int16_t *d_pss,
                       int32_t **txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
+                      nfapi_nr_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,k,l,m;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c
index a9ed801faf91e5526c39218955e6ec9bf759cb08..9b318d74ef9d8016ad3d18fab04bbf07df025582 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c
@@ -27,7 +27,7 @@ int nr_generate_sss(  int16_t *d_sss,
                       int32_t **txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
+                      nfapi_nr_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,k,l;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport.h b/openair1/PHY/NR_TRANSPORT/nr_transport.h
index 58a4344e9dea09b2d1ed44f4629a06cda20d2c75..bcd9eee59f5ab93640219a13346526e7b9568352 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport.h
@@ -36,7 +36,7 @@ int nr_generate_pss(  int16_t *d_pss,
                       int32_t **txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
+                      nfapi_nr_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms);
 
 /*!
@@ -49,7 +49,7 @@ int nr_generate_sss(  int16_t *d_sss,
                       int32_t **txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
+                      nfapi_nr_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms);
 
 /*!
@@ -63,7 +63,7 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
                           int16_t amp,
                           uint8_t ssb_start_symbol,
                           uint8_t nushift,
-                          nfapi_config_request_t* config,
+                          nfapi_nr_config_request_t* config,
                           NR_DL_FRAME_PARMS *frame_parms);
 
 /*!
@@ -91,7 +91,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
                      uint8_t n_hf,
                      int sfn,
                      int frame_mod8,
-                     nfapi_config_request_t* config,
+                     nfapi_nr_config_request_t* config,
                      NR_DL_FRAME_PARMS *frame_parms);
 
 #endif /*__NR_TRANSPORT__H__*/
diff --git a/openair1/PHY/defs_NR.h b/openair1/PHY/defs_NR.h
index ec9ab60922c2eabd48bf176ae752e100928f2f7e..72af638b2790f1faefff672193d2f9da8ba794cc 100644
--- a/openair1/PHY/defs_NR.h
+++ b/openair1/PHY/defs_NR.h
@@ -117,7 +117,7 @@ typedef struct PHY_VARS_gNB_s {
   nfapi_nr_config_request_t  gNB_config;
   NR_DL_FRAME_PARMS   frame_parms;
   PHY_MEASUREMENTS_gNB measurements;
-  IF_Module_t          *if_inst;
+  NR_IF_Module_t          *if_inst;
   UL_IND_t             UL_INFO;
   pthread_mutex_t      UL_INFO_mutex;
   /// NFAPI RX ULSCH information
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index c31b6a8d9ad4038b3c0eeee20a65fa5a845be4ad..4e1f9aa06bdd10e09e4f5e7f37de002932118f91 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -240,10 +240,10 @@ typedef struct PHY_VARS_gNB_s {
   int                  rx_total_gain_dB;
   int                  (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB);
   uint8_t              local_flag;
-  nfapi_config_request_t  gNB_config;
+  nfapi_nr_config_request_t  gNB_config;
   NR_DL_FRAME_PARMS   frame_parms;
   PHY_MEASUREMENTS_gNB measurements;
-  IF_Module_t          *if_inst;
+  NR_IF_Module_t          *if_inst;
   UL_IND_t             UL_INFO;
   pthread_mutex_t      UL_INFO_mutex;
   /// NFAPI RX ULSCH information
diff --git a/openair1/SCHED_NR/defs.h b/openair1/SCHED_NR/defs.h
index 61d6b2461cf1e14052a53468ca014e512e064291..0e651dfeba570a58ff25a306599407b192dc4076 100644
--- a/openair1/SCHED_NR/defs.h
+++ b/openair1/SCHED_NR/defs.h
@@ -32,7 +32,6 @@
 #include "PHY_INTERFACE/phy_interface.h"
 #include "SCHED/sched_eNB.h"
 
-lte_subframe_t nr_subframe_select (nfapi_config_request_t *cfg, unsigned char subframe);
 int nr_generate_pss(  int16_t *d_pss,
                       int32_t **txdataF,
                       int16_t amp,
diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c
index 4f06644ee8578df54399ebd420a20de2a0b99fd8..cae86d0b3a9c85e8cf3f814203bbe10d5d4de6eb 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_common.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_common.c
@@ -34,7 +34,7 @@
 #include "SCHED_NR/defs.h"
 
 
-nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subframe)
+nr_subframe_t nr_subframe_select(nfapi_nr_config_request_t *cfg,unsigned char subframe)
 {
   if (cfg->subframe_config.duplex_mode.value == FDD)
     return(SF_DL);
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index a2099b82cb8c3afa17d2ce20837ae993eb25074d..2ff111b98a17c782bb2c5da0ff2e1709d193a173 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -75,7 +75,7 @@ int return_ssb_type(nfapi_config_request_t *cfg)
 }*/
 
 // First SSB starting symbol candidate is used and type B is chosen for 30kHz SCS
-int nr_get_ssb_start_symbol(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp)
+int nr_get_ssb_start_symbol(nfapi_nr_config_request_t *cfg, NR_DL_FRAME_PARMS *fp)
 {
   int mu = cfg->subframe_config.numerology_index_mu.value;
   int symbol = 0;
@@ -118,7 +118,7 @@ void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS
 void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) {
 
   NR_DL_FRAME_PARMS *fp=&gNB->frame_parms;
-  nfapi_config_request_t *cfg = &gNB->gNB_config;
+  nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
   int **txdataF = gNB->common_vars.txdataF;
   uint8_t *pbch_pdu=&gNB->pbch_pdu[0];
   int ss_subframe = (cfg->sch_config.half_frame_index.value)? 5 : 0;
@@ -161,7 +161,7 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
   int subframe=proc->subframe_tx;
 
   NR_DL_FRAME_PARMS *fp=&gNB->frame_parms;
-  nfapi_config_request_t *cfg = &gNB->gNB_config;
+  nfapi_nr_config_request_t *cfg = &gNB->gNB_config;
 
   int offset = gNB->CC_id;
 
diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c
index 0148278e75a1b7f5649a889ce1d59cd509b3faa2..078bc037e4017edb43deaa2130ff3779c48f817d 100644
--- a/openair2/GNB_APP/gnb_app.c
+++ b/openair2/GNB_APP/gnb_app.c
@@ -46,6 +46,8 @@
 #   include "gtpv1u_eNB_task.h"
 # endif
 
+# include "PHY/INIT/phy_init.h" 
+
 extern unsigned char NB_gNB_INST;
 #endif
 
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index aa359bc84fff0268203f3e0bf0d66956d452f6bd..1ac5963ffde573dd313fdda806f2409b57f55e3a 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -58,6 +58,7 @@
 #include "common/config/config_userapi.h"
 #include "RRC_config_tools.h"
 #include "gnb_paramdef.h"
+#include "LAYER2/NR_MAC_gNB/mac_proto.h"
 
 extern uint16_t sf_ahead;
 
@@ -77,23 +78,23 @@ void RCconfig_NR_flexran()
    * the only reason for all these variables is, that they are "hard-encoded"
    * into the CCPARAMS_DESC macro and we need it for the Nid_cell variable ...
    */
-  char      *frame_type, DL_prefix_type, UL_prefix_type, SIB1_frequencyOffsetSSB,
-            DL_SCS_SubcarrierSpacing, DL_BWP_SubcarrierSpacing, DL_BWP_prefix_type,
-            UL_frequencyShift7p5khz, UL_SCS_SubcarrierSpacing, UL_BWP_SubcarrierSpacing,
-            UL_BWP_prefix_type, ServingCellConfigCommon_ssb_PositionsInBurst_PR,
-            NIA_SubcarrierSpacing, referenceSubcarrierSpacing, dl_UL_TransmissionPeriodicity,
-            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,
-            rach_groupBconfigured, rach_messagePowerOffsetGroupB, 
-            prach_RootSequenceIndex_choice, prach_msg1_SubcarrierSpacing,
-            restrictedSetConfig, msg3_transformPrecoding, prach_msg1_FDM,
-            powerRampingStep, groupHoppingEnabledTransformPrecoding,
-            PUSCH_TimeDomainResourceAllocation_mappingType, pucch_GroupHopping,
-            PDSCH_TimeDomainResourceAllocation_mappingType, RateMatchPattern_patternType,
-            symbolsInResourceBlock, RateMatchPattern_subcarrierSpacing, RateMatchPattern_mode,
-            PDCCH_cce_REG_MappingType, PDCCH_precoderGranularity,
-            tci_PresentInDCI, SearchSpace_monitoringSlotPeriodicityAndOffset_choice,
-            SearchSpace_searchSpaceType, ue_Specific__dci_Formats,
-            RateMatchPatternLTE_CRS_subframeAllocation_choice;
+  char      *frame_type, *DL_prefix_type, *UL_prefix_type, *SIB1_frequencyOffsetSSB,
+            *DL_SCS_SubcarrierSpacing, *DL_BWP_SubcarrierSpacing, *DL_BWP_prefix_type,
+            *UL_frequencyShift7p5khz, *UL_SCS_SubcarrierSpacing, *UL_BWP_SubcarrierSpacing,
+            *UL_BWP_prefix_type, *ServingCellConfigCommon_ssb_PositionsInBurst_PR,
+            *NIA_SubcarrierSpacing, *referenceSubcarrierSpacing, *dl_UL_TransmissionPeriodicity,
+            *rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,
+            *rach_groupBconfigured, *rach_messagePowerOffsetGroupB, 
+            *prach_RootSequenceIndex_choice, *prach_msg1_SubcarrierSpacing,
+            *restrictedSetConfig, *msg3_transformPrecoding, *prach_msg1_FDM,
+            *powerRampingStep, *groupHoppingEnabledTransformPrecoding,
+            *PUSCH_TimeDomainResourceAllocation_mappingType, *pucch_GroupHopping,
+            *PDSCH_TimeDomainResourceAllocation_mappingType, *RateMatchPattern_patternType,
+            *symbolsInResourceBlock, *RateMatchPattern_subcarrierSpacing, *RateMatchPattern_mode,
+            *PDCCH_cce_REG_MappingType, *PDCCH_precoderGranularity,
+            *tci_PresentInDCI, *SearchSpace_monitoringSlotPeriodicityAndOffset_choice,
+            *SearchSpace_searchSpaceType, *ue_Specific__dci_Formats,
+            *RateMatchPatternLTE_CRS_subframeAllocation_choice;
 
   long long int  downlink_frequency;
 
@@ -840,7 +841,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(SIB1_frequencyOffsetSSB , "khz5") == 0) {
               NRRRC_CONFIGURATION_REQ (msg_p).SIB1_frequencyOffsetSSB[j] = 5;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_frequencyOffsetSSB !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SIB1_frequencyOffsetSSB !\n",
                            RC.config_file_name, i, SIB1_frequencyOffsetSSB);
             }
 
@@ -1646,7 +1647,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139;
               NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l139[j] = prach_RootSequenceIndex_l139;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex_choice !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_RootSequenceIndex_choice !\n",
                            RC.config_file_name, i, prach_RootSequenceIndex_choice);
             }
 
@@ -1672,7 +1673,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(restrictedSetConfig , "restrictedSetTypeB") == 0) {
               NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for restrictedSetConfig !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for restrictedSetConfig !\n",
                            RC.config_file_name, i, restrictedSetConfig);
             }
 
@@ -1696,7 +1697,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(prach_msg1_FDM , "eight") == 0) {
               NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_eight;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FDM !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_FDM !\n",
                            RC.config_file_name, i, prach_msg1_FDM);
             }            
             
@@ -1767,7 +1768,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(powerRampingStep , "dB6") == 0) {
               NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB6;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for powerRampingStep !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for powerRampingStep !\n",
                            RC.config_file_name, i, powerRampingStep);
             }
 
@@ -1831,7 +1832,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeB;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n",
                            RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_mappingType);
             }
 
@@ -1843,7 +1844,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(pucch_GroupHopping , "disable") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_disable;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pucch_GroupHopping !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for pucch_GroupHopping !\n",
                            RC.config_file_name, i, pucch_GroupHopping);
             }
 
@@ -1865,7 +1866,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeB;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n",
                            RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_mappingType);
             }
 
@@ -1883,7 +1884,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(RateMatchPattern_patternType , "controlResourceSet") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_controlResourceSet;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_patternType !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_patternType !\n",
                            RC.config_file_name, i, RateMatchPattern_patternType);
             }
 
@@ -1894,7 +1895,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(symbolsInResourceBlock , "twoSlots") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for symbolsInResourceBlock !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for symbolsInResourceBlock !\n",
                            RC.config_file_name, i, symbolsInResourceBlock);
             }
 
@@ -1952,7 +1953,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(RateMatchPattern_mode , "semiStatic") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  NR_RateMatchPattern__mode_semiStatic;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_mode !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_mode !\n",
                            RC.config_file_name, i, RateMatchPattern_mode);
             }
 
@@ -2007,7 +2008,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(PDCCH_cce_REG_MappingType , "nonInterleaved") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_cce_REG_MappingType !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDCCH_cce_REG_MappingType !\n",
                            RC.config_file_name, i, PDCCH_cce_REG_MappingType);
             }
 
@@ -2054,7 +2055,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(PDCCH_precoderGranularity , "allContiguousRBs") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  NR_ControlResourceSet__precoderGranularity_allContiguousRBs;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_precoderGranularity !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDCCH_precoderGranularity !\n",
                            RC.config_file_name, i, PDCCH_precoderGranularity);
             }            
 
@@ -2153,7 +2154,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING;
             
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n",
                            RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_choice);
             }// End if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1")
 
@@ -2320,7 +2321,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(SearchSpace_searchSpaceType , "ue_Specific") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_ue_Specific;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_searchSpaceType !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SearchSpace_searchSpaceType !\n",
                            RC.config_file_name, i, SearchSpace_searchSpaceType);
             }
 
@@ -2438,7 +2439,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(ue_Specific__dci_Formats , "formats0-1-And-1-1") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ue_Specific__dci_Formats !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for ue_Specific__dci_Formats !\n",
                            RC.config_file_name, i, ue_Specific__dci_Formats);
             }
 
@@ -2553,7 +2554,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
             }else if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "fourFrames") == 0){
               NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  NR_EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames;
             }else {
-              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_subframeAllocation_choice !\n",
+              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPatternLTE_CRS_subframeAllocation_choice !\n",
                            RC.config_file_name, i, RateMatchPatternLTE_CRS_subframeAllocation_choice);
             }
 
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index dfdb4333668493125c6c90d5b04b2fce9ea55a91..cb837cae6d36d6b0c50a35998ff5a40d435bcade 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -73,6 +73,11 @@
 
 #include "targets/ARCH/COMMON/common_lib.h"
 
+//solve implicit declaration
+#include "PHY/LTE_ESTIMATION/lte_estimation.h"
+#include "PHY/LTE_TRANSPORT/transport_proto.h"
+#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
+
 /** @defgroup _mac  MAC
  * @ingroup _oai2
  * @{
diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h
index 3c4f830bdb323f6be973d848010e38dd2e0f0a65..81cf2075f7efeda6595631fd6580c22284422183 100644
--- a/openair2/LAYER2/MAC/mac_proto.h
+++ b/openair2/LAYER2/MAC/mac_proto.h
@@ -32,6 +32,7 @@
 #include "LAYER2/MAC/mac.h"
 #include "PHY/defs_common.h" // for PRACH_RESOURCES_t and lte_subframe_t
 
+
 /** \addtogroup _mac
  *  @{
  */
diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
index 7ce6f242bb34b335207f058f109d1b2782ebec0a..cd84855cc4db17f6c109c0b7fe0f24bad2c8be53 100644
--- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
@@ -18,6 +18,214 @@ extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
 extern uint8_t nfapi_mode;
 extern uint16_t sf_ahead;
 
+void handle_nr_rach(NR_UL_IND_t *UL_info) {
+  int i;
+
+  if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
+
+    AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+    UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
+    LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
+    initiate_ra_proc(UL_info->module_id,
+         UL_info->CC_id,
+         NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
+         NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
+         UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+         UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+         UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
+#ifdef Rel14
+         ,0
+#endif
+         );
+  }
+
+#ifdef Rel14
+  if (UL_info->rach_ind_br.rach_indication_body.number_of_preambles>0) {
+
+    AssertFatal(UL_info->rach_ind_br.rach_indication_body.number_of_preambles<5,"More than 4 preambles not supported\n");
+    for (i=0;i<UL_info->rach_ind_br.rach_indication_body.number_of_preambles;i++) {
+      AssertFatal(UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type>0,
+      "Got regular PRACH preamble, not BL/CE\n");
+      LOG_D(MAC,"Frame %d, Subframe %d Calling initiate_ra_proc (CE_level %d)\n",UL_info->frame,UL_info->subframe,
+      UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type-1);
+      initiate_ra_proc(UL_info->module_id,
+           UL_info->CC_id,
+           UL_info->frame,
+           UL_info->subframe,
+           UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.preamble,
+           UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.timing_advance,
+           UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.rnti,
+           UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type);
+    }
+    UL_info->rach_ind_br.rach_indication_body.number_of_preambles=0;
+  }
+#endif
+}
+
+void handle_nr_sr(NR_UL_IND_t *UL_info) {
+
+  int i;
+
+  if (nfapi_mode == 1)  // PNF
+  {
+    if (UL_info->sr_ind.sr_indication_body.number_of_srs>0)
+    {
+      oai_nfapi_sr_indication(&UL_info->sr_ind);
+    }
+  }
+  else
+  {
+    for (i=0;i<UL_info->sr_ind.sr_indication_body.number_of_srs;i++)
+      SR_indication(UL_info->module_id,
+          UL_info->CC_id,
+          UL_info->frame,
+          UL_info->subframe,
+          UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
+          UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
+  }
+
+  UL_info->sr_ind.sr_indication_body.number_of_srs=0;
+}
+
+void handle_nr_cqi(NR_UL_IND_t *UL_info) {
+
+  int i;
+
+  if (nfapi_mode == 1)
+  {
+    if (UL_info->cqi_ind.number_of_cqis>0)
+    {
+      LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.number_of_cqis);
+      nfapi_cqi_indication_t ind;
+
+      ind.header.message_id = NFAPI_RX_CQI_INDICATION;
+      ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
+      ind.cqi_indication_body = UL_info->cqi_ind;
+
+      oai_nfapi_cqi_indication(&ind);
+
+      UL_info->cqi_ind.number_of_cqis=0;
+    }
+  }
+  else
+  {
+    for (i=0;i<UL_info->cqi_ind.number_of_cqis;i++) 
+      cqi_indication(UL_info->module_id,
+          UL_info->CC_id,
+          UL_info->frame,
+          UL_info->subframe,
+          UL_info->cqi_ind.cqi_pdu_list[i].rx_ue_information.rnti,
+          &UL_info->cqi_ind.cqi_pdu_list[i].cqi_indication_rel9,
+          UL_info->cqi_ind.cqi_raw_pdu_list[i].pdu,
+          &UL_info->cqi_ind.cqi_pdu_list[i].ul_cqi_information);
+
+    UL_info->cqi_ind.number_of_cqis=0;
+  }
+}
+
+void handle_nr_harq(NR_UL_IND_t *UL_info) {
+
+  int i;
+
+  if (nfapi_mode == 1 && UL_info->harq_ind.harq_indication_body.number_of_harqs>0) // PNF
+  {
+    //LOG_D(PHY, "UL_info->harq_ind.harq_indication_body.number_of_harqs:%d Send to VNF\n", UL_info->harq_ind.harq_indication_body.number_of_harqs);
+
+    int retval = oai_nfapi_harq_indication(&UL_info->harq_ind);
+
+    if (retval!=0)
+    {
+      LOG_E(PHY, "Failed to encode NFAPI HARQ_IND retval:%d\n", retval);
+    }
+
+    UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
+  }
+  else
+  {
+    for (i=0;i<UL_info->harq_ind.harq_indication_body.number_of_harqs;i++)
+      harq_indication(UL_info->module_id,
+          UL_info->CC_id,
+          NFAPI_SFNSF2SFN(UL_info->harq_ind.sfn_sf),
+          NFAPI_SFNSF2SF(UL_info->harq_ind.sfn_sf),
+          &UL_info->harq_ind.harq_indication_body.harq_pdu_list[i]);
+
+    UL_info->harq_ind.harq_indication_body.number_of_harqs=0;
+  }
+}
+
+void handle_nr_ulsch(NR_UL_IND_t *UL_info) {
+
+  int i,j;
+
+  if(nfapi_mode == 1)
+  {
+    if (UL_info->crc_ind.crc_indication_body.number_of_crcs>0)
+    {
+      //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf));
+
+      oai_nfapi_crc_indication(&UL_info->crc_ind);
+
+      UL_info->crc_ind.crc_indication_body.number_of_crcs = 0;
+    }
+
+    if (UL_info->rx_ind.rx_indication_body.number_of_pdus>0)
+    {
+      //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf));
+      oai_nfapi_rx_ind(&UL_info->rx_ind);
+      UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
+    }
+  }
+  else
+  {
+    if (UL_info->rx_ind.rx_indication_body.number_of_pdus>0 && UL_info->crc_ind.crc_indication_body.number_of_crcs>0) {
+      for (i=0;i<UL_info->rx_ind.rx_indication_body.number_of_pdus;i++) {
+        for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++) {
+          // find crc_indication j corresponding rx_indication i
+          LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x\n", j, UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i, UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+          if (UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti ==
+              UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti) {
+            LOG_D(PHY, "UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d\n", j, UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+            if (UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
+              LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
+              rx_sdu(UL_info->module_id,
+                  UL_info->CC_id,
+                  NFAPI_SFNSF2SFN(UL_info->rx_ind.sfn_sf), //UL_info->frame,
+                  NFAPI_SFNSF2SF(UL_info->rx_ind.sfn_sf), //UL_info->subframe,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                  (uint8_t *)NULL,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+            }
+            else {
+              LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
+              rx_sdu(UL_info->module_id,
+                  UL_info->CC_id,
+                  NFAPI_SFNSF2SFN(UL_info->rx_ind.sfn_sf), //UL_info->frame,
+                  NFAPI_SFNSF2SF(UL_info->rx_ind.sfn_sf), //UL_info->subframe,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].data,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                  UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+            }
+            break;
+          } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
+          //    UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
+        } //    for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
+      } //   for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
+      UL_info->crc_ind.crc_indication_body.number_of_crcs=0;
+      UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
+    } // UL_info->rx_ind.rx_indication_body.number_of_pdus>0 && UL_info->subframe && UL_info->crc_ind.crc_indication_body.number_of_crcs>0
+    else if (UL_info->rx_ind.rx_indication_body.number_of_pdus!=0 || UL_info->crc_ind.crc_indication_body.number_of_crcs!=0) {
+      LOG_E(PHY,"hoping not to have mis-match between CRC ind and RX ind - hopefully the missing message is coming shortly rx_ind:%d(SFN/SF:%05d) crc_ind:%d(SFN/SF:%05d) UL_info(SFN/SF):%04d%d\n",
+          UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf),
+          UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf),
+          UL_info->frame, UL_info->subframe);
+    }
+  }
+}
+
 void NR_UL_indication(NR_UL_IND_t *UL_info)
 {
 
@@ -56,18 +264,18 @@ void NR_UL_indication(NR_UL_IND_t *UL_info)
   clear_nfapi_information(RC.mac[module_id],CC_id,
         UL_info->frame,UL_info->subframe);
 
-  handle_rach(UL_info);
+  handle_nr_rach(UL_info);
 
-  handle_sr(UL_info);
+  handle_nr_sr(UL_info);
 
-  handle_cqi(UL_info);
+  handle_nr_cqi(UL_info);
 
-  handle_harq(UL_info);
+  handle_nr_harq(UL_info);
 
   // clear HI prior to handling ULSCH
   mac->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi                     = 0;
   
-  handle_ulsch(UL_info);
+  handle_nr_ulsch(UL_info);
 
   if (nfapi_mode != 1)
   {
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index a212acc2c05a0911f87fabb7fd6e1efe8387ba62..0cdbe96e86ab3ebf9eff91629d00eb332eaf5e32 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -94,6 +94,8 @@
 
 #include "SIMULATION/TOOLS/sim.h" // for taus
 
+#include "PHY/LTE_TRANSPORT/transport_proto.h"
+
 //#define XER_PRINT
 
 extern RAN_CONTEXT_t RC;
diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h
index 78fe0ee9540494120062566a6be9b99ca3d97b35..0bd2f863dc69c495a15231840ceea861556236e0 100644
--- a/openair2/UTIL/LOG/log.h
+++ b/openair2/UTIL/LOG/log.h
@@ -185,11 +185,11 @@ typedef enum {
     LOCALIZE,
     RRH,
     X2AP,
-    MAX_LOG_COMPONENTS,
     GNB_APP,
     NR_RRC,
     NR_MAC,
     NR_PHY,
+    MAX_LOG_COMPONENTS,
 }
 comp_name_t;
 
diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c
index 5c29aab949259edfd98966f56a5a8f1929876809..d6d7f7b7d03c4c5bcc7ca5a8fc14201e2d71d138 100644
--- a/targets/RT/USER/nr-gnb.c
+++ b/targets/RT/USER/nr-gnb.c
@@ -926,9 +926,9 @@ void init_gNB(int single_thread_flag,int wait_for_sync) {
 #endif
 
       LOG_I(PHY,"Registering with MAC interface module\n");
-      AssertFatal((gNB->if_inst         = IF_Module_init(inst))!=NULL,"Cannot register interface");
+      AssertFatal((gNB->if_inst         = NR_IF_Module_init(inst))!=NULL,"Cannot register interface");
       gNB->if_inst->schedule_response   = schedule_response;
-      gNB->if_inst->PHY_config_req      = phy_config_request;
+      gNB->if_inst->PHY_config_req      = nr_phy_config_request;
       nr_phy_config_request(gNB);
       memset((void*)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO));
       memset((void*)&gNB->Sched_INFO,0,sizeof(gNB->Sched_INFO));
diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c
index 43d944038b45570a37b246e357327972b5095e17..b39c9ab3a38cbf84c80719938d14283136db64ca 100644
--- a/targets/RT/USER/nr-softmodem.c
+++ b/targets/RT/USER/nr-softmodem.c
@@ -56,7 +56,7 @@
 #include "LAYER2/MAC/mac_proto.h"
 #include "RRC/LTE/rrc_vars.h"
 #include "PHY_INTERFACE/phy_interface_vars.h"
-
+#include "gnb_config.h"
 #ifdef SMBV
 #include "PHY/TOOLS/smbv.h"
 unsigned short config_frames[4] = {2,9,11,13};