diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d206329fd122a2d529cf4281fa7563c181e07a1..b54130b30a9e3b6601e4caccbb9d718cb2645335 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1578,7 +1578,7 @@ add_library(L2
   ${ENB_APP_SRC}
   ${MCE_APP_SRC}
   )
-target_link_libraries(L2 PRIVATE f1ap x2ap s1ap lte_rrc m2ap)
+target_link_libraries(L2 PRIVATE x2ap s1ap lte_rrc m2ap)
 target_link_libraries(L2 PRIVATE asn1_nr_rrc asn1_lte_rrc)
 
 add_library(MAC_NR ${MAC_NR_SRC})
@@ -2158,7 +2158,6 @@ add_executable(lte-softmodem
   ${OPENAIR_DIR}/radio/COMMON/record_player.c
   ${OPENAIR2_DIR}/RRC/NAS/nas_config.c
   ${OPENAIR2_DIR}/RRC/NAS/rb_config.c
-  ${OPENAIR2_DIR}/F1AP/dummy_enb.c
   ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
   ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
   ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
@@ -2174,7 +2173,7 @@ add_dependencies(lte-softmodem oai_iqplayer)
 
 target_link_libraries(lte-softmodem PRIVATE
   -Wl,--start-group
-  lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U f1ap SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
+  lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
   PHY_COMMON PHY PHY_RU  L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
   ${RAL_LIB} ${NAS_UE_LIB} ITTI SIMU
   -Wl,--end-group z dl)
@@ -2213,7 +2212,7 @@ add_dependencies(ocp-enb oai_iqplayer coding params_libconfig rfsimulator)
 
 target_link_libraries (ocp-enb
   -Wl,--start-group
-  lte_rrc nr_rrc s1ap f1ap m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
+  lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
   PHY_COMMON PHY PHY_RU L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB MISC_NFAPI_LTE_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU
   ${RAL_LIB} ${NAS_UE_LIB} ITTI
   -Wl,--end-group z dl)
@@ -2242,7 +2241,7 @@ target_link_libraries(oairu PRIVATE asn1_nr_rrc asn1_lte_rrc)
 
 # force the generation of ASN.1 so that we don't need to wait during the build
 target_link_libraries(lte-softmodem PRIVATE
-                      asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap)
+                      asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap)
 
 
 # lte-uesoftmodem is  UE implementation
@@ -2287,7 +2286,7 @@ target_link_libraries(lte-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
 
 # force the generation of ASN.1 so that we don't need to wait during the build
 target_link_libraries(lte-uesoftmodem PRIVATE
-                      asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap)
+                      asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap)
 
 # nr-softmodem
 ###################################################
diff --git a/doc/Doxyfile b/doc/Doxyfile
index c839eabf84903743267ae3f62f67826b035fb122..1fb88bba746a45a0832be755050cbeae4b91c603 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -1003,7 +1003,6 @@ INPUT                  = \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.h \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.h \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/dummy_enb.c \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.h \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_warning_message_transmission.c \
 @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.h \
diff --git a/executables/create_tasks.c b/executables/create_tasks.c
index 4bbda1e876ef9910bd49fddb7e9852390c5a81cc..97e8880e9c15bf55ccdb7f758da1817739e03d39 100644
--- a/executables/create_tasks.c
+++ b/executables/create_tasks.c
@@ -34,8 +34,6 @@
     #include "lteRALenb.h"
   #endif
   #include "RRC/LTE/rrc_defs.h"
-# include "f1ap_cu_task.h"
-# include "f1ap_du_task.h"
 # include "enb_app.h"
 # include "openair2/LAYER2/MAC/mac_proto.h"
 #include <executables/split_headers.h> 
@@ -45,7 +43,6 @@ extern RAN_CONTEXT_t RC;
 
 int create_tasks(uint32_t enb_nb) {
   LOG_D(ENB_APP, "%s(enb_nb:%d\n", __FUNCTION__, enb_nb);
-  ngran_node_t type = RC.rrc[0]->node_type;
   int rc;
 
   if (enb_nb == 0) return 0;
@@ -60,7 +57,7 @@ int create_tasks(uint32_t enb_nb) {
     AssertFatal(rc >= 0, "Create task for SCTP failed\n");
   }
 
-  if (EPC_MODE_ENABLED && !NODE_IS_DU(type) && ! ( split73==SPLIT73_DU ) ) {
+  if (EPC_MODE_ENABLED && ! ( split73==SPLIT73_DU ) ) {
     rc = itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL);
     AssertFatal(rc >= 0, "Create task for S1AP failed\n");
     rc = itti_create_task(TASK_GTPV1_U, gtpv1uTask, NULL);
@@ -74,17 +71,5 @@ int create_tasks(uint32_t enb_nb) {
       LOG_I(X2AP, "X2AP is disabled.\n");
   }
 
-  if (NODE_IS_CU(type)) {
-    rc = itti_create_task(TASK_CU_F1, F1AP_CU_task, NULL);
-    AssertFatal(rc >= 0, "Create task for CU F1AP failed\n");
-  }
-
-  if (NODE_IS_DU(type)) {
-    rc = itti_create_task(TASK_DU_F1, F1AP_DU_task, NULL);
-    AssertFatal(rc >= 0, "Create task for DU F1AP failed\n");
-    rc = itti_create_task(TASK_GTPV1_U, gtpv1uTask, NULL);
-    AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
-  }
-
   return 0;
 }
diff --git a/executables/create_tasks_mbms.c b/executables/create_tasks_mbms.c
index 73495d871330695d1ce2c5b274361c3928a59324..368d9453baef6b0d0c84c0b69bc760bda2da145f 100644
--- a/executables/create_tasks_mbms.c
+++ b/executables/create_tasks_mbms.c
@@ -38,8 +38,6 @@
     #include "lteRALenb.h"
   #endif
   #include "RRC/LTE/rrc_defs.h"
-# include "f1ap_cu_task.h"
-# include "f1ap_du_task.h"
 # include "enb_app.h"
 # include "mce_app.h"
 # include "mme_app.h"
@@ -49,7 +47,6 @@
 
 int create_tasks_mbms(uint32_t enb_nb) {
  // LOG_D(ENB_APP, "%s(enb_nb:%d\n", __FUNCTION__, enb_nb);
- // ngran_node_t type = RC.rrc[0]->node_type;
   AssertFatal(!get_softmodem_params()->nsa, "In NSA mode\n");
   int rc;
 
@@ -80,17 +77,6 @@ int create_tasks_mbms(uint32_t enb_nb) {
     rc = itti_create_task(TASK_GTPV1_U, gtpv1uTask, NULL);
     AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
     }
-///
-//  if (NODE_IS_CU(type)) {
-//    rc = itti_create_task(TASK_CU_F1, F1AP_CU_task, NULL);
-//    AssertFatal(rc >= 0, "Create task for CU F1AP failed\n");
-//  }
-//
-//  if (NODE_IS_DU(type)) {
-//    rc = itti_create_task(TASK_DU_F1, F1AP_DU_task, NULL);
-//    AssertFatal(rc >= 0, "Create task for DU F1AP failed\n");
-//  }
-//
 
   if (is_m3ap_MCE_enabled()) {
      rc = itti_create_task(TASK_M3AP_MCE, m3ap_MCE_task, NULL);
diff --git a/executables/lte-softmodem.c b/executables/lte-softmodem.c
index b0baa5a8d2bdebfe88f8f897db2f32feab93e8ae..bdfa4c2335d0b225cd781fef3144adb16d447427 100644
--- a/executables/lte-softmodem.c
+++ b/executables/lte-softmodem.c
@@ -170,6 +170,24 @@ double cpuf;
 
 int oaisim_flag=0;
 
+/* hardcoded into gtp_itf.cpp */
+bool sdap_data_req(protocol_ctxt_t *ctxt_p,
+                   const ue_id_t ue_id,
+                   const srb_flag_t srb_flag,
+                   const rb_id_t rb_id,
+                   const mui_t mui,
+                   const confirm_t confirm,
+                   const sdu_size_t sdu_buffer_size,
+                   unsigned char *const sdu_buffer,
+                   const pdcp_transmission_mode_t pt_mode,
+                   const uint32_t *sourceL2Id,
+                   const uint32_t *destinationL2Id,
+                   const uint8_t qfi,
+                   const bool rqi,
+                   const int pdusession_id)
+{
+  abort();
+}
 
 /* forward declarations */
 void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
@@ -383,26 +401,21 @@ void terminate_task(module_id_t mod_id, task_id_t from, task_id_t to) {
 extern void  free_transport(PHY_VARS_eNB *);
 extern void  phy_free_RU(RU_t *);
 
-static void init_pdcp(void) {
-  if (!NODE_IS_DU(RC.rrc[0]->node_type)) {
-    pdcp_layer_init();
-    uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
-                             (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
+static void init_pdcp(void)
+{
+  pdcp_layer_init();
+  uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
+                           (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
 
-    if (IS_SOFTMODEM_NOS1)
-      pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT  ;
+  if (IS_SOFTMODEM_NOS1)
+    pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT  ;
 
-    pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
+  pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
 
-    pdcp_module_init(pdcp_initmask, 0);
+  pdcp_module_init(pdcp_initmask, 0);
 
-    if (NODE_IS_CU(RC.rrc[0]->node_type)) {
-      pdcp_set_rlc_data_req_func(cu_send_to_du);
-    } else {
-      pdcp_set_rlc_data_req_func(rlc_data_req);
-      pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
-    }
-  }
+  pdcp_set_rlc_data_req_func(rlc_data_req);
+  pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
 }
 
 static  void wait_nfapi_init(char *thread_name) {
@@ -420,7 +433,6 @@ int main ( int argc, char **argv )
 {
   int CC_id = 0;
   int ru_id;
-  int node_type = ngran_eNB;
 
   start_background_system();
 
@@ -469,8 +481,7 @@ int main ( int argc, char **argv )
   }
 
   if (RC.nb_inst > 0) {
-    /* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks
-     * for monolithic/F1 modes */
+    /* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks */
    init_pdcp();
     
     if (create_tasks(1) < 0) {
@@ -484,10 +495,9 @@ int main ( int argc, char **argv )
       itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
       rrc_enb_process_itti_msg(NULL);
     }
-    node_type = RC.rrc[0]->node_type;
   }
 
-  if (RC.nb_inst > 0 && NODE_IS_CU(node_type)) {
+  if (RC.nb_inst > 0) {
     protocol_ctxt_t ctxt;
     ctxt.module_id = 0 ;
     ctxt.instance = 0;
@@ -498,54 +508,49 @@ int main ( int argc, char **argv )
     pdcp_run(&ctxt);
   }
 
-  /* start threads if only L1 or not a CU */
-  if (RC.nb_inst == 0 || !NODE_IS_CU(node_type) || NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) {
-    // init UE_PF_PO and mutex lock
-    pthread_mutex_init(&ue_pf_po_mutex, NULL);
-    memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*MAX_MOBILES_PER_ENB*MAX_NUM_CCs);
-    mlockall(MCL_CURRENT | MCL_FUTURE);
-    pthread_cond_init(&sync_cond,NULL);
-    pthread_mutex_init(&sync_mutex, NULL);
+  // init UE_PF_PO and mutex lock
+  pthread_mutex_init(&ue_pf_po_mutex, NULL);
+  memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*MAX_MOBILES_PER_ENB*MAX_NUM_CCs);
+  mlockall(MCL_CURRENT | MCL_FUTURE);
+  pthread_cond_init(&sync_cond,NULL);
+  pthread_mutex_init(&sync_mutex, NULL);
 
-    rt_sleep_ns(10*100000000ULL);
+  rt_sleep_ns(10*100000000ULL);
 
-    if (NFAPI_MODE!=NFAPI_MONOLITHIC) {
-      LOG_I(ENB_APP,"NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n");
-      pthread_cond_init(&sync_cond,NULL);
-      pthread_mutex_init(&sync_mutex, NULL);
-    }
+  if (NFAPI_MODE!=NFAPI_MONOLITHIC) {
+    LOG_I(ENB_APP,"NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n");
+    pthread_cond_init(&sync_cond,NULL);
+    pthread_mutex_init(&sync_mutex, NULL);
+  }
 
-    if (NFAPI_MODE==NFAPI_MODE_VNF) {// VNF
+  if (NFAPI_MODE==NFAPI_MODE_VNF) {// VNF
 #if defined(PRE_SCD_THREAD)
-      init_ru_vnf();  // ru pointer is necessary for pre_scd.
+    init_ru_vnf();  // ru pointer is necessary for pre_scd.
 #endif
-      wait_nfapi_init("main?");
-    }
-
-    LOG_I(ENB_APP,"START MAIN THREADS\n");
-    // start the main threads
-    number_of_cards = 1;
-    printf("RC.nb_L1_inst:%d\n", RC.nb_L1_inst);
-
-    if (RC.nb_L1_inst > 0) {
-      printf("Initializing eNB threads single_thread_flag:%d wait_for_sync:%d\n", get_softmodem_params()->single_thread_flag,get_softmodem_params()->wait_for_sync);
-      init_eNB(get_softmodem_params()->single_thread_flag,get_softmodem_params()->wait_for_sync);
-    }
-    for (int x=0; x < RC.nb_L1_inst; x++) 
-      for (int CC_id=0; CC_id<RC.nb_L1_CC[x]; CC_id++) {
-        L1_rxtx_proc_t *L1proc= &RC.eNB[x][CC_id]->proc.L1_proc;
-        L1_rxtx_proc_t *L1proctx= &RC.eNB[x][CC_id]->proc.L1_proc_tx;
-        L1proc->threadPool = (tpool_t *)malloc(sizeof(tpool_t));
-        L1proc->respDecode=(notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
-        if ( strlen(get_softmodem_params()->threadPoolConfig) > 0 )
-         initTpool(get_softmodem_params()->threadPoolConfig, L1proc->threadPool, true);
-        else
-          initTpool("n", L1proc->threadPool, true);
-        initNotifiedFIFO(L1proc->respDecode);
-        L1proctx->threadPool = L1proc->threadPool;
-    }
+    wait_nfapi_init("main?");
+  }
 
+  LOG_I(ENB_APP,"START MAIN THREADS\n");
+  // start the main threads
+  number_of_cards = 1;
+  printf("RC.nb_L1_inst:%d\n", RC.nb_L1_inst);
 
+  if (RC.nb_L1_inst > 0) {
+    printf("Initializing eNB threads single_thread_flag:%d wait_for_sync:%d\n", get_softmodem_params()->single_thread_flag,get_softmodem_params()->wait_for_sync);
+    init_eNB(get_softmodem_params()->single_thread_flag,get_softmodem_params()->wait_for_sync);
+  }
+  for (int x=0; x < RC.nb_L1_inst; x++)
+    for (int CC_id=0; CC_id<RC.nb_L1_CC[x]; CC_id++) {
+      L1_rxtx_proc_t *L1proc= &RC.eNB[x][CC_id]->proc.L1_proc;
+      L1_rxtx_proc_t *L1proctx= &RC.eNB[x][CC_id]->proc.L1_proc_tx;
+      L1proc->threadPool = (tpool_t *)malloc(sizeof(tpool_t));
+      L1proc->respDecode=(notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+      if ( strlen(get_softmodem_params()->threadPoolConfig) > 0 )
+       initTpool(get_softmodem_params()->threadPoolConfig, L1proc->threadPool, true);
+      else
+        initTpool("n", L1proc->threadPool, true);
+      initNotifiedFIFO(L1proc->respDecode);
+      L1proctx->threadPool = L1proc->threadPool;
   }
 
   printf("wait_eNBs()\n");
@@ -627,7 +632,7 @@ int main ( int argc, char **argv )
   // stop threads
 
   #if 0 //Disable clean up because this tends to crash (and unnecessary)
-  if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) {
+  if (RC.nb_inst == 0) {
     if(IS_SOFTMODEM_DOSCOPE)
       end_forms();
 
diff --git a/executables/main-ocp.c b/executables/main-ocp.c
index 2912ec764816014c8578c520b3967352a5faeb44..b9abbf979055ac520903568777ca63df8e6946f1 100644
--- a/executables/main-ocp.c
+++ b/executables/main-ocp.c
@@ -1027,27 +1027,20 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
 }
 
 void init_pdcp(void) {
-  if (!NODE_IS_DU(RC.rrc[0]->node_type)) {
-    pdcp_layer_init();
-    uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
-                             (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
+  pdcp_layer_init();
+  uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
+                           (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
 
-    if (IS_SOFTMODEM_NOS1)
-      pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT  ;
+  if (IS_SOFTMODEM_NOS1)
+    pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT  ;
 
-    pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
+  pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
 
-    if ( split73!=SPLIT73_DU)
-      pdcp_module_init(pdcp_initmask, 0);
+  if ( split73!=SPLIT73_DU)
+    pdcp_module_init(pdcp_initmask, 0);
 
-    if (NODE_IS_CU(RC.rrc[0]->node_type)) {
-      //pdcp_set_rlc_data_req_func(proto_agent_send_rlc_data_req);
-    } else {
-      pdcp_set_rlc_data_req_func(rlc_data_req);
-      pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
-    }
-  } else {
-    //pdcp_set_pdcp_data_ind_func(proto_agent_send_pdcp_data_ind);
+  pdcp_set_rlc_data_req_func(rlc_data_req);
+  pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
   }
 }
 
@@ -1074,7 +1067,6 @@ int main ( int argc, char **argv ) {
   //mtrace();
   int i;
   int CC_id = 0;
-  int node_type = ngran_eNB;
   sf_ahead=4; // Bell Labs
   AssertFatal(load_configmodule(argc,argv,0), "[SOFTMODEM] Error, configuration module init failed\n");
   logInit();
@@ -1137,8 +1129,7 @@ int main ( int argc, char **argv ) {
   if (RC.nb_inst > 0) {
     /* Start the agent. If it is turned off in the configuration, it won't start */
 
-    /* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks
-     * for monolithic/F1 modes */
+    /* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks */
     init_pdcp();
     AssertFatal(create_tasks(1)==0,"cannot create ITTI tasks\n");
 
@@ -1147,11 +1138,9 @@ int main ( int argc, char **argv ) {
       RRC_CONFIGURATION_REQ(msg_p) = RC.rrc[enb_id]->configuration;
       itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
     }
-
-    node_type = RC.rrc[0]->node_type;
   }
 
-  if (RC.nb_inst > 0 && NODE_IS_CU(node_type)) {
+  if (RC.nb_inst > 0) {
     protocol_ctxt_t ctxt;
     ctxt.module_id = 0 ;
     ctxt.instance = 0;
@@ -1163,7 +1152,7 @@ int main ( int argc, char **argv ) {
   }
 
   /* start threads if only L1 or not a CU */
-  if (RC.nb_inst == 0 || !NODE_IS_CU(node_type) || NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) {
+  if (RC.nb_inst == 0 || NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) {
     // init UE_PF_PO and mutex lock
     pthread_mutex_init(&ue_pf_po_mutex, NULL);
     memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*MAX_MOBILES_PER_ENB*MAX_NUM_CCs);
@@ -1265,7 +1254,7 @@ int main ( int argc, char **argv ) {
   LOG_I(ENB_APP,"oai_exit=%d\n",oai_exit);
   // stop threads
 
-  if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) {
+  if (RC.nb_inst == 0) {
     if(IS_SOFTMODEM_DOSCOPE)
       end_forms();
 
diff --git a/openair2/COMMON/m2ap_messages_types.h b/openair2/COMMON/m2ap_messages_types.h
index 460dbfc4bb1b7d360b1bdfc856209528e2092944..90d1cd386db608e0f9110cf4efd0bc64c932c33a 100644
--- a/openair2/COMMON/m2ap_messages_types.h
+++ b/openair2/COMMON/m2ap_messages_types.h
@@ -269,24 +269,14 @@ typedef struct m2ap_setup_resp_s {
   uint8_t num_mcch_config_per_mbsfn;
 
 
-//  /// string holding gNB_CU_name
-//  char     *gNB_CU_name;
-//  /// number of DU cells to activate
-//  uint16_t num_cells_to_activate; //0< num_cells_to_activate <= 512;
-//  /// mcc of DU cells
-//  //uint16_t mcc[M2AP_MAX_NB_CELLS];
   uint16_t mcc;//[M2AP_MAX_NB_CELLS];
-  /// mnc of DU cells
-  //uint16_t mnc[M2AP_MAX_NB_CELLS];
   uint16_t mnc;//[M2AP_MAX_NB_CELLS];
-  /// mnc digit length of DU cells
-  //uint8_t mnc_digit_length[M2AP_MAX_NB_CELLS];
   uint8_t mnc_digit_length;//[M2AP_MAX_NB_CELLS];
   // NR Global Cell Id
 //  uint64_t nr_cellid[M2AP_MAX_NB_CELLS];
 //  /// NRPCI
 //  uint16_t nrpci[M2AP_MAX_NB_CELLS];
-//  /// num SI messages per DU cell
+//  /// num SI messages
 //  uint8_t num_SI[M2AP_MAX_NB_CELLS];
 //  /// SI message containers (up to 21 messages per cell)
 //  uint8_t *SI_container[M2AP_MAX_NB_CELLS][21];
diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c
index 9a0ed3f04a8394797261849de70b3e722dfc904d..7da3d8ece665d4dfa92d6fd8c1e9e5dc9c9c0b02 100644
--- a/openair2/ENB_APP/enb_app.c
+++ b/openair2/ENB_APP/enb_app.c
@@ -85,7 +85,8 @@ extern RAN_CONTEXT_t RC;
 //}
 //*****end M2AP ****/
 
-static uint32_t eNB_app_register_m2(uint32_t enb_id_start, uint32_t enb_id_end) {
+static uint32_t eNB_app_register_m2(uint32_t enb_id_start, uint32_t enb_id_end)
+{
   uint32_t         enb_id;
   MessageDef      *msg_p;
   uint32_t         register_enb_m2_pending = 0;
@@ -142,38 +143,27 @@ static uint32_t eNB_app_handle_m2ap_mbms_session_update_req(instance_t instance)
 
 /*------------------------------------------------------------------------------*/
 
-static uint32_t eNB_app_register(ngran_node_t node_type,uint32_t enb_id_start, uint32_t enb_id_end) {
+static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)
+{
   uint32_t         enb_id;
   MessageDef      *msg_p;
   uint32_t         register_enb_pending = 0;
 
   for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
-    {
-      if (NODE_IS_DU(node_type)) { // F1AP registration
-        // configure F1AP here for F1C
-        LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n");
-        msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SETUP_REQ);
-        RCconfig_DU_F1(msg_p, enb_id);
-
-        LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
-        itti_send_msg_to_task (TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
-        // configure GTPu here for F1U
-      }
-      else { // S1AP registration
-        /* note:  there is an implicit relationship between the data structure and the message name */
-        msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
-        RCconfig_S1(msg_p, enb_id);
+    // S1AP registration
+    /* note:  there is an implicit relationship between the data structure and the message name */
+    msg_p = itti_alloc_new_message(TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
+    RCconfig_S1(msg_p, enb_id);
 
-        if (enb_id == 0) RCconfig_gtpu();
+    if (enb_id == 0)
+      RCconfig_gtpu();
 
-        LOG_I(ENB_APP,"default drx %d\n",((S1AP_REGISTER_ENB_REQ(msg_p)).default_drx));
+    LOG_I(ENB_APP, "default drx %d\n", ((S1AP_REGISTER_ENB_REQ(msg_p)).default_drx));
 
-        LOG_I(ENB_APP,"[eNB %d] eNB_app_register via S1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
-        itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
-      }
+    LOG_I(ENB_APP, "[eNB %d] eNB_app_register via S1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
+    itti_send_msg_to_task(TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
 
-      register_enb_pending++;
-    }
+    register_enb_pending++;
   }
 
   return register_enb_pending;
@@ -220,19 +210,18 @@ void *eNB_app_task(void *args_p) {
   itti_mark_task_ready (TASK_ENB_APP);
 
   /* Try to register each eNB */
-  // This assumes that node_type of all RRC instances is the same
   if (EPC_MODE_ENABLED) {
-    register_enb_pending = eNB_app_register(RC.rrc[0]->node_type, enb_id_start, enb_id_end);
+    register_enb_pending = eNB_app_register(enb_id_start, enb_id_end);
   }
 
     /* Try to register each eNB with each other */
-  if (is_x2ap_enabled() && !NODE_IS_DU(RC.rrc[0]->node_type)) {
+  if (is_x2ap_enabled()) {
     x2_register_enb_pending = eNB_app_register_x2 (enb_id_start, enb_id_end);
   }
 
   /* Try to register each eNB with MCE each other */
-  if (is_m2ap_eNB_enabled() /*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/) {
-    //eNB_app_register_MBMS_STA(RC.rrc[0]->node_type, enb_id_start, enb_id_end);
+  if (is_m2ap_eNB_enabled()) {
+    //eNB_app_register_MBMS_STA(enb_id_start, enb_id_end);
     m2_register_enb_pending = eNB_app_register_m2 (enb_id_start, enb_id_end);
 
     //if (timer_setup (5, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
@@ -259,7 +248,6 @@ void *eNB_app_task(void *args_p) {
       break;
 
     case S1AP_REGISTER_ENB_CNF:
-      AssertFatal(!NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received S1AP_REGISTER_ENB_CNF\n");
         if (EPC_MODE_ENABLED) {
           LOG_I(ENB_APP, "[eNB %ld] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
                 S1AP_REGISTER_ENB_CNF(msg_p).nb_mme);
@@ -288,7 +276,7 @@ void *eNB_app_task(void *args_p) {
                 sleep(ENB_REGISTER_RETRY_DELAY);
                 /* Restart the registration process */
                 registered_enb = 0;
-                register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);
+                register_enb_pending = eNB_app_register(enb_id_start, enb_id_end);
               }
             }
           }
@@ -296,50 +284,6 @@ void *eNB_app_task(void *args_p) {
 
       break;
 
-    case F1AP_SETUP_RESP:
-      AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/eNB\n");
-
-      LOG_I(ENB_APP, "Received %s: associated ngran_eNB_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
-	    F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
-      
-      handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
-
-      DevAssert(register_enb_pending > 0);
-      register_enb_pending--;
-
-      /* Check if at least eNB is registered with one MME */
-      if (F1AP_SETUP_RESP(msg_p).num_cells_to_activate > 0) {
-        registered_enb++;
-      }
-
-      /* Check if all register eNB requests have been processed */
-      if (register_enb_pending == 0) {
-        if (registered_enb == enb_nb) {
-          /* If all eNB cells are registered, start L2L1 task */
-          MessageDef *msg_init_p;
-
-          msg_init_p = itti_alloc_new_message (TASK_ENB_APP, 0, INITIALIZE_MESSAGE);
-          itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p);
-
-        } else {
-          LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n",
-                enb_nb - registered_enb,  ENB_REGISTER_RETRY_DELAY);
-
-          /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
-          if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
-                           NULL, &enb_register_retry_timer_id) < 0) {
-            LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n");
-
-            sleep(ENB_REGISTER_RETRY_DELAY);
-            /* Restart the registration process */
-            registered_enb = 0;
-            register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p);
-          }
-        }
-      }
-
-      break;
-
     case S1AP_DEREGISTERED_ENB_IND:
       if (EPC_MODE_ENABLED) {
   	LOG_W(ENB_APP, "[eNB %ld] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
@@ -356,7 +300,7 @@ void *eNB_app_task(void *args_p) {
       if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
         /* Restart the registration process */
         registered_enb = 0;
-        register_enb_pending = eNB_app_register (RC.rrc[0]->node_type, enb_id_start, enb_id_end);
+        register_enb_pending = eNB_app_register(enb_id_start, enb_id_end);
       }
 
       if (TIMER_HAS_EXPIRED (msg_p).timer_id == x2_enb_register_retry_timer_id) {
@@ -459,20 +403,6 @@ void *eNB_app_task(void *args_p) {
 
     case M2AP_SETUP_RESP:
      LOG_I(ENB_APP,"M2AP_SETUP_RESP RESPONSE received\n");
-     // AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/eNB\n");
-
-     // LOG_I(ENB_APP, "Received %s: associated ngran_eNB_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
-     //       F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
-     //
-     // handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
-
-     // DevAssert(register_enb_pending > 0);
-     // register_enb_pending--;
-
-     // /* Check if at least eNB is registered with one MME */
-     // if (F1AP_SETUP_RESP(msg_p).num_cells_to_activate > 0) {
-     //   registered_enb++;
-     // }
 
      // /* Check if all register eNB requests have been processed */
      // if (register_enb_pending == 0) {
@@ -495,7 +425,7 @@ void *eNB_app_task(void *args_p) {
      //       sleep(ENB_REGISTER_RETRY_DELAY);
      //       /* Restart the registration process */
      //       registered_enb = 0;
-     //       register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p);
+     //       register_enb_pending = eNB_app_register(enb_id_start, enb_id_end);//, enb_properties_p);
      //     }
      //   }
      // }
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index c37581d04ad42dc03424e39d5d93092f95ca7efc..2cdc24152b880711e2b72c2c70cf5c1783a46872 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -165,7 +165,8 @@ void RCconfig_L1(void) {
   }
 }
 
-void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
+void RCconfig_macrlc(void)
+{
   int               j;
   paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
   paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
@@ -198,17 +199,6 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
       if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
         // check number of instances is same as RRC/PDCP
         LOG_I(ENB_APP,"Configuring local RRC for MACRLC\n");
-      } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) {
-        LOG_I(ENB_APP,"Configuring F1 interfaces for MACRLC\n");
-        RC.mac[j]->eth_params_n.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr));
-        RC.mac[j]->eth_params_n.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr));
-        RC.mac[j]->eth_params_n.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr));
-        RC.mac[j]->eth_params_n.my_portc                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTC_IDX].iptr);
-        RC.mac[j]->eth_params_n.remote_portc             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTC_IDX].iptr);
-        RC.mac[j]->eth_params_n.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTD_IDX].iptr);
-        RC.mac[j]->eth_params_n.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);;
-        RC.mac[j]->eth_params_n.transp_preference        = ETH_UDP_MODE;
-        macrlc_has_f1[j]                                 = 1;
       } else { // other midhaul
         AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr));
       }
@@ -258,7 +248,7 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
   }*/
 }
 
-int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
+int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) {
   int               num_enbs                      = 0;
   int               j,k                           = 0;
   int32_t           enb_id                        = 0;
@@ -320,38 +310,6 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
 
     LOG_I(RRC,"Instance %d: Southbound Transport %s\n",i,*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr));
 
-    if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) {
-      paramdef_t SCTPParams[]  = SCTPPARAMS_DESC;
-      char aprefix[MAX_OPTNAME_SIZE*2 + 8];
-      sprintf(aprefix,"%s.[%u].%s",ENB_CONFIG_STRING_ENB_LIST,i,ENB_CONFIG_STRING_SCTP_CONFIG);
-      config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
-      rrc->node_id        = *(ENBParamList.paramarray[0][ENB_ENB_ID_IDX].uptr);
-      LOG_I(ENB_APP,"F1AP: gNB_CU_id[%d] %d\n",k,rrc->node_id);
-      rrc->node_name = strdup(*(ENBParamList.paramarray[0][ENB_ENB_NAME_IDX].strptr));
-      LOG_I(ENB_APP,"F1AP: gNB_CU_name[%d] %s\n",k,rrc->node_name);
-      rrc->eth_params_s.local_if_name            = strdup(*(ENBParamList.paramarray[i][ENB_LOCAL_S_IF_NAME_IDX].strptr));
-      rrc->eth_params_s.my_addr                  = strdup(*(ENBParamList.paramarray[i][ENB_LOCAL_S_ADDRESS_IDX].strptr));
-      rrc->eth_params_s.remote_addr              = strdup(*(ENBParamList.paramarray[i][ENB_REMOTE_S_ADDRESS_IDX].strptr));
-      rrc->eth_params_s.my_portc                 = *(ENBParamList.paramarray[i][ENB_LOCAL_S_PORTC_IDX].uptr);
-      rrc->eth_params_s.remote_portc             = *(ENBParamList.paramarray[i][ENB_REMOTE_S_PORTC_IDX].uptr);
-      rrc->eth_params_s.my_portd                 = *(ENBParamList.paramarray[i][ENB_LOCAL_S_PORTD_IDX].uptr);
-      rrc->eth_params_s.remote_portd             = *(ENBParamList.paramarray[i][ENB_REMOTE_S_PORTD_IDX].uptr);
-      rrc->eth_params_s.transp_preference        = ETH_UDP_MODE;
-      rrc->node_type                             = ngran_eNB_CU;
-      rrc->sctp_in_streams                       = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
-      rrc->sctp_out_streams                      = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
-    } else {
-      // set to ngran_eNB for now, it will get set to ngran_eNB_DU if macrlc entity which uses F1 is present
-      // Note: we will have to handle the case of ngran_ng_eNB_DU
-      if (macrlc_has_f1 == 0) {
-        rrc->node_type = ngran_eNB;
-        LOG_I(RRC,"Setting node_type to ngran_eNB\n");
-      } else {
-        rrc->node_type = ngran_eNB_DU;
-        LOG_I(RRC,"Setting node_type to ngran_eNB_DU\n");
-      }
-    }
-
     rrc->nr_cellid        = (uint64_t)*(ENBParamList.paramarray[i][ENB_NRCELLID_IDX].u64ptr);
 
     // search if in active list
@@ -433,7 +391,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
             config_get( CCsParams,sizeof(CCsParams)/sizeof(paramdef_t),ccspath);
             //printf("Component carrier %d\n",component_carrier);
             nb_cc++;
-            // Cell params, MIB/SIB1 in DU
+            // Cell params, MIB/SIB1
             RRCcfg->tdd_config[j] = ccparams_lte.tdd_config;
             AssertFatal (ccparams_lte.tdd_config <= LTE_TDD_Config__subframeAssignment_sa6,
                          "Failed to parse eNB configuration file %s, enb %u illegal tdd_config %d (should be 0-%d)!",
@@ -516,1492 +474,1345 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
 
             RRCcfg->nb_antenna_ports[j] = ccparams_lte.nb_antenna_ports;
 
-            if (!NODE_IS_DU(rrc->node_type)) { //this is CU or eNB, SIB2-20 in CU
-              // Radio Resource Configuration (SIB2)
-              RRCcfg->radioresourceconfig[j].prach_root = ccparams_lte.prach_root;
-
-              if ((ccparams_lte.prach_root <0) || (ccparams_lte.prach_root > 1023))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_root choice: 0..1023 !\n",
-                             RC.config_file_name, i, ccparams_lte.prach_root);
+            // Radio Resource Configuration (SIB2)
+            RRCcfg->radioresourceconfig[j].prach_root = ccparams_lte.prach_root;
 
-              RRCcfg->radioresourceconfig[j].prach_config_index = ccparams_lte.prach_config_index;
-
-              if ((ccparams_lte.prach_config_index <0) || (ccparams_lte.prach_config_index > 63))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_config_index choice: 0..1023 !\n",
-                             RC.config_file_name, i, ccparams_lte.prach_config_index);
-
-              if (!ccparams_lte.prach_high_speed)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED);
-              else if (strcmp(ccparams_lte.prach_high_speed, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].prach_high_speed = true;
-              } else if (strcmp(ccparams_lte.prach_high_speed, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].prach_high_speed = false;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n",
-                             RC.config_file_name, i, ccparams_lte.prach_high_speed);
-
-              RRCcfg->radioresourceconfig[j].prach_zero_correlation = ccparams_lte.prach_zero_correlation;
-
-              if ((ccparams_lte.prach_zero_correlation <0) ||
-                  (ccparams_lte.prach_zero_correlation > 15))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n",
-                             RC.config_file_name, i, ccparams_lte.prach_zero_correlation);
+            if ((ccparams_lte.prach_root <0) || (ccparams_lte.prach_root > 1023))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_root choice: 0..1023 !\n",
+                           RC.config_file_name, i, ccparams_lte.prach_root);
 
-              RRCcfg->radioresourceconfig[j].prach_freq_offset = ccparams_lte.prach_freq_offset;
+            RRCcfg->radioresourceconfig[j].prach_config_index = ccparams_lte.prach_config_index;
 
-              if ((ccparams_lte.prach_freq_offset <0) ||
-                  (ccparams_lte.prach_freq_offset > 94))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_freq_offset choice: 0..94!\n",
-                             RC.config_file_name, i, ccparams_lte.prach_freq_offset);
+            if ((ccparams_lte.prach_config_index <0) || (ccparams_lte.prach_config_index > 63))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_config_index choice: 0..1023 !\n",
+                           RC.config_file_name, i, ccparams_lte.prach_config_index);
 
-              RRCcfg->radioresourceconfig[j].pucch_delta_shift = ccparams_lte.pucch_delta_shift - 1;
+            if (!ccparams_lte.prach_high_speed)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED);
+            else if (strcmp(ccparams_lte.prach_high_speed, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].prach_high_speed = true;
+            } else if (strcmp(ccparams_lte.prach_high_speed, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].prach_high_speed = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n",
+                           RC.config_file_name, i, ccparams_lte.prach_high_speed);
 
-              if ((ccparams_lte.pucch_delta_shift <1) ||
-                  (ccparams_lte.pucch_delta_shift > 3))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_delta_shift);
+            RRCcfg->radioresourceconfig[j].prach_zero_correlation = ccparams_lte.prach_zero_correlation;
 
-              RRCcfg->radioresourceconfig[j].pucch_nRB_CQI = ccparams_lte.pucch_nRB_CQI;
+            if ((ccparams_lte.prach_zero_correlation <0) ||
+                (ccparams_lte.prach_zero_correlation > 15))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n",
+                           RC.config_file_name, i, ccparams_lte.prach_zero_correlation);
 
-              if ((ccparams_lte.pucch_nRB_CQI <0) ||
-                  (ccparams_lte.pucch_nRB_CQI > 98))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_nRB_CQI);
+            RRCcfg->radioresourceconfig[j].prach_freq_offset = ccparams_lte.prach_freq_offset;
 
-              RRCcfg->radioresourceconfig[j].pucch_nCS_AN = ccparams_lte.pucch_nCS_AN;
+            if ((ccparams_lte.prach_freq_offset <0) ||
+                (ccparams_lte.prach_freq_offset > 94))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_freq_offset choice: 0..94!\n",
+                           RC.config_file_name, i, ccparams_lte.prach_freq_offset);
 
-              if ((ccparams_lte.pucch_nCS_AN <0) ||
-                  (ccparams_lte.pucch_nCS_AN > 7))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_nCS_AN);
+            RRCcfg->radioresourceconfig[j].pucch_delta_shift = ccparams_lte.pucch_delta_shift - 1;
 
-              RRCcfg->radioresourceconfig[j].pucch_n1_AN = ccparams_lte.pucch_n1_AN;
+            if ((ccparams_lte.pucch_delta_shift <1) ||
+                (ccparams_lte.pucch_delta_shift > 3))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_delta_shift);
 
-              if ((ccparams_lte.pucch_n1_AN <0) ||
-                  (ccparams_lte.pucch_n1_AN > 2047))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_n1_AN choice: 0..2047!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_n1_AN);
+            RRCcfg->radioresourceconfig[j].pucch_nRB_CQI = ccparams_lte.pucch_nRB_CQI;
 
-              RRCcfg->radioresourceconfig[j].pdsch_referenceSignalPower = ccparams_lte.pdsch_referenceSignalPower;
+            if ((ccparams_lte.pucch_nRB_CQI <0) ||
+                (ccparams_lte.pucch_nRB_CQI > 98))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_nRB_CQI);
 
-              if ((ccparams_lte.pdsch_referenceSignalPower <-60) ||
-                  (ccparams_lte.pdsch_referenceSignalPower > 50))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n",
-                             RC.config_file_name, i, ccparams_lte.pdsch_referenceSignalPower);
+            RRCcfg->radioresourceconfig[j].pucch_nCS_AN = ccparams_lte.pucch_nCS_AN;
 
-              RRCcfg->radioresourceconfig[j].pdsch_p_b = ccparams_lte.pdsch_p_b;
+            if ((ccparams_lte.pucch_nCS_AN <0) ||
+                (ccparams_lte.pucch_nCS_AN > 7))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_nCS_AN);
 
-              if ((ccparams_lte.pdsch_p_b <0) ||
-                  (ccparams_lte.pdsch_p_b > 3))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_p_b choice: 0..3!\n",
-                             RC.config_file_name, i, ccparams_lte.pdsch_p_b);
+            RRCcfg->radioresourceconfig[j].pucch_n1_AN = ccparams_lte.pucch_n1_AN;
 
-              RRCcfg->radioresourceconfig[j].pusch_n_SB = ccparams_lte.pusch_n_SB;
+            if ((ccparams_lte.pucch_n1_AN <0) ||
+                (ccparams_lte.pucch_n1_AN > 2047))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_n1_AN choice: 0..2047!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_n1_AN);
 
-              if ((ccparams_lte.pusch_n_SB <1) ||
-                  (ccparams_lte.pusch_n_SB > 4))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_n_SB choice: 1..4!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_n_SB);
+            RRCcfg->radioresourceconfig[j].pdsch_referenceSignalPower = ccparams_lte.pdsch_referenceSignalPower;
 
-              if (!ccparams_lte.pusch_hoppingMode)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: interSubframe,intraAndInterSubframe!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_HOPPINGMODE);
-              else if (strcmp(ccparams_lte.pusch_hoppingMode,"interSubFrame")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame;
-              } else if (strcmp(ccparams_lte.pusch_hoppingMode,"intraAndInterSubFrame")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_hoppingMode);
+            if ((ccparams_lte.pdsch_referenceSignalPower <-60) ||
+                (ccparams_lte.pdsch_referenceSignalPower > 50))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n",
+                           RC.config_file_name, i, ccparams_lte.pdsch_referenceSignalPower);
 
-              RRCcfg->radioresourceconfig[j].pusch_hoppingOffset = ccparams_lte.pusch_hoppingOffset;
+            RRCcfg->radioresourceconfig[j].pdsch_p_b = ccparams_lte.pdsch_p_b;
 
-              if ((ccparams_lte.pusch_hoppingOffset<0) ||
-                  (ccparams_lte.pusch_hoppingOffset>98))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_hoppingOffset choice: 0..98!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_hoppingMode);
+            if ((ccparams_lte.pdsch_p_b <0) ||
+                (ccparams_lte.pdsch_p_b > 3))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_p_b choice: 0..3!\n",
+                           RC.config_file_name, i, ccparams_lte.pdsch_p_b);
 
-              if (!ccparams_lte.pusch_enable64QAM)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_ENABLE64QAM);
-              else if (strcmp(ccparams_lte.pusch_enable64QAM, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_enable64QAM = true;
-              } else if (strcmp(ccparams_lte.pusch_enable64QAM, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_enable64QAM = false;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_enable64QAM);
+            RRCcfg->radioresourceconfig[j].pusch_n_SB = ccparams_lte.pusch_n_SB;
 
-              if (!ccparams_lte.pusch_groupHoppingEnabled)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN);
-              else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = true;
-              } else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = false;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_groupHoppingEnabled);
+            if ((ccparams_lte.pusch_n_SB <1) ||
+                (ccparams_lte.pusch_n_SB > 4))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_n_SB choice: 1..4!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_n_SB);
 
-              RRCcfg->radioresourceconfig[j].pusch_groupAssignment = ccparams_lte.pusch_groupAssignment;
+            if (!ccparams_lte.pusch_hoppingMode)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: interSubframe,intraAndInterSubframe!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_HOPPINGMODE);
+            else if (strcmp(ccparams_lte.pusch_hoppingMode,"interSubFrame")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame;
+            } else if (strcmp(ccparams_lte.pusch_hoppingMode,"intraAndInterSubFrame")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_hoppingMode);
 
-              if ((ccparams_lte.pusch_groupAssignment<0)||
-                  (ccparams_lte.pusch_groupAssignment>29))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_groupAssignment choice: 0..29!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_groupAssignment);
+            RRCcfg->radioresourceconfig[j].pusch_hoppingOffset = ccparams_lte.pusch_hoppingOffset;
 
-              if (!ccparams_lte.pusch_sequenceHoppingEnabled)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN);
-              else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = true;
-              } else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = false;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_sequenceHoppingEnabled);
+            if ((ccparams_lte.pusch_hoppingOffset<0) ||
+                (ccparams_lte.pusch_hoppingOffset>98))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_hoppingOffset choice: 0..98!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_hoppingMode);
 
-              RRCcfg->radioresourceconfig[j].pusch_nDMRS1 = ccparams_lte.pusch_nDMRS1; // cyclic_shift in RRC!
+            if (!ccparams_lte.pusch_enable64QAM)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_ENABLE64QAM);
+            else if (strcmp(ccparams_lte.pusch_enable64QAM, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_enable64QAM = true;
+            } else if (strcmp(ccparams_lte.pusch_enable64QAM, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_enable64QAM = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_enable64QAM);
 
-              if ((ccparams_lte.pusch_nDMRS1 <0) ||
-                  (ccparams_lte.pusch_nDMRS1>7))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_nDMRS1 choice: 0..7!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_nDMRS1);
+            if (!ccparams_lte.pusch_groupHoppingEnabled)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN);
+            else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = true;
+            } else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_groupHoppingEnabled);
 
-              if (strcmp(ccparams_lte.phich_duration,"NORMAL")==0) {
-                RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_normal;
-              } else if (strcmp(ccparams_lte.phich_duration,"EXTENDED")==0) {
-                RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_extended;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n",
-                             RC.config_file_name, i, ccparams_lte.phich_duration);
-
-              if (strcmp(ccparams_lte.phich_resource,"ONESIXTH")==0) {
-                RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_oneSixth;
-              } else if (strcmp(ccparams_lte.phich_resource,"HALF")==0) {
-                RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_half;
-              } else if (strcmp(ccparams_lte.phich_resource,"ONE")==0) {
-                RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_one;
-              } else if (strcmp(ccparams_lte.phich_resource,"TWO")==0) {
-                RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_two;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_resource choice: ONESIXTH,HALF,ONE,TWO!\n",
-                             RC.config_file_name, i, ccparams_lte.phich_resource);
-
-              printf("phich.resource %ld (%s), phich.duration %ld (%s)\n",
-                     RRCcfg->radioresourceconfig[j].phich_resource,
-                     ccparams_lte.phich_resource,
-                     RRCcfg->radioresourceconfig[j].phich_duration,
-                     ccparams_lte.phich_duration);
-
-              if (strcmp(ccparams_lte.srs_enable, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].srs_enable = true;
-              } else if (strcmp(ccparams_lte.srs_enable, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].srs_enable = false;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n",
-                             RC.config_file_name, i, ccparams_lte.srs_enable);
+            RRCcfg->radioresourceconfig[j].pusch_groupAssignment = ccparams_lte.pusch_groupAssignment;
 
-              if (RRCcfg->radioresourceconfig[j].srs_enable == true) {
-                RRCcfg->radioresourceconfig[j].srs_BandwidthConfig = ccparams_lte.srs_BandwidthConfig;
+            if ((ccparams_lte.pusch_groupAssignment<0)||
+                (ccparams_lte.pusch_groupAssignment>29))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_groupAssignment choice: 0..29!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_groupAssignment);
 
-                if ((ccparams_lte.srs_BandwidthConfig < 0) ||
-                    (ccparams_lte.srs_BandwidthConfig >7))
-                  AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value %d for srs_BandwidthConfig choice: 0...7\n",
-                               RC.config_file_name, i, ccparams_lte.srs_BandwidthConfig);
+            if (!ccparams_lte.pusch_sequenceHoppingEnabled)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN);
+            else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = true;
+            } else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_sequenceHoppingEnabled);
 
-                RRCcfg->radioresourceconfig[j].srs_SubframeConfig = ccparams_lte.srs_SubframeConfig;
+            RRCcfg->radioresourceconfig[j].pusch_nDMRS1 = ccparams_lte.pusch_nDMRS1; // cyclic_shift in RRC!
 
-                if ((ccparams_lte.srs_SubframeConfig<0) ||
-                    (ccparams_lte.srs_SubframeConfig>15))
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for srs_SubframeConfig choice: 0..15 !\n",
-                               RC.config_file_name, i, ccparams_lte.srs_SubframeConfig);
-
-                if (strcmp(ccparams_lte.srs_ackNackST, "ENABLE") == 0) {
-                  RRCcfg->radioresourceconfig[j].srs_ackNackST = true;
-                } else if (strcmp(ccparams_lte.srs_ackNackST, "DISABLE") == 0) {
-                  RRCcfg->radioresourceconfig[j].srs_ackNackST = false;
-                } else
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n",
-                               RC.config_file_name, i, ccparams_lte.srs_ackNackST);
-
-                if (strcmp(ccparams_lte.srs_MaxUpPts, "ENABLE") == 0) {
-                  RRCcfg->radioresourceconfig[j].srs_MaxUpPts = true;
-                } else if (strcmp(ccparams_lte.srs_MaxUpPts, "DISABLE") == 0) {
-                  RRCcfg->radioresourceconfig[j].srs_MaxUpPts = false;
-                } else
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n",
-                               RC.config_file_name, i, ccparams_lte.srs_MaxUpPts);
-              }
+            if ((ccparams_lte.pusch_nDMRS1 <0) ||
+                (ccparams_lte.pusch_nDMRS1>7))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_nDMRS1 choice: 0..7!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_nDMRS1);
+
+            if (strcmp(ccparams_lte.phich_duration,"NORMAL")==0) {
+              RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_normal;
+            } else if (strcmp(ccparams_lte.phich_duration,"EXTENDED")==0) {
+              RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_extended;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n",
+                           RC.config_file_name, i, ccparams_lte.phich_duration);
+
+            if (strcmp(ccparams_lte.phich_resource,"ONESIXTH")==0) {
+              RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_oneSixth;
+            } else if (strcmp(ccparams_lte.phich_resource,"HALF")==0) {
+              RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_half;
+            } else if (strcmp(ccparams_lte.phich_resource,"ONE")==0) {
+              RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_one;
+            } else if (strcmp(ccparams_lte.phich_resource,"TWO")==0) {
+              RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_two;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_resource choice: ONESIXTH,HALF,ONE,TWO!\n",
+                           RC.config_file_name, i, ccparams_lte.phich_resource);
+
+            printf("phich.resource %ld (%s), phich.duration %ld (%s)\n",
+                   RRCcfg->radioresourceconfig[j].phich_resource,
+                   ccparams_lte.phich_resource,
+                   RRCcfg->radioresourceconfig[j].phich_duration,
+                   ccparams_lte.phich_duration);
+
+            if (strcmp(ccparams_lte.srs_enable, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].srs_enable = true;
+            } else if (strcmp(ccparams_lte.srs_enable, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].srs_enable = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n",
+                           RC.config_file_name, i, ccparams_lte.srs_enable);
 
-              RRCcfg->radioresourceconfig[j].pusch_p0_Nominal = ccparams_lte.pusch_p0_Nominal;
+            if (RRCcfg->radioresourceconfig[j].srs_enable == true) {
+              RRCcfg->radioresourceconfig[j].srs_BandwidthConfig = ccparams_lte.srs_BandwidthConfig;
 
-              if ((ccparams_lte.pusch_p0_Nominal<-126) ||
-                  (ccparams_lte.pusch_p0_Nominal>24))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_p0_Nominal choice: -126..24 !\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_p0_Nominal);
-
-              if (strcmp(ccparams_lte.pusch_alpha,"AL0")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al0;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL04")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al04;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL05")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al05;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL06")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al06;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL07")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al07;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL08")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al08;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL09")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al09;
-              } else if (strcmp(ccparams_lte.pusch_alpha,"AL1")==0) {
-                RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al1;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!\n",
-                             RC.config_file_name, i, ccparams_lte.pusch_alpha);
+              if ((ccparams_lte.srs_BandwidthConfig < 0) ||
+                  (ccparams_lte.srs_BandwidthConfig >7))
+                AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value %d for srs_BandwidthConfig choice: 0...7\n",
+                             RC.config_file_name, i, ccparams_lte.srs_BandwidthConfig);
 
-              RRCcfg->radioresourceconfig[j].pucch_p0_Nominal = ccparams_lte.pucch_p0_Nominal;
+              RRCcfg->radioresourceconfig[j].srs_SubframeConfig = ccparams_lte.srs_SubframeConfig;
 
-              if ((ccparams_lte.pucch_p0_Nominal<-127) ||
-                  (ccparams_lte.pucch_p0_Nominal>-96))
+              if ((ccparams_lte.srs_SubframeConfig<0) ||
+                  (ccparams_lte.srs_SubframeConfig>15))
                 AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_p0_Nominal choice: -127..-96 !\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_p0_Nominal);
-
-              RRCcfg->radioresourceconfig[j].msg3_delta_Preamble = ccparams_lte.msg3_delta_Preamble;
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for srs_SubframeConfig choice: 0..15 !\n",
+                             RC.config_file_name, i, ccparams_lte.srs_SubframeConfig);
 
-              if ((ccparams_lte.msg3_delta_Preamble<-1) ||
-                  (ccparams_lte.msg3_delta_Preamble>6))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for msg3_delta_Preamble choice: -1..6 !\n",
-                             RC.config_file_name, i, ccparams_lte.msg3_delta_Preamble);
-
-              if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF_2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF0")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2;
+              if (strcmp(ccparams_lte.srs_ackNackST, "ENABLE") == 0) {
+                RRCcfg->radioresourceconfig[j].srs_ackNackST = true;
+              } else if (strcmp(ccparams_lte.srs_ackNackST, "DISABLE") == 0) {
+                RRCcfg->radioresourceconfig[j].srs_ackNackST = false;
               } else
                 AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1);
-
-              if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF1")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF3")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF5")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1b);
-
-              if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF_2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF0")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF1")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2);
-
-              if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF_2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF0")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2a);
-
-              if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF_2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF0")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0;
-              } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF2")==0) {
-                RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2;
-              } else
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n",
-                             RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2b);
-
-              RRCcfg->radioresourceconfig[j].rach_numberOfRA_Preambles = (ccparams_lte.rach_numberOfRA_Preambles / 4) - 1;
-
-              if ((ccparams_lte.rach_numberOfRA_Preambles <4) ||
-                  (ccparams_lte.rach_numberOfRA_Preambles>64) ||
-                  ((ccparams_lte.rach_numberOfRA_Preambles&3)!=0))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_numberOfRA_Preambles choice: 4,8,12,...,64!\n",
-                             RC.config_file_name, i, ccparams_lte.rach_numberOfRA_Preambles);
-
-              if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = true;
-                RRCcfg->radioresourceconfig[j].rach_sizeOfRA_PreamblesGroupA = (ccparams_lte.rach_sizeOfRA_PreamblesGroupA / 4) - 1;
-
-                if ((ccparams_lte.rach_numberOfRA_Preambles <4) ||
-                    (ccparams_lte.rach_numberOfRA_Preambles>60) ||
-                    ((ccparams_lte.rach_numberOfRA_Preambles&3)!=0))
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_sizeOfRA_PreamblesGroupA choice: 4,8,12,...,60!\n",
-                               RC.config_file_name, i, ccparams_lte.rach_sizeOfRA_PreamblesGroupA);
-
-                switch (ccparams_lte.rach_messageSizeGroupA) {
-                  case 56:
-                    RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56;
-                    break;
-
-                  case 144:
-                    RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144;
-                    break;
-
-                  case 208:
-                    RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208;
-                    break;
-
-                  case 256:
-                    RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256;
-                    break;
-
-                  default:
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_messageSizeGroupA choice: 56,144,208,256!\n",
-                                 RC.config_file_name, i, ccparams_lte.rach_messageSizeGroupA);
-                    break;
-                }
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n",
+                             RC.config_file_name, i, ccparams_lte.srs_ackNackST);
 
-                if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"minusinfinity")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB0")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB5")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB8")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB10")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB12")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB15")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15;
-                } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB18")==0) {
-                  RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18;
-                } else
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n",
-                               RC.config_file_name, i, ccparams_lte.rach_messagePowerOffsetGroupB);
-              } else if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = false;
+              if (strcmp(ccparams_lte.srs_MaxUpPts, "ENABLE") == 0) {
+                RRCcfg->radioresourceconfig[j].srs_MaxUpPts = true;
+              } else if (strcmp(ccparams_lte.srs_MaxUpPts, "DISABLE") == 0) {
+                RRCcfg->radioresourceconfig[j].srs_MaxUpPts = false;
               } else
                 AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !\n",
-                             RC.config_file_name, i, ccparams_lte.rach_preamblesGroupAConfig);
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n",
+                             RC.config_file_name, i, ccparams_lte.srs_MaxUpPts);
+            }
 
-              RRCcfg->radioresourceconfig[j].rach_preambleInitialReceivedTargetPower = (ccparams_lte.rach_preambleInitialReceivedTargetPower + 120) / 2;
+            RRCcfg->radioresourceconfig[j].pusch_p0_Nominal = ccparams_lte.pusch_p0_Nominal;
 
-              if ((ccparams_lte.rach_preambleInitialReceivedTargetPower<-120) ||
-                  (ccparams_lte.rach_preambleInitialReceivedTargetPower>-90) ||
-                  ((ccparams_lte.rach_preambleInitialReceivedTargetPower&1)!=0))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !\n",
-                             RC.config_file_name, i, ccparams_lte.rach_preambleInitialReceivedTargetPower);
+            if ((ccparams_lte.pusch_p0_Nominal<-126) ||
+                (ccparams_lte.pusch_p0_Nominal>24))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pusch_p0_Nominal choice: -126..24 !\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_p0_Nominal);
+
+            if (strcmp(ccparams_lte.pusch_alpha,"AL0")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al0;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL04")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al04;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL05")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al05;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL06")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al06;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL07")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al07;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL08")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al08;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL09")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al09;
+            } else if (strcmp(ccparams_lte.pusch_alpha,"AL1")==0) {
+              RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al1;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!\n",
+                           RC.config_file_name, i, ccparams_lte.pusch_alpha);
 
-              RRCcfg->radioresourceconfig[j].rach_powerRampingStep = ccparams_lte.rach_powerRampingStep / 2;
+            RRCcfg->radioresourceconfig[j].pucch_p0_Nominal = ccparams_lte.pucch_p0_Nominal;
 
-              if ((ccparams_lte.rach_powerRampingStep<0) ||
-                  (ccparams_lte.rach_powerRampingStep>6) ||
-                  ((ccparams_lte.rach_powerRampingStep&1)!=0))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_powerRampingStep choice: 0,2,4,6 !\n",
-                             RC.config_file_name, i, ccparams_lte.rach_powerRampingStep);
-
-              switch (ccparams_lte.rach_preambleTransMax) {
-                case 3:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n3;
-                  break;
+            if ((ccparams_lte.pucch_p0_Nominal<-127) ||
+                (ccparams_lte.pucch_p0_Nominal>-96))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_p0_Nominal choice: -127..-96 !\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_p0_Nominal);
 
-                case 4:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n4;
-                  break;
+            RRCcfg->radioresourceconfig[j].msg3_delta_Preamble = ccparams_lte.msg3_delta_Preamble;
 
-                case 5:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n5;
-                  break;
+            if ((ccparams_lte.msg3_delta_Preamble<-1) ||
+                (ccparams_lte.msg3_delta_Preamble>6))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for msg3_delta_Preamble choice: -1..6 !\n",
+                           RC.config_file_name, i, ccparams_lte.msg3_delta_Preamble);
+
+            if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF_2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF0")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1);
+
+            if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF1")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF3")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF5")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1b);
+
+            if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF_2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF0")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF1")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2);
+
+            if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF_2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF0")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2a);
+
+            if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF_2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF0")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0;
+            } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF2")==0) {
+              RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n",
+                           RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2b);
 
-                case 6:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n6;
-                  break;
+            RRCcfg->radioresourceconfig[j].rach_numberOfRA_Preambles = (ccparams_lte.rach_numberOfRA_Preambles / 4) - 1;
 
-                case 7:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n7;
-                  break;
+            if ((ccparams_lte.rach_numberOfRA_Preambles <4) ||
+                (ccparams_lte.rach_numberOfRA_Preambles>64) ||
+                ((ccparams_lte.rach_numberOfRA_Preambles&3)!=0))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_numberOfRA_Preambles choice: 4,8,12,...,64!\n",
+                           RC.config_file_name, i, ccparams_lte.rach_numberOfRA_Preambles);
 
-                case 8:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n8;
-                  break;
+            if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = true;
+              RRCcfg->radioresourceconfig[j].rach_sizeOfRA_PreamblesGroupA = (ccparams_lte.rach_sizeOfRA_PreamblesGroupA / 4) - 1;
 
-                case 10:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n10;
-                  break;
+              if ((ccparams_lte.rach_numberOfRA_Preambles <4) ||
+                  (ccparams_lte.rach_numberOfRA_Preambles>60) ||
+                  ((ccparams_lte.rach_numberOfRA_Preambles&3)!=0))
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_sizeOfRA_PreamblesGroupA choice: 4,8,12,...,60!\n",
+                             RC.config_file_name, i, ccparams_lte.rach_sizeOfRA_PreamblesGroupA);
 
-                case 20:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n20;
+              switch (ccparams_lte.rach_messageSizeGroupA) {
+                case 56:
+                  RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56;
                   break;
 
-                case 50:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n50;
+                case 144:
+                  RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144;
                   break;
 
-                case 100:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n100;
+                case 208:
+                  RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208;
                   break;
 
-                case 200:
-                  RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n200;
+                case 256:
+                  RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256;
                   break;
 
                 default:
                   AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200!\n",
-                               RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_messageSizeGroupA choice: 56,144,208,256!\n",
+                               RC.config_file_name, i, ccparams_lte.rach_messageSizeGroupA);
                   break;
               }
 
-              RRCcfg->radioresourceconfig[j].rach_raResponseWindowSize = (ccparams_lte.rach_raResponseWindowSize == 10) ? 7 : ccparams_lte.rach_raResponseWindowSize - 2;
-
-              if ((ccparams_lte.rach_raResponseWindowSize<0)||
-                  (ccparams_lte.rach_raResponseWindowSize==9)||
-                  (ccparams_lte.rach_raResponseWindowSize>10))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!\n",
-                             RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
-
-              RRCcfg->radioresourceconfig[j].rach_macContentionResolutionTimer = (ccparams_lte.rach_macContentionResolutionTimer / 8) - 1;
-
-              if ((ccparams_lte.rach_macContentionResolutionTimer<8) ||
-                  (ccparams_lte.rach_macContentionResolutionTimer>64) ||
-                  ((ccparams_lte.rach_macContentionResolutionTimer&7)!=0))
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_macContentionResolutionTimer choice: 8,16,...,56,64!\n",
-                             RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
-
-              RRCcfg->radioresourceconfig[j].rach_maxHARQ_Msg3Tx = ccparams_lte.rach_maxHARQ_Msg3Tx;
-
-              if ((ccparams_lte.rach_maxHARQ_Msg3Tx<0) ||
-                  (ccparams_lte.rach_maxHARQ_Msg3Tx>8))
+              if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"minusinfinity")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB0")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB5")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB8")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB10")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB12")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB15")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15;
+              } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB18")==0) {
+                RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18;
+              } else
                 AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_maxHARQ_Msg3Tx choice: 1..8!\n",
-                             RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
-
-              switch (ccparams_lte.pcch_defaultPagingCycle) {
-                case 32:
-                  RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf32;
-                  break;
-
-                case 64:
-                  RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf64;
-                  break;
-
-                case 128:
-                  RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf128;
-                  break;
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n",
+                             RC.config_file_name, i, ccparams_lte.rach_messagePowerOffsetGroupB);
+            } else if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = false;
+            } else
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !\n",
+                           RC.config_file_name, i, ccparams_lte.rach_preamblesGroupAConfig);
 
-                case 256:
-                  RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf256;
-                  break;
+            RRCcfg->radioresourceconfig[j].rach_preambleInitialReceivedTargetPower = (ccparams_lte.rach_preambleInitialReceivedTargetPower + 120) / 2;
 
-                default:
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pcch_defaultPagingCycle choice: 32,64,128,256!\n",
-                               RC.config_file_name, i, ccparams_lte.pcch_defaultPagingCycle);
-                  break;
-              }
+            if ((ccparams_lte.rach_preambleInitialReceivedTargetPower<-120) ||
+                (ccparams_lte.rach_preambleInitialReceivedTargetPower>-90) ||
+                ((ccparams_lte.rach_preambleInitialReceivedTargetPower&1)!=0))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !\n",
+                           RC.config_file_name, i, ccparams_lte.rach_preambleInitialReceivedTargetPower);
 
-              if (strcmp(ccparams_lte.pcch_nB, "fourT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_fourT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "twoT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_twoT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "oneT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "halfT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_halfT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "quarterT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_quarterT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "oneEighthT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneEighthT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "oneSixteenthT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneSixteenthT;
-              } else if (strcmp(ccparams_lte.pcch_nB, "oneThirtySecondT") == 0) {
-                RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneThirtySecondT;
-              } else {
-                AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !\n",
-                             RC.config_file_name,
-                             i,
-                             ccparams_lte.pcch_nB);
-              }
+            RRCcfg->radioresourceconfig[j].rach_powerRampingStep = ccparams_lte.rach_powerRampingStep / 2;
 
-              if (strcmp(ccparams_lte.drx_Config_present, "prNothing") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_NOTHING;
-              } else if (strcmp(ccparams_lte.drx_Config_present, "prRelease") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_release;
-              } else if (strcmp(ccparams_lte.drx_Config_present, "prSetup") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_setup;
-              } else {
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_Config_present choice: prNothing, prRelease, prSetup!\n",
-                             RC.config_file_name, i, ccparams_lte.drx_Config_present);
-              }
+            if ((ccparams_lte.rach_powerRampingStep<0) ||
+                (ccparams_lte.rach_powerRampingStep>6) ||
+                ((ccparams_lte.rach_powerRampingStep&1)!=0))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_powerRampingStep choice: 0,2,4,6 !\n",
+                           RC.config_file_name, i, ccparams_lte.rach_powerRampingStep);
 
-              if (strcmp(ccparams_lte.drx_onDurationTimer, "psf1") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf1;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf2") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf2;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf3") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf3;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf4") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf4;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf5") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf5;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf6") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf6;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf8") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf8;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf10") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf10;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf20") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf20;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf30") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf30;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf40") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf40;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf50") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf50;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf60") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf60;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf80") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf80;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf100") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf100;
-              } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf200") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf200;
-              } else {
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_onDurationTimer choice !\n",
-                             RC.config_file_name, i, ccparams_lte.drx_onDurationTimer);
+            switch (ccparams_lte.rach_preambleTransMax) {
+              case 3:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n3;
                 break;
-              }
 
-              if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf3") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf3;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf4") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf4;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf5") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf5;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf6") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf6;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf8") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf8;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf10") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf10;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf20") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf20;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf30") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf30;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf40") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf40;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf50") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf50;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf60") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf60;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf80") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf80;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf100") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf100;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf200") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf200;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf300") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf300;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf500") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf500;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf750") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf750;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1280") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1280;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1920") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1920;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2560") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2560;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf0-v1020") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf0_v1020;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare9") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare9;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare8") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare8;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare7") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare7;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare6") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare6;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare5") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare5;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare4") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare4;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare3") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare3;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare2") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare2;
-              } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare1") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare1;
-              } else {
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_InactivityTimer choice !\n",
-                             RC.config_file_name, i, ccparams_lte.drx_InactivityTimer);
+              case 4:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n4;
                 break;
-              }
 
-              RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max;
+              case 5:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n5;
+                break;
 
-              if (!ccparams_lte.mbms_dedicated_serving_cell)
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u define %s: TRUE,FALSE!\n",
-                             RC.config_file_name, i, ENB_CONFIG_STRING_MBMS_DEDICATED_SERVING_CELL);
-              else if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "ENABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = true;
-              } else  if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "DISABLE") == 0) {
-                RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = false;
-              } else {
-                AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for mbms_dedicated_serving_cell choice: TRUE or FALSE !\n",
-                             RC.config_file_name, i, ccparams_lte.mbms_dedicated_serving_cell);
-              }
+              case 6:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n6;
+                break;
 
-              switch (ccparams_lte.N_RB_DL) {
-                case 25:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 4))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..4!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+              case 7:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n7;
+                break;
 
-                  break;
+              case 8:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n8;
+                break;
 
-                case 50:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 8))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..8!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+              case 10:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n10;
+                break;
 
-                  break;
+              case 20:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n20;
+                break;
 
-                case 100:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 16))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..16!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+              case 50:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n50;
+                break;
 
-                  break;
+              case 100:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n100;
+                break;
 
-                default:
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n",
-                               RC.config_file_name, i, ccparams_lte.N_RB_DL);
-                  break;
-              }
+              case 200:
+                RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n200;
+                break;
 
-              if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf1") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf1;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf2") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf2;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf4") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf4;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf6") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf6;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf8") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf8;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf16") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf16;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf24") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf24;
-              } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf33") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf33;
-              } else {
+              default:
                 AssertFatal (0,
-                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_RetransmissionTimer choice !\n",
-                             RC.config_file_name, i, ccparams_lte.drx_RetransmissionTimer);
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200!\n",
+                             RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
                 break;
-              }
+            }
 
-              if (ccparams_lte.drx_longDrx_CycleStartOffset_present == NULL || strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prNothing") == 0) {
-                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_NOTHING;
-              } else {
-                if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf10") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf10;
-                  offsetMaxLimit = 10;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf20") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf20;
-                  offsetMaxLimit = 20;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf32") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf32;
-                  offsetMaxLimit = 32;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf40") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf40;
-                  offsetMaxLimit = 40;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf64") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf64;
-                  offsetMaxLimit = 64;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf80") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf80;
-                  offsetMaxLimit = 80;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf128") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf128;
-                  offsetMaxLimit = 128;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf160") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf160;
-                  offsetMaxLimit = 160;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf256") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf256;
-                  offsetMaxLimit = 256;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf320") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf320;
-                  offsetMaxLimit = 320;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf512") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf512;
-                  offsetMaxLimit = 512;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf640") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf640;
-                  offsetMaxLimit = 640;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1024") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1024;
-                  offsetMaxLimit = 1024;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1280") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1280;
-                  offsetMaxLimit = 1280;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2048") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2048;
-                  offsetMaxLimit = 2048;
-                } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2560") == 0) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2560;
-                  offsetMaxLimit = 2560;
-                } else {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file \"%s\", enb %u unknown string value \"%s\" for drx_longDrx_CycleStartOffset_present choice !\n",
-                               RC.config_file_name, i, ccparams_lte.drx_longDrx_CycleStartOffset_present);
-                }
+            RRCcfg->radioresourceconfig[j].rach_raResponseWindowSize = (ccparams_lte.rach_raResponseWindowSize == 10) ? 7 : ccparams_lte.rach_raResponseWindowSize - 2;
 
-                if (ccparams_lte.drx_longDrx_CycleStartOffset >= 0 && ccparams_lte.drx_longDrx_CycleStartOffset < offsetMaxLimit) {
-                  RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset = ccparams_lte.drx_longDrx_CycleStartOffset;
-                } else {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u incoherent value \"%d\" for drx_longDrx_CycleStartOffset !\n",
-                               RC.config_file_name, i, ccparams_lte.drx_longDrx_CycleStartOffset);
-                }
-              }
-
-              if  (strcmp(ccparams_lte.drx_shortDrx_Cycle, "") == 0 || ccparams_lte.drx_shortDrx_ShortCycleTimer == 0) {
-                if  (strcmp(ccparams_lte.drx_shortDrx_Cycle, "") != 0 || ccparams_lte.drx_shortDrx_ShortCycleTimer != 0) {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u incoherent values \"%s\" -  \"%d\" for drx_shortDrx_Cycle or drx_shortDrx_ShortCycleTimer choice !\n",
-                               RC.config_file_name, i, ccparams_lte.drx_shortDrx_Cycle, ccparams_lte.drx_shortDrx_ShortCycleTimer);
-                } else {
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = -1;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = 0;
-                }
-              } else {
-                if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf2") == 0) {
-                  cycleNb = 2;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf2;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf5") == 0) {
-                  cycleNb = 5;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf5;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf8") == 0) {
-                  cycleNb = 8;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf8;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf10") == 0) {
-                  cycleNb = 10;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf10;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf16") == 0) {
-                  cycleNb = 16;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf16;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf20") == 0) {
-                  cycleNb = 20;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf20;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf32") == 0) {
-                  cycleNb = 32;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf32;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf40") == 0) {
-                  cycleNb = 40;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf40;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf64") == 0) {
-                  cycleNb = 64;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf64;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf80") == 0) {
-                  cycleNb = 80;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf80;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf128") == 0) {
-                  cycleNb = 128;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf128;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf160") == 0) {
-                  cycleNb = 160;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf160;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf256") == 0) {
-                  cycleNb = 256;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf256;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf320") == 0) {
-                  cycleNb = 320;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf320;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf512") == 0) {
-                  cycleNb = 512;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf512;
-                } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf640") == 0) {
-                  cycleNb = 640;
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf640;
-                } else {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u incoherent value \"%s\" for drx_shortDrx_Cycle !\n",
-                               RC.config_file_name, i, ccparams_lte.drx_shortDrx_Cycle);
-                }
+            if ((ccparams_lte.rach_raResponseWindowSize<0)||
+                (ccparams_lte.rach_raResponseWindowSize==9)||
+                (ccparams_lte.rach_raResponseWindowSize>10))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!\n",
+                           RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
 
-                if (cycleNb > 0 && (offsetMaxLimit % cycleNb != 0 || cycleNb == offsetMaxLimit)) {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u incompatible (not multiple) values \"%d\" -  \"%d\" for drx_shortDrx_Cycle and drx_longDrx_CycleStartOffset choice !\n",
-                               RC.config_file_name, i, cycleNb, offsetMaxLimit);
-                }
+            RRCcfg->radioresourceconfig[j].rach_macContentionResolutionTimer = (ccparams_lte.rach_macContentionResolutionTimer / 8) - 1;
 
-                if (ccparams_lte.drx_shortDrx_ShortCycleTimer >= 1 && ccparams_lte.drx_shortDrx_ShortCycleTimer <= 16 ) {
-                  RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = ccparams_lte.drx_shortDrx_ShortCycleTimer;
-                } else {
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for drx_shortDrx_ShortCycleTimer choice !\n",
-                               RC.config_file_name, i, ccparams_lte.drx_shortDrx_ShortCycleTimer );
-                }
-              }
+            if ((ccparams_lte.rach_macContentionResolutionTimer<8) ||
+                (ccparams_lte.rach_macContentionResolutionTimer>64) ||
+                ((ccparams_lte.rach_macContentionResolutionTimer&7)!=0))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_macContentionResolutionTimer choice: 8,16,...,56,64!\n",
+                           RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
 
-              switch (ccparams_lte.bcch_modificationPeriodCoeff) {
-                case 2:
-                  RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n2;
-                  break;
+            RRCcfg->radioresourceconfig[j].rach_maxHARQ_Msg3Tx = ccparams_lte.rach_maxHARQ_Msg3Tx;
 
-                case 4:
-                  RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n4;
-                  break;
+            if ((ccparams_lte.rach_maxHARQ_Msg3Tx<0) ||
+                (ccparams_lte.rach_maxHARQ_Msg3Tx>8))
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_maxHARQ_Msg3Tx choice: 1..8!\n",
+                           RC.config_file_name, i, ccparams_lte.rach_preambleTransMax);
 
-                case 8:
-                  RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n8;
-                  break;
+            switch (ccparams_lte.pcch_defaultPagingCycle) {
+              case 32:
+                RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf32;
+                break;
 
-                case 16:
-                  RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n16;
-                  break;
+              case 64:
+                RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf64;
+                break;
 
-                default:
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for bcch_modificationPeriodCoeff choice: 2,4,8,16",
-                               RC.config_file_name, i, ccparams_lte.bcch_modificationPeriodCoeff);
-                  break;
-              }
+              case 128:
+                RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf128;
+                break;
 
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t300 = ccparams_lte.ue_TimersAndConstants_t300;
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t301 = ccparams_lte.ue_TimersAndConstants_t301;
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t310 = ccparams_lte.ue_TimersAndConstants_t310;
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t311 = ccparams_lte.ue_TimersAndConstants_t311;
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n310 = ccparams_lte.ue_TimersAndConstants_n310;
-              RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n311 = ccparams_lte.ue_TimersAndConstants_n311;
+              case 256:
+                RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf256;
+                break;
 
-              switch (ccparams_lte.ue_TransmissionMode) {
-                case 1:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm1;
-                  break;
+              default:
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pcch_defaultPagingCycle choice: 32,64,128,256!\n",
+                             RC.config_file_name, i, ccparams_lte.pcch_defaultPagingCycle);
+                break;
+            }
 
-                case 2:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm2;
-                  break;
+            if (strcmp(ccparams_lte.pcch_nB, "fourT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_fourT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "twoT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_twoT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "oneT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "halfT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_halfT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "quarterT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_quarterT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "oneEighthT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneEighthT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "oneSixteenthT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneSixteenthT;
+            } else if (strcmp(ccparams_lte.pcch_nB, "oneThirtySecondT") == 0) {
+              RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneThirtySecondT;
+            } else {
+              AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !\n",
+                           RC.config_file_name,
+                           i,
+                           ccparams_lte.pcch_nB);
+            }
 
-                case 3:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm3;
-                  break;
+            if (strcmp(ccparams_lte.drx_Config_present, "prNothing") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_NOTHING;
+            } else if (strcmp(ccparams_lte.drx_Config_present, "prRelease") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_release;
+            } else if (strcmp(ccparams_lte.drx_Config_present, "prSetup") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_setup;
+            } else {
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_Config_present choice: prNothing, prRelease, prSetup!\n",
+                           RC.config_file_name, i, ccparams_lte.drx_Config_present);
+            }
 
-                case 4:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm4;
-                  break;
+            if (strcmp(ccparams_lte.drx_onDurationTimer, "psf1") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf1;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf2") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf2;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf3") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf3;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf4") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf4;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf5") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf5;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf6") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf6;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf8") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf8;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf10") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf10;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf20") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf20;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf30") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf30;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf40") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf40;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf50") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf50;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf60") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf60;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf80") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf80;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf100") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf100;
+            } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf200") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf200;
+            } else {
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_onDurationTimer choice !\n",
+                           RC.config_file_name, i, ccparams_lte.drx_onDurationTimer);
+              break;
+            }
 
-                case 5:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm5;
-                  break;
+            if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf3") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf3;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf4") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf4;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf5") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf5;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf6") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf6;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf8") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf8;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf10") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf10;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf20") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf20;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf30") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf30;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf40") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf40;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf50") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf50;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf60") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf60;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf80") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf80;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf100") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf100;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf200") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf200;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf300") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf300;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf500") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf500;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf750") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf750;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1280") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1280;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1920") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1920;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2560") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2560;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf0-v1020") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf0_v1020;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare9") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare9;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare8") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare8;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare7") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare7;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare6") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare6;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare5") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare5;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare4") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare4;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare3") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare3;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare2") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare2;
+            } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare1") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare1;
+            } else {
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_InactivityTimer choice !\n",
+                           RC.config_file_name, i, ccparams_lte.drx_InactivityTimer);
+              break;
+            }
 
-                case 6:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm6;
-                  break;
+            RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max;
 
-                case 7:
-                  RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm7;
-                  break;
+            if (!ccparams_lte.mbms_dedicated_serving_cell)
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u define %s: TRUE,FALSE!\n",
+                           RC.config_file_name, i, ENB_CONFIG_STRING_MBMS_DEDICATED_SERVING_CELL);
+            else if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "ENABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = true;
+            } else  if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "DISABLE") == 0) {
+              RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = false;
+            } else {
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for mbms_dedicated_serving_cell choice: TRUE or FALSE !\n",
+                           RC.config_file_name, i, ccparams_lte.mbms_dedicated_serving_cell);
+            }
 
-                default:
+            switch (ccparams_lte.N_RB_DL) {
+              case 25:
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 4))
                   AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_TransmissionMode choice: 1,2,3,4,5,6,7",
-                               RC.config_file_name, i, ccparams_lte.ue_TransmissionMode);
-                  break;
-              }
-
-              RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max;
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..4!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
 
-              switch (ccparams_lte.N_RB_DL) {
-                case 25:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 4))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..4!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+                break;
 
-                  break;
+              case 50:
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 8))
+                  AssertFatal (0,
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..8!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
 
-                case 50:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 8))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..8!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+                break;
 
-                  break;
+              case 100:
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 16))
+                  AssertFatal (0,
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..16!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
 
-                case 100:
-                  if ((ccparams_lte.ue_multiple_max < 1) ||
-                      (ccparams_lte.ue_multiple_max > 16))
-                    AssertFatal (0,
-                                 "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..16!\n",
-                                 RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+                break;
 
-                  break;
+              default:
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n",
+                             RC.config_file_name, i, ccparams_lte.N_RB_DL);
+                break;
+            }
 
-                default:
-                  AssertFatal (0,
-                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n",
-                               RC.config_file_name, i, ccparams_lte.N_RB_DL);
-                  break;
+            if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf1") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf1;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf2") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf2;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf4") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf4;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf6") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf6;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf8") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf8;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf16") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf16;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf24") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf24;
+            } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf33") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf33;
+            } else {
+              AssertFatal (0,
+                           "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_RetransmissionTimer choice !\n",
+                           RC.config_file_name, i, ccparams_lte.drx_RetransmissionTimer);
+              break;
+            }
+
+            if (ccparams_lte.drx_longDrx_CycleStartOffset_present == NULL || strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prNothing") == 0) {
+              RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_NOTHING;
+            } else {
+              if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf10") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf10;
+                offsetMaxLimit = 10;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf20") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf20;
+                offsetMaxLimit = 20;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf32") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf32;
+                offsetMaxLimit = 32;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf40") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf40;
+                offsetMaxLimit = 40;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf64") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf64;
+                offsetMaxLimit = 64;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf80") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf80;
+                offsetMaxLimit = 80;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf128") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf128;
+                offsetMaxLimit = 128;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf160") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf160;
+                offsetMaxLimit = 160;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf256") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf256;
+                offsetMaxLimit = 256;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf320") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf320;
+                offsetMaxLimit = 320;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf512") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf512;
+                offsetMaxLimit = 512;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf640") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf640;
+                offsetMaxLimit = 640;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1024") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1024;
+                offsetMaxLimit = 1024;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1280") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1280;
+                offsetMaxLimit = 1280;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2048") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2048;
+                offsetMaxLimit = 2048;
+              } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2560") == 0) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2560;
+                offsetMaxLimit = 2560;
+              } else {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file \"%s\", enb %u unknown string value \"%s\" for drx_longDrx_CycleStartOffset_present choice !\n",
+                             RC.config_file_name, i, ccparams_lte.drx_longDrx_CycleStartOffset_present);
               }
 
-              // eMBMS configuration
-              RRCcfg->eMBMS_configured = 0;
-              printf("No eMBMS configuration, skipping it\n");
-              // eMTC configuration
-              char brparamspath[MAX_OPTNAME_SIZE*2 + 160];
-              sprintf(brparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_EMTC_PARAMETERS);
-              config_get(eMTCParams, sizeof(eMTCParams)/sizeof(paramdef_t), brparamspath);
-              RRCcfg->eMTC_configured = eMTCconfig.eMTC_configured & 1;
-
-              if (eMTCconfig.eMTC_configured > 0)
-                fill_eMTC_configuration(RRCcfg, &eMTCconfig, i, j, RC.config_file_name, brparamspath);
-              else                            printf("No eMTC configuration, skipping it\n");
-
-              // Sidelink configuration
-              char SLparamspath[MAX_OPTNAME_SIZE*2 + 160];
-              sprintf(SLparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_SL_PARAMETERS);
-              config_get( SLParams, sizeof(SLParams)/sizeof(paramdef_t), SLparamspath);
-              // Sidelink Resource pool information
-              RRCcfg->SL_configured = SLconfig.sidelink_configured & 1;
-
-              if (SLconfig.sidelink_configured == 1)
-                fill_SL_configuration(RRCcfg, &SLconfig, i, j, RC.config_file_name);
-              else                                 printf("No SL configuration skipping it\n");
-            } // !NODE_IS_DU(node_type)
-          }
+              if (ccparams_lte.drx_longDrx_CycleStartOffset >= 0 && ccparams_lte.drx_longDrx_CycleStartOffset < offsetMaxLimit) {
+                RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset = ccparams_lte.drx_longDrx_CycleStartOffset;
+              } else {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u incoherent value \"%d\" for drx_longDrx_CycleStartOffset !\n",
+                             RC.config_file_name, i, ccparams_lte.drx_longDrx_CycleStartOffset);
+              }
+            }
 
-          RRCcfg->nr_scg_ssb_freq = ccparams_lte.nr_scg_ssb_freq;
+            if  (strcmp(ccparams_lte.drx_shortDrx_Cycle, "") == 0 || ccparams_lte.drx_shortDrx_ShortCycleTimer == 0) {
+              if  (strcmp(ccparams_lte.drx_shortDrx_Cycle, "") != 0 || ccparams_lte.drx_shortDrx_ShortCycleTimer != 0) {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u incoherent values \"%s\" -  \"%d\" for drx_shortDrx_Cycle or drx_shortDrx_ShortCycleTimer choice !\n",
+                             RC.config_file_name, i, ccparams_lte.drx_shortDrx_Cycle, ccparams_lte.drx_shortDrx_ShortCycleTimer);
+              } else {
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = -1;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = 0;
+              }
+            } else {
+              if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf2") == 0) {
+                cycleNb = 2;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf2;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf5") == 0) {
+                cycleNb = 5;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf5;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf8") == 0) {
+                cycleNb = 8;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf8;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf10") == 0) {
+                cycleNb = 10;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf10;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf16") == 0) {
+                cycleNb = 16;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf16;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf20") == 0) {
+                cycleNb = 20;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf20;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf32") == 0) {
+                cycleNb = 32;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf32;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf40") == 0) {
+                cycleNb = 40;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf40;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf64") == 0) {
+                cycleNb = 64;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf64;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf80") == 0) {
+                cycleNb = 80;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf80;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf128") == 0) {
+                cycleNb = 128;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf128;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf160") == 0) {
+                cycleNb = 160;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf160;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf256") == 0) {
+                cycleNb = 256;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf256;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf320") == 0) {
+                cycleNb = 320;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf320;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf512") == 0) {
+                cycleNb = 512;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf512;
+              } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf640") == 0) {
+                cycleNb = 640;
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf640;
+              } else {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u incoherent value \"%s\" for drx_shortDrx_Cycle !\n",
+                             RC.config_file_name, i, ccparams_lte.drx_shortDrx_Cycle);
+              }
 
-          if (!NODE_IS_DU(rrc->node_type)) {
-            char srb1path[MAX_OPTNAME_SIZE*2 + 8];
-            sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1);
-            config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path);
+              if (cycleNb > 0 && (offsetMaxLimit % cycleNb != 0 || cycleNb == offsetMaxLimit)) {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u incompatible (not multiple) values \"%d\" -  \"%d\" for drx_shortDrx_Cycle and drx_longDrx_CycleStartOffset choice !\n",
+                             RC.config_file_name, i, cycleNb, offsetMaxLimit);
+              }
 
-            switch (srb1_params.srb1_max_retx_threshold) {
-              case 1:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t1;
-                break;
+              if (ccparams_lte.drx_shortDrx_ShortCycleTimer >= 1 && ccparams_lte.drx_shortDrx_ShortCycleTimer <= 16 ) {
+                RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = ccparams_lte.drx_shortDrx_ShortCycleTimer;
+              } else {
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for drx_shortDrx_ShortCycleTimer choice !\n",
+                             RC.config_file_name, i, ccparams_lte.drx_shortDrx_ShortCycleTimer );
+              }
+            }
 
+            switch (ccparams_lte.bcch_modificationPeriodCoeff) {
               case 2:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t2;
-                break;
-
-              case 3:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t3;
+                RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n2;
                 break;
 
               case 4:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t4;
-                break;
-
-              case 6:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t6;
+                RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n4;
                 break;
 
               case 8:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t8;
+                RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n8;
                 break;
 
               case 16:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t16;
-                break;
-
-              case 32:
-                rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t32;
+                RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n16;
                 break;
 
               default:
                 AssertFatal (0,
-                             "Bad config value when parsing eNB configuration file %s, enb %u  srb1_max_retx_threshold %d!\n",
-                             RC.config_file_name, i, srb1_params.srb1_max_retx_threshold);
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for bcch_modificationPeriodCoeff choice: 2,4,8,16",
+                             RC.config_file_name, i, ccparams_lte.bcch_modificationPeriodCoeff);
+                break;
             }
 
-            switch (srb1_params.srb1_poll_pdu) {
-              case 4:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p4;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t300 = ccparams_lte.ue_TimersAndConstants_t300;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t301 = ccparams_lte.ue_TimersAndConstants_t301;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t310 = ccparams_lte.ue_TimersAndConstants_t310;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t311 = ccparams_lte.ue_TimersAndConstants_t311;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n310 = ccparams_lte.ue_TimersAndConstants_n310;
+            RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n311 = ccparams_lte.ue_TimersAndConstants_n311;
+
+            switch (ccparams_lte.ue_TransmissionMode) {
+              case 1:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm1;
                 break;
 
-              case 8:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p8;
+              case 2:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm2;
                 break;
 
-              case 16:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p16;
+              case 3:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm3;
                 break;
 
-              case 32:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p32;
+              case 4:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm4;
                 break;
 
-              case 64:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p64;
+              case 5:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm5;
                 break;
 
-              case 128:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p128;
+              case 6:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm6;
                 break;
 
-              case 256:
-                rrc->srb1_poll_pdu = LTE_PollPDU_p256;
+              case 7:
+                RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm7;
                 break;
 
               default:
-                if (srb1_params.srb1_poll_pdu >= 10000)
-                  rrc->srb1_poll_pdu = LTE_PollPDU_pInfinity;
-                else
-                  AssertFatal (0,
-                               "Bad config value when parsing eNB configuration file %s, enb %u  srb1_poll_pdu %d!\n",
-                               RC.config_file_name, i, srb1_params.srb1_poll_pdu);
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_TransmissionMode choice: 1,2,3,4,5,6,7",
+                             RC.config_file_name, i, ccparams_lte.ue_TransmissionMode);
+                break;
             }
 
-            rrc->srb1_poll_byte             = srb1_params.srb1_poll_byte;
+            RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max;
 
-            switch (srb1_params.srb1_poll_byte) {
+            switch (ccparams_lte.N_RB_DL) {
               case 25:
-                rrc->srb1_poll_byte = LTE_PollByte_kB25;
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 4))
+                  AssertFatal (0,
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..4!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
+
                 break;
 
               case 50:
-                rrc->srb1_poll_byte = LTE_PollByte_kB50;
-                break;
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 8))
+                  AssertFatal (0,
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..8!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
 
-              case 75:
-                rrc->srb1_poll_byte = LTE_PollByte_kB75;
                 break;
 
               case 100:
-                rrc->srb1_poll_byte = LTE_PollByte_kB100;
-                break;
+                if ((ccparams_lte.ue_multiple_max < 1) ||
+                    (ccparams_lte.ue_multiple_max > 16))
+                  AssertFatal (0,
+                               "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for ue_multiple_max choice: 1..16!\n",
+                               RC.config_file_name, i, ccparams_lte.ue_multiple_max);
 
-              case 125:
-                rrc->srb1_poll_byte = LTE_PollByte_kB125;
                 break;
 
-              case 250:
-                rrc->srb1_poll_byte = LTE_PollByte_kB250;
+              default:
+                AssertFatal (0,
+                             "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n",
+                             RC.config_file_name, i, ccparams_lte.N_RB_DL);
                 break;
+            }
 
-              case 375:
-                rrc->srb1_poll_byte = LTE_PollByte_kB375;
-                break;
+            // eMBMS configuration
+            RRCcfg->eMBMS_configured = 0;
+            printf("No eMBMS configuration, skipping it\n");
+            // eMTC configuration
+            char brparamspath[MAX_OPTNAME_SIZE*2 + 160];
+            sprintf(brparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_EMTC_PARAMETERS);
+            config_get(eMTCParams, sizeof(eMTCParams)/sizeof(paramdef_t), brparamspath);
+            RRCcfg->eMTC_configured = eMTCconfig.eMTC_configured & 1;
+
+            if (eMTCconfig.eMTC_configured > 0)
+              fill_eMTC_configuration(RRCcfg, &eMTCconfig, i, j, RC.config_file_name, brparamspath);
+            else                            printf("No eMTC configuration, skipping it\n");
+
+            // Sidelink configuration
+            char SLparamspath[MAX_OPTNAME_SIZE*2 + 160];
+            sprintf(SLparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_SL_PARAMETERS);
+            config_get( SLParams, sizeof(SLParams)/sizeof(paramdef_t), SLparamspath);
+            // Sidelink Resource pool information
+            RRCcfg->SL_configured = SLconfig.sidelink_configured & 1;
+
+            if (SLconfig.sidelink_configured == 1)
+              fill_SL_configuration(RRCcfg, &SLconfig, i, j, RC.config_file_name);
+            else                                 printf("No SL configuration skipping it\n");
+          }
 
-              case 500:
-                rrc->srb1_poll_byte = LTE_PollByte_kB500;
-                break;
+          RRCcfg->nr_scg_ssb_freq = ccparams_lte.nr_scg_ssb_freq;
 
-              case 750:
-                rrc->srb1_poll_byte = LTE_PollByte_kB750;
-                break;
+          char srb1path[MAX_OPTNAME_SIZE*2 + 8];
+          sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1);
+          config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path);
 
-              case 1000:
-                rrc->srb1_poll_byte = LTE_PollByte_kB1000;
-                break;
+          switch (srb1_params.srb1_max_retx_threshold) {
+            case 1:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t1;
+              break;
 
-              case 1250:
-                rrc->srb1_poll_byte = LTE_PollByte_kB1250;
-                break;
+            case 2:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t2;
+              break;
 
-              case 1500:
-                rrc->srb1_poll_byte = LTE_PollByte_kB1500;
-                break;
+            case 3:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t3;
+              break;
 
-              case 2000:
-                rrc->srb1_poll_byte = LTE_PollByte_kB2000;
-                break;
+            case 4:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t4;
+              break;
 
-              case 3000:
-                rrc->srb1_poll_byte = LTE_PollByte_kB3000;
-                break;
+            case 6:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t6;
+              break;
 
-              default:
-                if (srb1_params.srb1_poll_byte >= 10000)
-                  rrc->srb1_poll_byte = LTE_PollByte_kBinfinity;
-                else
-                  AssertFatal (0,
-                               "Bad config value when parsing eNB configuration file %s, enb %u  srb1_poll_byte %d!\n",
-                               RC.config_file_name, i, srb1_params.srb1_poll_byte);
-            }
+            case 8:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t8;
+              break;
 
-            if (srb1_params.srb1_timer_poll_retransmit <= 250) {
-              rrc->srb1_timer_poll_retransmit = (srb1_params.srb1_timer_poll_retransmit - 5)/5;
-            } else if (srb1_params.srb1_timer_poll_retransmit <= 500) {
-              rrc->srb1_timer_poll_retransmit = (srb1_params.srb1_timer_poll_retransmit - 300)/50 + 50;
-            } else {
-              AssertFatal (0,
-                           "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_poll_retransmit %d!\n",
-                           RC.config_file_name, i, srb1_params.srb1_timer_poll_retransmit);
-            }
+            case 16:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t16;
+              break;
 
-            if (srb1_params.srb1_timer_status_prohibit <= 250) {
-              rrc->srb1_timer_status_prohibit = srb1_params.srb1_timer_status_prohibit/5;
-            } else if ((srb1_params.srb1_timer_poll_retransmit >= 300) && (srb1_params.srb1_timer_poll_retransmit <= 500)) {
-              rrc->srb1_timer_status_prohibit = (srb1_params.srb1_timer_status_prohibit - 300)/50 + 51;
-            } else {
+            case 32:
+              rrc->srb1_max_retx_threshold = LTE_UL_AM_RLC__maxRetxThreshold_t32;
+              break;
+
+            default:
               AssertFatal (0,
-                           "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_status_prohibit %d!\n",
-                           RC.config_file_name, i, srb1_params.srb1_timer_status_prohibit);
-            }
+                           "Bad config value when parsing eNB configuration file %s, enb %u  srb1_max_retx_threshold %d!\n",
+                           RC.config_file_name, i, srb1_params.srb1_max_retx_threshold);
+          }
 
-            switch (srb1_params.srb1_timer_reordering) {
-              case 0:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms0;
-                break;
+          switch (srb1_params.srb1_poll_pdu) {
+            case 4:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p4;
+              break;
 
-              case 5:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms5;
-                break;
+            case 8:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p8;
+              break;
 
-              case 10:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms10;
-                break;
+            case 16:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p16;
+              break;
 
-              case 15:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms15;
-                break;
+            case 32:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p32;
+              break;
 
-              case 20:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms20;
-                break;
+            case 64:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p64;
+              break;
 
-              case 25:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms25;
-                break;
+            case 128:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p128;
+              break;
 
-              case 30:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms30;
-                break;
+            case 256:
+              rrc->srb1_poll_pdu = LTE_PollPDU_p256;
+              break;
 
-              case 35:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms35;
-                break;
+            default:
+              if (srb1_params.srb1_poll_pdu >= 10000)
+                rrc->srb1_poll_pdu = LTE_PollPDU_pInfinity;
+              else
+                AssertFatal (0,
+                             "Bad config value when parsing eNB configuration file %s, enb %u  srb1_poll_pdu %d!\n",
+                             RC.config_file_name, i, srb1_params.srb1_poll_pdu);
+          }
 
-              case 40:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms40;
-                break;
+          rrc->srb1_poll_byte             = srb1_params.srb1_poll_byte;
 
-              case 45:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms45;
-                break;
+          switch (srb1_params.srb1_poll_byte) {
+            case 25:
+              rrc->srb1_poll_byte = LTE_PollByte_kB25;
+              break;
 
-              case 50:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms50;
-                break;
+            case 50:
+              rrc->srb1_poll_byte = LTE_PollByte_kB50;
+              break;
 
-              case 55:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms55;
-                break;
+            case 75:
+              rrc->srb1_poll_byte = LTE_PollByte_kB75;
+              break;
 
-              case 60:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms60;
-                break;
+            case 100:
+              rrc->srb1_poll_byte = LTE_PollByte_kB100;
+              break;
 
-              case 65:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms65;
-                break;
+            case 125:
+              rrc->srb1_poll_byte = LTE_PollByte_kB125;
+              break;
 
-              case 70:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms70;
-                break;
+            case 250:
+              rrc->srb1_poll_byte = LTE_PollByte_kB250;
+              break;
 
-              case 75:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms75;
-                break;
+            case 375:
+              rrc->srb1_poll_byte = LTE_PollByte_kB375;
+              break;
 
-              case 80:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms80;
-                break;
+            case 500:
+              rrc->srb1_poll_byte = LTE_PollByte_kB500;
+              break;
 
-              case 85:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms85;
-                break;
+            case 750:
+              rrc->srb1_poll_byte = LTE_PollByte_kB750;
+              break;
 
-              case 90:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms90;
-                break;
+            case 1000:
+              rrc->srb1_poll_byte = LTE_PollByte_kB1000;
+              break;
 
-              case 95:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms95;
-                break;
+            case 1250:
+              rrc->srb1_poll_byte = LTE_PollByte_kB1250;
+              break;
 
-              case 100:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms100;
-                break;
+            case 1500:
+              rrc->srb1_poll_byte = LTE_PollByte_kB1500;
+              break;
 
-              case 110:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms110;
-                break;
+            case 2000:
+              rrc->srb1_poll_byte = LTE_PollByte_kB2000;
+              break;
 
-              case 120:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms120;
-                break;
+            case 3000:
+              rrc->srb1_poll_byte = LTE_PollByte_kB3000;
+              break;
 
-              case 130:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms130;
-                break;
+            default:
+              if (srb1_params.srb1_poll_byte >= 10000)
+                rrc->srb1_poll_byte = LTE_PollByte_kBinfinity;
+              else
+                AssertFatal (0,
+                             "Bad config value when parsing eNB configuration file %s, enb %u  srb1_poll_byte %d!\n",
+                             RC.config_file_name, i, srb1_params.srb1_poll_byte);
+          }
 
-              case 140:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms140;
-                break;
+          if (srb1_params.srb1_timer_poll_retransmit <= 250) {
+            rrc->srb1_timer_poll_retransmit = (srb1_params.srb1_timer_poll_retransmit - 5)/5;
+          } else if (srb1_params.srb1_timer_poll_retransmit <= 500) {
+            rrc->srb1_timer_poll_retransmit = (srb1_params.srb1_timer_poll_retransmit - 300)/50 + 50;
+          } else {
+            AssertFatal (0,
+                         "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_poll_retransmit %d!\n",
+                         RC.config_file_name, i, srb1_params.srb1_timer_poll_retransmit);
+          }
 
-              case 150:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms150;
-                break;
+          if (srb1_params.srb1_timer_status_prohibit <= 250) {
+            rrc->srb1_timer_status_prohibit = srb1_params.srb1_timer_status_prohibit/5;
+          } else if ((srb1_params.srb1_timer_poll_retransmit >= 300) && (srb1_params.srb1_timer_poll_retransmit <= 500)) {
+            rrc->srb1_timer_status_prohibit = (srb1_params.srb1_timer_status_prohibit - 300)/50 + 51;
+          } else {
+            AssertFatal (0,
+                         "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_status_prohibit %d!\n",
+                         RC.config_file_name, i, srb1_params.srb1_timer_status_prohibit);
+          }
 
-              case 160:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms160;
-                break;
+          switch (srb1_params.srb1_timer_reordering) {
+            case 0:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms0;
+              break;
 
-              case 170:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms170;
-                break;
+            case 5:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms5;
+              break;
 
-              case 180:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms180;
-                break;
+            case 10:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms10;
+              break;
 
-              case 190:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms190;
-                break;
+            case 15:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms15;
+              break;
 
-              case 200:
-                rrc->srb1_timer_reordering = LTE_T_Reordering_ms200;
-                break;
+            case 20:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms20;
+              break;
 
-              default:
-                AssertFatal (0,
-                             "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_reordering %d!\n",
-                             RC.config_file_name, i, srb1_params.srb1_timer_reordering);
-            }
-          }
-        }
-      }
-    }
-  }
+            case 25:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms25;
+              break;
 
-  LOG_I(RRC,"Node type %d \n ", rrc->node_type);
-  return 0;
-}
+            case 30:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms30;
+              break;
 
-int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i) {
-  int k;
-  paramdef_t ENBSParams[] = ENBSPARAMS_DESC;
-  paramdef_t ENBParams[]  = ENBPARAMS_DESC;
-  paramlist_def_t ENBParamList = {ENB_CONFIG_STRING_ENB_LIST,NULL,0};
-  config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
-  int num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
-  AssertFatal (i<num_enbs,
-               "Failed to parse config file no %uth element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS);
+            case 35:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms35;
+              break;
 
-  if (num_enbs>0) {
-    // Output a list of all eNBs.
-    config_getlist( &ENBParamList,ENBParams,sizeof(ENBParams)/sizeof(paramdef_t),NULL);
-    AssertFatal(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr != NULL,
-                "eNB id %u is not defined in configuration file\n",i);
-    F1AP_SETUP_REQ (msg_p).num_cells_available = 0;
-    F1AP_SETUP_REQ (msg_p).cell_type = CELL_MACRO_ENB;
+            case 40:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms40;
+              break;
 
-    for (k=0; k <num_enbs ; k++) {
-      if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[k], *(ENBParamList.paramarray[i][ENB_ENB_NAME_IDX].strptr) )== 0) {
-        char aprefix[MAX_OPTNAME_SIZE*2 + 8];
-        sprintf(aprefix,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k);
-        paramdef_t PLMNParams[] = PLMNPARAMS_DESC;
-        paramlist_def_t PLMNParamList = {ENB_CONFIG_STRING_PLMN_LIST, NULL, 0};
-        /* map parameter checking array instances to parameter definition array instances */
-        checkedparam_t config_check_PLMNParams [] = PLMNPARAMS_CHECK;
+            case 45:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms45;
+              break;
 
-        for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I)
-          PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
+            case 50:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms50;
+              break;
 
-        config_getlist(&PLMNParamList, PLMNParams, sizeof(PLMNParams)/sizeof(paramdef_t), aprefix);
-        paramdef_t SCTPParams[]  = SCTPPARAMS_DESC;
-        F1AP_SETUP_REQ (msg_p).num_cells_available++;
-        F1AP_SETUP_REQ (msg_p).gNB_DU_id        = *(ENBParamList.paramarray[0][ENB_ENB_ID_IDX].uptr);
-        LOG_I(ENB_APP,"F1AP: gNB_DU_id[%d] %ld\n",k,F1AP_SETUP_REQ (msg_p).gNB_DU_id);
-        F1AP_SETUP_REQ (msg_p).gNB_DU_name      = strdup(*(ENBParamList.paramarray[0][ENB_ENB_NAME_IDX].strptr));
-        LOG_I(ENB_APP,"F1AP: gNB_DU_name[%d] %s\n",k,F1AP_SETUP_REQ (msg_p).gNB_DU_name);
-        F1AP_SETUP_REQ (msg_p).cell[k].tac              = *ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].uptr;
-        LOG_I(ENB_APP,"F1AP: tac[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).cell[k].tac);
-        F1AP_SETUP_REQ (msg_p).cell[k].mcc              = *PLMNParamList.paramarray[0][ENB_MOBILE_COUNTRY_CODE_IDX].uptr;
-        LOG_I(ENB_APP,"F1AP: mcc[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).cell[k].mcc);
-        F1AP_SETUP_REQ (msg_p).cell[k].mnc              = *PLMNParamList.paramarray[0][ENB_MOBILE_NETWORK_CODE_IDX].uptr;
-        LOG_I(ENB_APP,"F1AP: mnc[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).cell[k].mnc);
-        F1AP_SETUP_REQ (msg_p).cell[k].mnc_digit_length = *PLMNParamList.paramarray[0][ENB_MNC_DIGIT_LENGTH].u8ptr;
-        LOG_I(ENB_APP,"F1AP: mnc_digit_length[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).cell[k].mnc_digit_length);
-        AssertFatal((F1AP_SETUP_REQ (msg_p).cell[k].mnc_digit_length == 2) ||
-                    (F1AP_SETUP_REQ (msg_p).cell[k].mnc_digit_length == 3),
-                    "BAD MNC DIGIT LENGTH %d",
-                    F1AP_SETUP_REQ (msg_p).cell[k].mnc_digit_length);
-        F1AP_SETUP_REQ (msg_p).cell[k].nr_cellid = (uint64_t)*(ENBParamList.paramarray[i][ENB_NRCELLID_IDX].u64ptr);
-        LOG_I(ENB_APP,"F1AP: nr_cellid[%d] %ld\n",k,F1AP_SETUP_REQ (msg_p).cell[k].nr_cellid);
-        LOG_I(ENB_APP,"F1AP: CU_ip4_address in DU %s\n",RC.mac[k]->eth_params_n.remote_addr);
-        LOG_I(ENB_APP,"FIAP: CU_ip4_address in DU %p, strlen %d\n",F1AP_SETUP_REQ (msg_p).CU_f1_ip_address.ipv4_address,(int)strlen(RC.mac[k]->eth_params_n.remote_addr));
-        F1AP_SETUP_REQ (msg_p).CU_f1_ip_address.ipv6 = 0;
-        F1AP_SETUP_REQ (msg_p).CU_f1_ip_address.ipv4 = 1;
-        //strcpy(F1AP_SETUP_REQ (msg_p).CU_f1_ip_address.ipv6_address, "");
-        strcpy(F1AP_SETUP_REQ (msg_p).CU_f1_ip_address.ipv4_address, RC.mac[k]->eth_params_n.remote_addr);
-        LOG_I(ENB_APP,"F1AP: DU_ip4_address in DU %s\n",RC.mac[k]->eth_params_n.my_addr);
-        LOG_I(ENB_APP,"FIAP: DU_ip4_address in DU %p, strlen %d\n",F1AP_SETUP_REQ (msg_p).DU_f1_ip_address.ipv4_address,(int)strlen(RC.mac[k]->eth_params_n.my_addr));
-        F1AP_SETUP_REQ (msg_p).DU_f1_ip_address.ipv6 = 0;
-        F1AP_SETUP_REQ (msg_p).DU_f1_ip_address.ipv4 = 1;
-	
-        //strcpy(F1AP_SETUP_REQ (msg_p).DU_f1_ip_address.ipv6_address, "");
-        strcpy(F1AP_SETUP_REQ (msg_p).DU_f1_ip_address.ipv4_address, RC.mac[k]->eth_params_n.my_addr);
-	F1AP_SETUP_REQ (msg_p).DUport= RC.mac[k]->eth_params_n.my_portd;
-	F1AP_SETUP_REQ (msg_p).CUport= RC.mac[k]->eth_params_n.remote_portd;
-        //strcpy(F1AP_SETUP_REQ (msg_p).CU_ip_address[l].ipv6_address,*(F1ParamList.paramarray[l][ENB_CU_IPV6_ADDRESS_IDX].strptr));
-        //F1AP_SETUP_REQ (msg_p).CU_port = RC.mac[k]->eth_params_n.remote_portc; // maybe we dont need it
-        sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
-        config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
-        F1AP_SETUP_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
-        F1AP_SETUP_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
-        eNB_RRC_INST *rrc = RC.rrc[k];
-        // wait until RRC cell information is configured
-        int cell_info_configured=0;
-
-        do {
-          LOG_I(ENB_APP,"ngran_eNB_DU: Waiting for basic cell configuration\n");
-          usleep(100000);
-          pthread_mutex_lock(&rrc->cell_info_mutex);
-          cell_info_configured = rrc->cell_info_configured;
-          pthread_mutex_unlock(&rrc->cell_info_mutex);
-        } while (cell_info_configured ==0);
-
-        rrc->configuration.mcc[0] = F1AP_SETUP_REQ (msg_p).cell[k].mcc;
-        rrc->configuration.mnc[0] = F1AP_SETUP_REQ (msg_p).cell[k].mnc;
-        rrc->configuration.tac    = F1AP_SETUP_REQ (msg_p).cell[k].tac;
-        rrc->nr_cellid = F1AP_SETUP_REQ (msg_p).cell[k].nr_cellid;
-        F1AP_SETUP_REQ (msg_p).cell[k].nr_pci    = rrc->carrier[0].physCellId;
-        F1AP_SETUP_REQ (msg_p).cell[k].num_ssi = 0;
-
-        if (rrc->carrier[0].sib1->tdd_Config) {
-          LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for TDD\n",k);
-          F1AP_SETUP_REQ (msg_p).fdd_flag = 0;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_arfcn            = freq_to_arfcn10(rrc->carrier[0].sib1->freqBandIndicator,
-              rrc->carrier[0].dl_CarrierFreq);
-          // For LTE use scs field to carry prefix type and number of antennas
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.scs                 = (rrc->carrier[0].Ncp<<2)+rrc->carrier[0].p_eNB;;
-          // use nrb field to hold LTE N_RB_DL (0...5)
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb                 = rrc->carrier[0].mib.message.dl_Bandwidth;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb                 = rrc->carrier[0].mib.message.dl_Bandwidth;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.num_frequency_bands = 1;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_band[0]          = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.sul_active          = 0;
-        } else {
-          LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k);
-          F1AP_SETUP_REQ (msg_p).fdd_flag = 1;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_arfcn             = freq_to_arfcn10(rrc->carrier[0].sib1->freqBandIndicator,
-              rrc->carrier[0].dl_CarrierFreq);
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_arfcn             = F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_arfcn;
-          // For LTE use scs field to carry prefix type and number of antennas
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_scs                  = (rrc->carrier[0].Ncp<<2)+rrc->carrier[0].p_eNB;;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_scs                  = rrc->carrier[0].Ncp;
-          // use nrb field to hold LTE N_RB_DL (0...5)
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb                  = rrc->carrier[0].mib.message.dl_Bandwidth;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb                  = rrc->carrier[0].mib.message.dl_Bandwidth;
-          // RK: we need to check there value for FDD's frequency_bands DL/UL
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_num_frequency_bands  = 1;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_band[0]           = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_num_frequency_bands  = 1;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_band[0]           = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_num_sul_frequency_bands  = 0;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_sul_band[0]           = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_num_sul_frequency_bands  = 0;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_sul_band[0]           = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active              = 0;
-        }
+            case 55:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms55;
+              break;
 
-        F1AP_SETUP_REQ (msg_p).measurement_timing_information[k]             = "0";
-        F1AP_SETUP_REQ (msg_p).ranac[k]                                      = 0;
-        F1AP_SETUP_REQ (msg_p).mib[k]                                        = rrc->carrier[0].MIB;
-        F1AP_SETUP_REQ (msg_p).sib1[k]                                       = rrc->carrier[0].SIB1;
-        F1AP_SETUP_REQ (msg_p).mib_length[k]                                 = rrc->carrier[0].sizeof_MIB;
-        F1AP_SETUP_REQ (msg_p).sib1_length[k]                                = rrc->carrier[0].sizeof_SIB1;
-        break;
-      } // if
-    } // for
-  } // if
+            case 60:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms60;
+              break;
+
+            case 65:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms65;
+              break;
+
+            case 70:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms70;
+              break;
+
+            case 75:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms75;
+              break;
+
+            case 80:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms80;
+              break;
+
+            case 85:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms85;
+              break;
+
+            case 90:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms90;
+              break;
+
+            case 95:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms95;
+              break;
+
+            case 100:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms100;
+              break;
+
+            case 110:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms110;
+              break;
+
+            case 120:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms120;
+              break;
+
+            case 130:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms130;
+              break;
+
+            case 140:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms140;
+              break;
+
+            case 150:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms150;
+              break;
+
+            case 160:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms160;
+              break;
+
+            case 170:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms170;
+              break;
+
+            case 180:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms180;
+              break;
+
+            case 190:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms190;
+              break;
+
+            case 200:
+              rrc->srb1_timer_reordering = LTE_T_Reordering_ms200;
+              break;
+
+            default:
+              AssertFatal (0,
+                           "Bad config value when parsing eNB configuration file %s, enb %u  srb1_timer_reordering %d!\n",
+                           RC.config_file_name, i, srb1_params.srb1_timer_reordering);
+          }
+        }
+      }
+    }
+  }
 
   return 0;
 }
@@ -2975,80 +2786,80 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
               carrier->SIB23 = (uint8_t *)malloc(64);
               memcpy((void *)carrier->SIB23,(void *)si_container,si_container_length);
               carrier->sizeof_SIB23 = si_container_length;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB2 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB2\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3:
               carrier->sib3 = &typeandinfo->choice.sib3;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB3 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB3\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4:
               //carrier->sib4 = &typeandinfo->choice.sib4;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB4 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB4\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5:
               //carrier->sib5 = &typeandinfo->choice.sib5;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB5 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB5\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6:
               //carrier->sib6 = &typeandinfo->choice.sib6;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB6 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB6\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7:
               //carrier->sib7 = &typeandinfo->choice.sib7;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB7 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB7\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8:
               //carrier->sib8 = &typeandinfo->choice.sib8;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB8 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB8\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9:
               //carrier->sib9 = &typeandinfo->choice.sib9;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB9 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB9\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10:
               //carrier->sib10 = &typeandinfo->choice.sib10;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB10 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB10\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11:
               //carrier->sib11 = &typeandinfo->choice.sib11;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB11 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB11\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920:
               //carrier->sib12 = &typeandinfo->choice.sib12;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB12 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB12\n", inst);
               break;
 
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920:
               carrier->sib13 = &typeandinfo->choice.sib13_v920;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB13 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB13\n", inst);
               break;
 
             //SIB18
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib18_v1250:
               carrier->sib18 = &typeandinfo->choice.sib18_v1250;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB18 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB18\n", inst);
               break;
 
             //SIB19
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib19_v1250:
               carrier->sib19 = &typeandinfo->choice.sib19_v1250;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB19 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB19\n", inst);
               break;
 
             //SIB21
             case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib21_v1430:
               carrier->sib21 = &typeandinfo->choice.sib21_v1430;
-              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB21 in CU F1AP_SETUP_RESP message\n", inst);
+              LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB21\n", inst);
               break;
 
             default:
@@ -3092,49 +2903,7 @@ void configure_du_mac(int inst) {
   rrc_mac_config_req_eNB(inst, &tmp);
 }
 
-void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
-  int i,j,si_ind;
-  LOG_I(ENB_APP, "cells_to_activated %d, RRC instances %d\n",
-        resp->num_cells_to_activate,RC.nb_inst);
-
-  for (j=0; j<resp->num_cells_to_activate; j++) {
-    for (i=0; i<RC.nb_inst; i++) {
-      rrc_eNB_carrier_data_t *carrier =  &RC.rrc[i]->carrier[0];
-      // identify local index of cell j by nr_cellid, plmn identity and physical cell ID
-      LOG_I(ENB_APP, "Checking cell %d, rrc inst %d : rrc->nr_cellid %lx, resp->nr_cellid %lx\n",
-            j,i,RC.rrc[i]->nr_cellid,resp->cells_to_activate[j].nr_cellid);
-
-      if (RC.rrc[i]->nr_cellid == resp->cells_to_activate[j].nr_cellid &&
-          (check_plmn_identity(carrier, resp->cells_to_activate[j].mcc, resp->cells_to_activate[j].mnc, resp->cells_to_activate[j].mnc_digit_length)>0 &&
-           resp->cells_to_activate[j].nrpci == carrier->physCellId)) {
-        // copy system information and decode it
-        for (si_ind=0; si_ind<resp->cells_to_activate[j].num_SI; si_ind++)  {
-          //printf("SI %d size %d: ", si_ind, resp->cells_to_activate[j].SI_container_length[si_ind]);
-          //for (int n=0;n<resp->cells_to_activate[j].SI_container_length[si_ind];n++)
-          //  printf("%02x ",resp->cells_to_activate[j].SI_container[si_ind][n]);
-          //printf("\n");
-          if (si_ind==6) si_ind=9;
-          if (resp->cells_to_activate[j].SI_container[si_ind] != NULL) {
-            extract_and_decode_SI(i,
-                                  resp->cells_to_activate[j].SI_type[si_ind],
-                                  resp->cells_to_activate[j].SI_container[si_ind],
-                                  resp->cells_to_activate[j].SI_container_length[si_ind]);
-          }
-
-        }
-
-        // perform MAC/L1 common configuration
-        configure_du_mac(i);
-      } else {
-        LOG_E(ENB_APP, "F1 Setup Response not matching\n");
-      }
-    }
-  }
-}
-
 void read_config_and_init(void) {
-  int macrlc_has_f1[MAX_MAC_INST];
-  memset(macrlc_has_f1, 0, MAX_MAC_INST*sizeof(int));
 
   if (RC.nb_macrlc_inst > 0)
     AssertFatal(RC.nb_macrlc_inst == RC.nb_inst,
@@ -3143,7 +2912,7 @@ void read_config_and_init(void) {
 
   RCconfig_L1();
   LOG_I(PHY, "%s() RC.nb_L1_inst: %d\n", __FUNCTION__, RC.nb_L1_inst);
-  RCconfig_macrlc(macrlc_has_f1);
+  RCconfig_macrlc();
   LOG_I(MAC, "%s() RC.nb_macrlc_inst: %d\n", __FUNCTION__, RC.nb_macrlc_inst);
 
   if (RC.nb_L1_inst > 0)
@@ -3156,6 +2925,6 @@ void read_config_and_init(void) {
     RC.rrc[enb_id] = malloc(sizeof(eNB_RRC_INST));
     AssertFatal(RC.rrc[enb_id], "RRC context for eNB %u not allocated\n", enb_id);
     memset((void *)RC.rrc[enb_id], 0, sizeof(eNB_RRC_INST));
-    RCconfig_RRC(enb_id, RC.rrc[enb_id],macrlc_has_f1[enb_id]);
+    RCconfig_RRC(enb_id, RC.rrc[enb_id]);
   }
 }
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 904ace1b73f78b3f1b1792803afb09c5451bd43d..67b4fb45e70258b39230e8c77b7c01e5a8bdfae7 100644
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -101,7 +101,7 @@ typedef struct ru_config_s {
 } ru_config_t;
 
 extern void RCconfig_L1(void);
-extern void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]);
+extern void RCconfig_macrlc(void);
 extern void UE_config_stub_pnf(void);
 extern int  RCconfig_gtpu(void );
 extern void RCConfig(void);
@@ -109,7 +109,7 @@ extern void RCConfig(void);
 void                          enb_config_display(void);
 void                          ru_config_display(void);
 
-int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1);
+int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc);
 int RCconfig_S1(MessageDef *msg_p, uint32_t i);
 
 void read_config_and_init(void);
@@ -119,8 +119,5 @@ int RCconfig_M2(MessageDef *msg_p, uint32_t i);
 void fill_SL_configuration(RrcConfigurationReq *RRCcfg, ccparams_sidelink_t *SLconfig, int cell_idx, int cc_idx, char *config_fname);
 void fill_eMTC_configuration(RrcConfigurationReq *RRCcfg, ccparams_eMTC_t *eMTCconfig, int cell_idx, int cc_idx, char *config_fname, char *brparamspath);
 
-int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i);
-void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp);
-
 #endif /* ENB_CONFIG_H_ */
 /** @} */
diff --git a/openair2/F1AP/dummy_enb.c b/openair2/F1AP/dummy_enb.c
deleted file mode 100644
index 942e652213d167512ea0c59bf0c2396c7fb9e088..0000000000000000000000000000000000000000
--- a/openair2/F1AP/dummy_enb.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.1  (the "License"); you may not use this file
- * except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.openairinterface.org/?page_id=698
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *-------------------------------------------------------------------------------
- * For more information about the OpenAirInterface (OAI) Software Alliance:
- *      contact@openairinterface.org
- */
-
-#include "COMMON/platform_types.h"
-#include "common/ran_context.h"
-#include "common/utils/LOG/log.h"
-#include "NR_BCCH-BCH-Message.h"
-#include "NR_ServingCellConfigCommon.h"
-#include "NR_MIB.h"
-
-bool sdap_data_req(protocol_ctxt_t *ctxt_p,
-                   const ue_id_t ue_id,
-                   const srb_flag_t srb_flag,
-                   const rb_id_t rb_id,
-                   const mui_t mui,
-                   const confirm_t confirm,
-                   const sdu_size_t sdu_buffer_size,
-                   unsigned char *const sdu_buffer,
-                   const pdcp_transmission_mode_t pt_mode,
-                   const uint32_t *sourceL2Id,
-                   const uint32_t *destinationL2Id,
-                   const uint8_t qfi,
-                   const bool rqi,
-                   const int pdusession_id) {
-abort();
-}
-
-int dl_rrc_message(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc) {
-  abort();
-}
-
-int rrc_gNB_generate_pcch_msg(uint32_t tmsi,
-                              uint8_t paging_drx,
-                              instance_t instance,
-                              uint8_t CC_id) {
-  abort();
-}
diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c
index 0dfcefaef30f27126780deb02a974cf9e1167b04..9436b84ff7408f98f46967a63142b3c07048dcd4 100644
--- a/openair2/F1AP/f1ap_cu_interface_management.c
+++ b/openair2/F1AP/f1ap_cu_interface_management.c
@@ -142,15 +142,9 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
     req->cell[i].nr_pci = servedCellInformation->nRPCI;
     LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].nr_pci);
     
-    // LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell
-    // Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
-    if (RC.nrrrc &&
-        ( RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU ||
-          RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CUCP) )
-      f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
-    else
-      f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
-    
+    // LTS: FIXME cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
+    f1ap_req(true, instance)->cell_type = CELL_MACRO_GNB;
+
     // FDD Cells
     if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) {
       struct fdd_s *FDDs=&req->nr_mode_info[i].fdd;
@@ -558,198 +552,6 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
     }
   }
 
-  // c3. Cells_to_be_Deactivated_List
-  //
-  /*
-  if(!RC.nrrrc) {
-    // mandatory
-    // c3. Cells_to_be_Deactivated_List
-    asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC3);
-    ieC3->id                        = F1AP_ProtocolIE_ID_id_Cells_to_be_Deactivated_List;
-    ieC3->criticality               = F1AP_Criticality_reject;
-    ieC3->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Deactivated_List;
-
-    for (int i=0; i<1; i++) {
-      asn1cSequenceAdd(ieC3->value.choice.Cells_to_be_Deactivated_List.list,
-           F1AP_Cells_to_be_Deactivated_List_ItemIEs_t, cells_to_be_deactivated);
-      cells_to_be_deactivated->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
-      cells_to_be_deactivated->criticality = F1AP_Criticality_reject;
-      cells_to_be_deactivated->value.present = F1AP_Cells_to_be_Deactivated_List_ItemIEs__value_PR_Cells_to_be_Deactivated_List_Item;
-      // 3.1 cells to be Deactivated list item
-      F1AP_Cells_to_be_Deactivated_List_Item_t *cells_to_be_deactivated_list=
-  cells_to_be_deactivated->value.choice.Cells_to_be_Deactivated_List_Item;
-      addnRCGI(cells_to_be_deactivated_item->nRCGI, f1ap_setup_resp->cells_to_deactivate+i);
-      }
-  }
-  */
-
-  // c4. GNB_CU_TNL_Association_To_Add_List
-  /*
-  asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC4);
-  ieC4->id                        = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Add_List;
-  ieC4->criticality               = F1AP_Criticality_reject;
-  ieC4->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_GNB_CU_TNL_Association_To_Add_List;
-
-  for (int i=0; i<1; i++) {
-    asn1cSequenceAdd(ieC4->value.choice.GNB_CU_TNL_Association_To_Add_List.list,
-         F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs_t, gnb_cu_tnl_association_to_add;
-       gnb_cu_tnl_association_to_add->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Add_Item;
-       gnb_cu_tnl_association_to_add->criticality = F1AP_Criticality_reject;
-       gnb_cu_tnl_association_to_add->value.present = F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Add_Item;
-
-       // 4.1 GNB_CU_TNL_Association_To_Add_Item
-       F1AP_GNB_CU_TNL_Association_To_Add_Item_t *gnb_cu_tnl_association_to_add_item=
-         &gnb_cu_tnl_association_to_add_item_ies->value.choice.GNB_CU_TNL_Association_To_Add_Item;
-
-       // 4.1.1 tNLAssociationTransportLayerAddress
-       F1AP_CP_TransportLayerAddress_t *transportLayerAddress=;
-         gnb_cu_tnl_association_to_add->value.choice.GNB_CU_TNL_Association_To_Add_Item;
-
-       transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
-       TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
-
-       // memset((void *)&transportLayerAddress, 0, sizeof(F1AP_CP_TransportLayerAddress_t));
-       // transportLayerAddress.present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address_and_port;
-       // transportLayerAddress.choice.endpoint_IP_address_and_port = (F1AP_Endpoint_IP_address_and_port_t *)calloc(1, sizeof(F1AP_Endpoint_IP_address_and_port_t));
-       // TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress.choice.endpoint_IP_address_and_port.endpoint_IP_address);
-
-       // 4.1.2 tNLAssociationUsage
-       gnb_cu_tnl_association_to_add_item->tNLAssociationUsage = F1AP_TNLAssociationUsage_non_ue;
-  }
-  */
-
-  /*
-    // c5. GNB_CU_TNL_Association_To_Remove_List
-  asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC5);
-    ieC5->id                        = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Remove_List;
-    ieC5->criticality               = F1AP_Criticality_reject;
-    ieC5->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_GNB_CU_TNL_Association_To_Remove_List;
-    for (int i=0; i<1; i++) {
-      asn1cSequenceAdd(ieC5->value.choice.GNB_CU_TNL_Association_To_Remove_List.list,
-           F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs_t, gnb_cu_tnl_association_to_remove);
-      gnb_cu_tnl_association_to_remove->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Remove_Item;
-      gnb_cu_tnl_association_to_remove->criticality = F1AP_Criticality_reject;
-      gnb_cu_tnl_association_to_remove->value.present = F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Remove_Item;
-
-         // 4.1 GNB_CU_TNL_Association_To_Remove_Item
-         F1AP_GNB_CU_TNL_Association_To_Remove_Item_t *gnb_cu_tnl_association_to_remove_item=
-     &gnb_cu_tnl_association_to_remove->value.choice.GNB_CU_TNL_Association_To_Remove_Item;
-
-         // 4.1.1 tNLAssociationTransportLayerAddress
-         F1AP_CP_TransportLayerAddress_t *transportLayerAddress=
-     &gnb_cu_tnl_association_to_remove_item->tNLAssociationTransportLayerAddress;
-         transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
-         TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
-
-         // memset((void *)&transportLayerAddress, 0, sizeof(F1AP_CP_TransportLayerAddress_t));
-         // transportLayerAddress.present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address_and_port;
-         // transportLayerAddress.choice.endpoint_IP_address_and_port = (F1AP_Endpoint_IP_address_and_port_t *)calloc(1, sizeof(F1AP_Endpoint_IP_address_and_port_t));
-         // TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress.choice.endpoint_IP_address_and_port.endpoint_IP_address);
-    }
-  */
-
-  /*
-    //mandatory
-   // c6. GNB_CU_TNL_Association_To_Update_List
-   asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC6);
-   ieC6->id                        = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Update_List;
-   ieC6->criticality               = F1AP_Criticality_reject;
-   ieC6->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_GNB_CU_TNL_Association_To_Update_List;
-
-   for (int i=0;  i<1; i++) {
-    asn1cSequenceAdd(ieC3->value.choice.GNB_CU_TNL_Association_To_Update_List.list,
-         F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs_t, gnb_cu_tnl_association_to_update);
-     gnb_cu_tnl_association_to_update->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Update_Item;
-     gnb_cu_tnl_association_to_update->criticality = F1AP_Criticality_reject;
-     gnb_cu_tnl_association_to_update->value.present = F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Update_Item;
-     // 4.1 GNB_CU_TNL_Association_To_Update_Item
-     F1AP_GNB_CU_TNL_Association_To_Update_Item_t *gnb_cu_tnl_association_to_update_item=
-       &gnb_cu_tnl_association_to_update->value.choice.GNB_CU_TNL_Association_To_Update_Item;
-     // 4.1.1 tNLAssociationTransportLayerAddress
-     F1AP_CP_TransportLayerAddress_t *transportLayerAddress=
-       &gnb_cu_tnl_association_to_update_item.tNLAssociationTransportLayerAddress;
-     transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
-     TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
-     // memset((void *)&transportLayerAddress, 0, sizeof(F1AP_CP_TransportLayerAddress_t));
-     // transportLayerAddress.present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address_and_port;
-     // transportLayerAddress.choice.endpoint_IP_address_and_port = (F1AP_Endpoint_IP_address_and_port_t *)calloc(1, sizeof(F1AP_Endpoint_IP_address_and_port_t));
-     // TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress.choice.endpoint_IP_address_and_port.endpoint_IP_address);
-     // 4.1.2 tNLAssociationUsage
-     if (1) {
-       gnb_cu_tnl_association_to_update_item.tNLAssociationUsage = (F1AP_TNLAssociationUsage_t *)calloc(1, sizeof(F1AP_TNLAssociationUsage_t));
-       *gnb_cu_tnl_association_to_update_item.tNLAssociationUsage = F1AP_TNLAssociationUsage_non_ue;
-     }
-   }
-  */
-
-  /*
-  // c7. Cells_to_be_Barred_List
-  asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC7);
-  ieC7->id                        = F1AP_ProtocolIE_ID_id_Cells_to_be_Barred_List;
-  ieC7->criticality               = F1AP_Criticality_reject;
-  ieC7->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Barred_List;
-
-  for (int i=0; i<1; i++) {
-    asn1cSequenceAdd(ieC7->value.choice.Cells_to_be_Barred_List.list,
-         F1AP_Cells_to_be_Barred_ItemIEs_t,cells_to_be_barred);
-   cells_to_be_barred->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
-   cells_to_be_barred->criticality = F1AP_Criticality_reject;
-   cells_to_be_barred->value.present = F1AP_Cells_to_be_Barred_ItemIEs__value_PR_Cells_to_be_Barred_Item;
-   // 7.1 cells to be Deactivated list item
-   F1AP_Cells_to_be_Barred_Item_t *cells_to_be_barred_item=
-     &cells_to_be_barred_item_ies->value.choice.Cells_to_be_Barred_Item;
-   // - nRCGI
-   addnRCGI(cells_to_be_barred_item->nRCGI, f1ap_gnb_cu_configuration_update->cells_to_activate+i);
-   // 7.2 cellBarred
-   cells_to_be_barred_item->cellBarred = F1AP_CellBarred_not_barred;
-  }
-  */
-
-  /*
-   // c8. Protected_EUTRA_Resources_List
-  asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC8);
-   ieC8->id                        = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
-   ieC8->criticality               = F1AP_Criticality_reject;
-   ieC8->value.present             = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Protected_EUTRA_Resources_List;
-
-   for (int i=0; i<1; i++) {
-     asn1cSequenceAdd(ieC8->value.choice.Protected_EUTRA_Resources_List.list,
-          F1AP_Protected_EUTRA_Resources_ItemIEs_t, protected_eutra_resources);
-     // 8.1 SpectrumSharingGroupID
-     protected_eutra_resources->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
-     protected_eutra_resources->criticality = F1AP_Criticality_reject;
-     protected_eutra_resources->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_Protected_EUTRA_Resources_Item;
-     ((F1AP_Protected_EUTRA_Resources_Item_t *)&protected_eutra_resources->value.choice.Protected_EUTRA_Resources_Item)->spectrumSharingGroupID = 123L;
-     memset(&protected_eutra_resources->value.choice.Protected_EUTRA_Resources_Item,0,
-            sizeof(F1AP_Protected_EUTRA_Resources_Item_t));
-
-     asn1cSequenceAdd(protected_eutra_resources->value.choice.ListofEUTRACellsinGNBDUCoordination.list,
-          F1AP_Served_EUTRA_Cells_Information_t, served_eutra_cells_information);
-      memset((void *)&served_eutra_cells_information, 0, sizeof(F1AP_Served_EUTRA_Cells_Information_t));
-
-      F1AP_EUTRA_Mode_Info_t *eUTRA_Mode_Info=
-  &served_eutra_cells_information.eUTRA_Mode_Info;
-
-      // eUTRAFDD
-      eUTRA_Mode_Info->present = F1AP_EUTRA_Mode_Info_PR_eUTRAFDD;
-      F1AP_EUTRA_FDD_Info_t *eutra_fdd_info = (F1AP_EUTRA_FDD_Info_t *)calloc(1, sizeof(F1AP_EUTRA_FDD_Info_t));
-      eutra_fdd_info->uL_offsetToPointA = 123L;
-      eutra_fdd_info->dL_offsetToPointA = 456L;
-      eUTRA_Mode_Info.choice.eUTRAFDD = eutra_fdd_info;
-
-      // eUTRATDD
-      // eUTRA_Mode_Info.present = F1AP_EUTRA_Mode_Info_PR_eUTRATDD;
-      // F1AP_EUTRA_TDD_Info_t *eutra_tdd_info;
-      // eutra_tdd_info = (F1AP_EUTRA_TDD_Info_t *)calloc(1, sizeof(F1AP_EUTRA_TDD_Info_t));
-      // eutra_tdd_info->uL_offsetToPointA = 123L;
-      // eutra_tdd_info->dL_offsetToPointA = 456L;
-      // eUTRA_Mode_Info.choice.eUTRATDD = eutra_tdd_info;
-
-      OCTET_STRING_fromBuf(&served_eutra_cells_information.protectedEUTRAResourceIndication, "asdsa1d32sa1d31asd31as",
-                      strlen("asdsa1d32sa1d31asd31as"));
-   }
-  */
-
   /* encode */
   if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
     LOG_E(F1AP, "Failed to encode F1 gNB-CU CONFIGURATION UPDATE\n");
diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c
index 09b36510351b8932ee5f3b399ac7704023c2d840..1710596a0ed7e849165eb9b113a4d597f08d17f2 100644
--- a/openair2/F1AP/f1ap_cu_task.c
+++ b/openair2/F1AP/f1ap_cu_task.c
@@ -123,12 +123,7 @@ void *F1AP_CU_task(void *arg) {
   eth_params_t *IPaddrs;
 
   // Hardcoded instance id!
-  if (RC.nrrrc &&
-      (RC.nrrrc[0]->node_type == ngran_gNB_CU ||
-       RC.nrrrc[0]->node_type == ngran_gNB_CUCP ) )
-    IPaddrs=&RC.nrrrc[0]->eth_params_s;
-  else
-    IPaddrs=&RC.rrc[0]->eth_params_s;
+  IPaddrs = &RC.nrrrc[0]->eth_params_s;
 
   cu_task_send_sctp_init_req(0, IPaddrs->my_addr);
 
diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c
index d609cb98cbe3cf392a2b6ea76677011a697794f0..cdd97e93671f96133a7f10358380535cf05bf3e7 100644
--- a/openair2/F1AP/f1ap_cu_ue_context_management.c
+++ b/openair2/F1AP/f1ap_cu_ue_context_management.c
@@ -39,7 +39,6 @@
 
 #include "rrc_extern.h"
 #include "rrc_eNB_UE_context.h"
-#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
 #include "rrc_eNB_S1AP.h"
 #include "rrc_eNB_GTPV1U.h"
 #include "openair2/RRC/NR/rrc_gNB_NGAP.h"
@@ -959,49 +958,15 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t       instance,
   protocol_ctxt_t ctxt;
   PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, instance, ENB_FLAG_YES, rnti, 0, 0, instance);
 
-  if (f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB) {
-    struct rrc_gNB_ue_context_s *ue_context_p =
-      rrc_gNB_get_ue_context(RC.nrrrc[instance], rnti);
-
-    if (ue_context_p) {
-      MessageDef *msg = itti_alloc_new_message(TASK_CU_F1, 0, NGAP_UE_CONTEXT_RELEASE_COMPLETE);
-      NGAP_UE_CONTEXT_RELEASE_COMPLETE(msg).gNB_ue_ngap_id = ue_context_p->ue_context.gNB_ue_ngap_id;
-      itti_send_msg_to_task(TASK_NGAP, instance, msg);
-      rrc_gNB_remove_ue_context(&ctxt, RC.nrrrc[instance], ue_context_p);
-    } else {
-      LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
-    }
+  struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], rnti);
 
+  if (ue_context_p) {
+    MessageDef *msg = itti_alloc_new_message(TASK_CU_F1, 0, NGAP_UE_CONTEXT_RELEASE_COMPLETE);
+    NGAP_UE_CONTEXT_RELEASE_COMPLETE(msg).gNB_ue_ngap_id = ue_context_p->ue_context.gNB_ue_ngap_id;
+    itti_send_msg_to_task(TASK_NGAP, instance, msg);
+    rrc_gNB_remove_ue_context(&ctxt, RC.nrrrc[instance], ue_context_p);
   } else {
-    struct rrc_eNB_ue_context_s *ue_context_p =
-      rrc_eNB_get_ue_context(RC.rrc[instance], rnti);
-
-    if (ue_context_p) {
-      /* The following is normally done in the function rrc_rx_tx() */
-      rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_CPLT(instance,
-          ue_context_p->ue_context.eNB_ue_s1ap_id);
-      rrc_eNB_send_GTPV1U_ENB_DELETE_TUNNEL_REQ(instance, ue_context_p);
-
-      // erase data of GTP tunnels in UE context
-      for (int e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) {
-        ue_context_p->ue_context.enb_gtp_teid[e_rab] = 0;
-        memset(&ue_context_p->ue_context.enb_gtp_addrs[e_rab],
-               0, sizeof(ue_context_p->ue_context.enb_gtp_addrs[e_rab]));
-        ue_context_p->ue_context.enb_gtp_ebi[e_rab]  = 0;
-      }
-
-      struct rrc_ue_s1ap_ids_s *rrc_ue_s1ap_ids =
-        rrc_eNB_S1AP_get_ue_ids(RC.rrc[instance], 0,
-                                ue_context_p->ue_context.eNB_ue_s1ap_id);
-
-      if (rrc_ue_s1ap_ids)
-        rrc_eNB_S1AP_remove_ue_ids(RC.rrc[instance], rrc_ue_s1ap_ids);
-
-      /* trigger UE release in RRC */
-      rrc_eNB_remove_ue_context(&ctxt, RC.rrc[instance], ue_context_p);
-    } else {
-      LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
-    }
+    LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
   }
 
   pdcp_remove_UE(&ctxt);
diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c
index d7e32d9dafb10ab244147c061c14905af23e0518..81c88ad04464d2a7e788a5ad4d145cdc183c3a9c 100644
--- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c
+++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c
@@ -58,38 +58,19 @@
 
 #include "openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h"
 
-int DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance_t       instance,
-    uint32_t         assoc_id,
-    uint32_t         stream,
-    F1AP_F1AP_PDU_t *pdu);
-
 /*  DL RRC Message Transfer */
 int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t       instance,
                                       uint32_t         assoc_id,
                                       uint32_t         stream,
                                       F1AP_F1AP_PDU_t *pdu) {
-  if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
-    LOG_I(F1AP, "node is gNB DU, call DU_handle_DL_NR_RRC_MESSAGE_TRANSFER \n");
-    return DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance, assoc_id, stream, pdu);
-  }
-
-  LOG_W(F1AP, "DU_handle_DL_RRC_MESSAGE_TRANSFER is a big race condition with rrc \n");
   F1AP_DLRRCMessageTransfer_t    *container;
   F1AP_DLRRCMessageTransferIEs_t *ie;
   uint64_t        cu_ue_f1ap_id;
   uint64_t        du_ue_f1ap_id;
   int             executeDuplication;
-  sdu_size_t      rrc_dl_sdu_len;
   //uint64_t        subscriberProfileIDforRFP;
   //uint64_t        rAT_FrequencySelectionPriority;
   DevAssert(pdu != NULL);
-
-  if (stream != 0) {
-    LOG_E(F1AP, "[SCTP %d] Received F1 on stream != 0 (%d)\n",
-          assoc_id, stream);
-    return -1;
-  }
-
   container = &pdu->choice.initiatingMessage->value.choice.DLRRCMessageTransfer;
   /* GNB_CU_UE_F1AP_ID */
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
@@ -102,8 +83,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t       instance,
   du_ue_f1ap_id = ie->value.choice.GNB_DU_UE_F1AP_ID;
   LOG_D(F1AP, "du_ue_f1ap_id %lu associated with UE RNTI %x \n",
         du_ue_f1ap_id,
-        f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id));
-  // this should be the one transmitted via initial ul rrc message transfer
+        f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id)); // this should be the one transmitted via initial ul rrc message transfer
 
   if (f1ap_du_add_cu_ue_id(instance,du_ue_f1ap_id, cu_ue_f1ap_id) < 0 ) {
     LOG_E(F1AP, "Failed to find the F1AP UID \n");
@@ -138,8 +118,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t       instance,
   /* RRC Container */
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
                              F1AP_ProtocolIE_ID_id_RRCContainer, true);
-  rrc_dl_sdu_len = ie->value.choice.RRCContainer.size;
-
   /* optional */
   /* RAT_FrequencyPriorityInformation */
   if (0) {
@@ -161,359 +139,25 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t       instance,
     }
   }
 
+  f1ap_dl_rrc_message_t dl_rrc = {
+    .rrc_container_length = ie->value.choice.RRCContainer.size,
+    .rrc_container = ie->value.choice.RRCContainer.buf,
+    .rnti = f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id),
+    .srb_id = srb_id
+  };
+  int rc = dl_rrc_message(instance, &dl_rrc);
+  if (rc == 0)
+    return 0; /* has been handled, otherwise continue below */
+
   // decode RRC Container and act on the message type
   AssertFatal(srb_id<3,"illegal srb_id\n");
-  protocol_ctxt_t ctxt;
-  ctxt.rntiMaybeUEid = f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
-  ctxt.instance = instance;
-  ctxt.module_id = instance;
-  ctxt.enb_flag  = 1;
-  struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.instance], ctxt.rntiMaybeUEid);
-
-  if (srb_id == 0) {
-    LTE_DL_CCCH_Message_t *dl_ccch_msg=NULL;
-    asn_dec_rval_t dec_rval;
-    dec_rval = uper_decode(NULL,
-                           &asn_DEF_LTE_DL_CCCH_Message,
-                           (void **)&dl_ccch_msg,
-                           ie->value.choice.RRCContainer.buf,
-                           rrc_dl_sdu_len,0,0);
-    AssertFatal(dec_rval.code == RC_OK, "could not decode F1AP message\n");
-
-    switch (dl_ccch_msg->message.choice.c1.present) {
-      case LTE_DL_CCCH_MessageType__c1_PR_NOTHING:
-        LOG_I(F1AP, "Received PR_NOTHING on DL-CCCH-Message\n");
-        break;
-
-      case LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishment:
-        LOG_I(F1AP,
-              "Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishment\n");
-        break;
-
-      case LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentReject:
-        LOG_I(F1AP,
-              "Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishmentReject\n");
-        break;
-
-      case LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionReject:
-        LOG_I(F1AP,
-              "Logical Channel DL-CCCH (SRB0), Received RRCConnectionReject \n");
-        break;
-
-      case LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionSetup: {
-        LOG_I(F1AP,
-              "Logical Channel DL-CCCH (SRB0), Received RRCConnectionSetup DU_ID %lx/RNTI %x\n",
-              du_ue_f1ap_id,
-              f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id));
-        // Get configuration
-        LTE_RRCConnectionSetup_t *rrcConnectionSetup = &dl_ccch_msg->message.choice.c1.choice.rrcConnectionSetup;
-        AssertFatal(rrcConnectionSetup!=NULL,"rrcConnectionSetup is null\n");
-        LTE_RadioResourceConfigDedicated_t *radioResourceConfigDedicated = &rrcConnectionSetup->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r8.radioResourceConfigDedicated;
-        // get SRB logical channel information
-        LTE_SRB_ToAddModList_t *SRB_configList = radioResourceConfigDedicated->srb_ToAddModList;
-        AssertFatal(SRB_configList!=NULL,"SRB_configList is null\n");
-        LTE_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
-
-        for (int cnt = 0; cnt < (SRB_configList)->list.count; cnt++) {
-          if ((SRB_configList)->list.array[cnt]->srb_Identity == 1) {
-           LTE_SRB_ToAddMod_t * SRB1_config = (SRB_configList)->list.array[cnt];
-
-            if (SRB1_config->logicalChannelConfig) {
-              if (SRB1_config->logicalChannelConfig->present ==
-                  LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) {
-                SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue;
-              } else {
-                SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
-              }
-            } else {
-              SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
-            }
-          }
-        } // for
-
-        rrc_rlc_config_asn1_req(&ctxt,
-                                SRB_configList,
-                                (LTE_DRB_ToAddModList_t *) NULL,
-                                (LTE_DRB_ToReleaseList_t *) NULL
-                                , (LTE_PMCH_InfoList_r9_t *) NULL,
-                                0,0
-                               );
-        // This should be somewhere in the f1ap_cudu_ue_inst_t
-        /*int macrlc_instance = 0;
-
-        rnti_t rnti = f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
-        struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[macrlc_instance],rnti);
-        */
-        eNB_RRC_UE_t *ue_p = &ue_context_p->ue_context;
-        AssertFatal(ue_p->Srb0.Active == 1,"SRB0 is not active\n");
-        memcpy((void *)ue_p->Srb0.Tx_buffer.Payload,
-               (void *)ie->value.choice.RRCContainer.buf,
-               rrc_dl_sdu_len); // ie->value.choice.RRCContainer.size
-        ue_p->Srb0.Tx_buffer.payload_size = rrc_dl_sdu_len;
-        LTE_MAC_MainConfig_t    *mac_MainConfig  = NULL;
-
-        if (radioResourceConfigDedicated->mac_MainConfig)
-          mac_MainConfig = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue;
-        rrc_mac_config_req_eNB_t tmp = {0};
-        tmp.rnti = ctxt.rntiMaybeUEid;
-        tmp.physicalConfigDedicated = radioResourceConfigDedicated->physicalConfigDedicated;
-        tmp.mac_MainConfig = mac_MainConfig;
-        tmp.logicalChannelIdentity = 1;
-        tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
-        rrc_mac_config_req_eNB(ctxt.instance, &tmp);
-        break;
-      } // case
-
-      default:
-        AssertFatal(1==0,
-                    "Unknown message\n");
-        break;
-    }// switch case
-
-    return(0);
-  } else if (srb_id == 1) {
-    LTE_DL_DCCH_Message_t *dl_dcch_msg=NULL;
-    asn_dec_rval_t dec_rval;
-    dec_rval = uper_decode(NULL,
-                           &asn_DEF_LTE_DL_DCCH_Message,
-                           (void **)&dl_dcch_msg,
-                           &ie->value.choice.RRCContainer.buf[1], // buf[0] includes the pdcp header
-                           rrc_dl_sdu_len,0,0);
-
-    if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0))
-      LOG_E(F1AP," Failed to decode DL-DCCH (%zu bytes)\n",dec_rval.consumed);
-    else
-      LOG_D(F1AP, "Received message: present %d and c1 present %d\n",
-            dl_dcch_msg->message.present, dl_dcch_msg->message.choice.c1.present);
-
-    if (dl_dcch_msg->message.present == LTE_DL_DCCH_MessageType_PR_c1) {
-      switch (dl_dcch_msg->message.choice.c1.present) {
-        case LTE_DL_DCCH_MessageType__c1_PR_NOTHING:
-          LOG_I(F1AP, "Received PR_NOTHING on DL-DCCH-Message\n");
-          return 0;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_dlInformationTransfer:
-          LOG_I(F1AP,"Received NAS DL Information Transfer\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000:
-          LOG_I(F1AP,"Received NAS sfbParametersResponseCDMA2000\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_handoverFromEUTRAPreparationRequest:
-          LOG_I(F1AP,"Received NAS andoverFromEUTRAPreparationRequest\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_mobilityFromEUTRACommand:
-          LOG_I(F1AP,"Received NAS mobilityFromEUTRACommand\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration:
-          // handle RRCConnectionReconfiguration
-          LOG_I(F1AP,
-                "Logical Channel DL-DCCH (SRB1), Received RRCConnectionReconfiguration DU_ID %lx/RNTI %x\n",
-                du_ue_f1ap_id,
-                f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id));
-          LTE_RRCConnectionReconfiguration_t *rrcConnectionReconfiguration = &dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration;
-
-          if (rrcConnectionReconfiguration->criticalExtensions.present == LTE_RRCConnectionReconfiguration__criticalExtensions_PR_c1) {
-            if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present ==
-                LTE_RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) {
-              LTE_RRCConnectionReconfiguration_r8_IEs_t *rrcConnectionReconfiguration_r8 =
-                &rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8;
-
-              if (rrcConnectionReconfiguration_r8->mobilityControlInfo) {
-                LOG_I(F1AP, "Mobility Control Information is present\n");
-                AssertFatal(1==0,"Can't handle this yet in DU\n");
-              }
-
-              if (rrcConnectionReconfiguration_r8->measConfig != NULL) {
-                LOG_I(F1AP, "Measurement Configuration is present\n");
-              }
-
-              if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated) {
-                LOG_I(F1AP, "Radio Resource Configuration is present\n");
-                uint8_t DRB2LCHAN[8];
-                long drb_id;
-                int i;
-                LTE_DRB_ToAddModList_t  *DRB_configList  = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->drb_ToAddModList;
-                LTE_SRB_ToAddModList_t  *SRB_configList  = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->srb_ToAddModList;
-                LTE_DRB_ToReleaseList_t *DRB_ReleaseList = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->drb_ToReleaseList;
-                LTE_MAC_MainConfig_t    *mac_MainConfig  = NULL;
-
-                for (i = 0; i< 8; i++) {
-                  DRB2LCHAN[i] = 0;
-                }
-
-                if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig) {
-                  LOG_D(F1AP, "MAC Main Configuration is present\n");
-                  mac_MainConfig = &rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue;
-
-                  /* CDRX Configuration */
-                  if (mac_MainConfig->drx_Config == NULL) {
-                    LOG_W(F1AP, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n");
-                  } else {
-                    rrc_mac_drx_config_req_t req = {.rnti = ctxt.rntiMaybeUEid, .drx_Configuration = mac_MainConfig->drx_Config};
-                    /* Send DRX configuration to MAC task to configure timers of local UE context */
-                    eNB_Config_Local_DRX(instance, &req);
-                    LOG_D(F1AP, "DRX configured in MAC Main Configuration for RRC Connection Reconfiguration\n");
-                  }
-
-                  /* End of CDRX configuration */
-                }
-
-                LTE_MeasGapConfig_t     *measGapConfig   = NULL;
-                struct LTE_PhysicalConfigDedicated *physicalConfigDedicated = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated->physicalConfigDedicated;
-                rrc_rlc_config_asn1_req(
-                  &ctxt,
-                  SRB_configList, // NULL,  //LG-RK 14/05/2014 SRB_configList,
-                  DRB_configList,
-                  DRB_ReleaseList, (LTE_PMCH_InfoList_r9_t *) NULL, 0, 0
-                );
-
-                if (SRB_configList != NULL) {
-                  for (i = 0; (i < SRB_configList->list.count) && (i < 3); i++) {
-                    if (SRB_configList->list.array[i]->srb_Identity == 1 ) {
-                      ue_context_p->ue_context.Srb1.Active=1;
-                    } else if (SRB_configList->list.array[i]->srb_Identity == 2 )  {
-                      ue_context_p->ue_context.Srb2.Active=1;
-                      ue_context_p->ue_context.Srb2.Srb_info.Srb_id=2;
-                      LOG_I(F1AP, "[DU %ld] SRB2 is now active\n",ctxt.instance);
-                    } else {
-                      LOG_W(F1AP, "[DU %ld] invalid SRB identity %ld\n",ctxt.instance,
-                            SRB_configList->list.array[i]->srb_Identity);
-                    }
-                  }
-                }
-
-                if (DRB_configList != NULL) {
-                  for (i = 0; i < DRB_configList->list.count; i++) {  // num max DRB (11-3-8)
-                    if (DRB_configList->list.array[i]) {
-                      drb_id = (int)DRB_configList->list.array[i]->drb_Identity;
-                      LOG_I(F1AP,
-                            "[DU %ld] Logical Channel UL-DCCH, Received RRCConnectionReconfiguration for UE rnti %lx, reconfiguring DRB %d/LCID %d\n",
-                            ctxt.instance,
-                            ctxt.rntiMaybeUEid,
-                            (int)DRB_configList->list.array[i]->drb_Identity,
-                            (int)*DRB_configList->list.array[i]->logicalChannelIdentity);
-
-                      if (ue_context_p->ue_context.DRB_active[drb_id] == 0) {
-                        ue_context_p->ue_context.DRB_active[drb_id] = 1;
-
-                        if (DRB_configList->list.array[i]->logicalChannelIdentity) {
-                          DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity;
-                        }
-                        rrc_mac_config_req_eNB_t tmp = {0};
-                        tmp.rnti = ue_context_p->ue_context.rnti;
-                        tmp.physicalConfigDedicated = physicalConfigDedicated;
-                        tmp.mac_MainConfig = mac_MainConfig;
-                        tmp.logicalChannelIdentity = DRB2LCHAN[i];
-                        tmp.logicalChannelConfig = DRB_configList->list.array[i]->logicalChannelConfig;
-                        tmp.measGapConfig = measGapConfig;
-                        rrc_mac_config_req_eNB(ctxt.instance, &tmp);
-                      }
-                    } else {        // remove LCHAN from MAC/PHY
-                      AssertFatal(1==0,"Can't handle this yet in DU\n");
-                    }
-                  }
-                }
-              }
-            }
-          }
-
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_rrcConnectionRelease:
-          // handle RRCConnectionRelease
-          LOG_I(F1AP, "Received RRCConnectionRelease\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_securityModeCommand:
-          LOG_I(F1AP, "Received securityModeCommand\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry:
-          LOG_I(F1AP, "Received ueCapabilityEnquiry\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_counterCheck:
-        case LTE_DL_DCCH_MessageType__c1_PR_loggedMeasurementConfiguration_r10:
-        case LTE_DL_DCCH_MessageType__c1_PR_rnReconfiguration_r10:
-        case LTE_DL_DCCH_MessageType__c1_PR_spare1:
-        case LTE_DL_DCCH_MessageType__c1_PR_spare2:
-        case LTE_DL_DCCH_MessageType__c1_PR_spare3:
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_ueInformationRequest_r9:
-          LOG_I(F1AP, "Received ueInformationRequest_r9\n");
-          break;
-
-        case LTE_DL_DCCH_MessageType__c1_PR_rrcConnectionResume_r13:
-          LOG_I(F1AP, "Received rrcConnectionResume_r13\n");
-      }
-    }
-  } else if (srb_id == 2) {
-  }
-
-  LOG_I(F1AP, "Received DL RRC Transfer on srb_id %ld\n", srb_id);
-  rlc_op_status_t    rlc_status;
-  bool               ret             = true;
-  mem_block_t       *pdcp_pdu_p      = NULL;
-  pdcp_pdu_p = get_free_mem_block(rrc_dl_sdu_len, __func__);
-
-  //LOG_I(F1AP, "PRRCContainer size %lu:", ie->value.choice.RRCContainer.size);
-  //for (int i = 0; i < ie->value.choice.RRCContainer.size; i++)
-  //  printf("%02x ", ie->value.choice.RRCContainer.buf[i]);
-
-  //printf (", PDCP PDU size %d:", rrc_dl_sdu_len);
-  //for (int i=0;i<rrc_dl_sdu_len;i++) printf("%2x ",pdcp_pdu_p->data[i]);
-  //printf("\n");
-
-  if (pdcp_pdu_p != NULL) {
-    memset(pdcp_pdu_p->data, 0, rrc_dl_sdu_len);
-    memcpy(&pdcp_pdu_p->data[0], ie->value.choice.RRCContainer.buf, rrc_dl_sdu_len);
-    rlc_status = rlc_data_req(&ctxt
-                              , 1
-                              , MBMS_FLAG_NO
-                              , srb_id
-                              , 0
-                              , 0
-                              , rrc_dl_sdu_len
-                              , pdcp_pdu_p
-                              ,NULL
-                              ,NULL
-                             );
-
-    switch (rlc_status) {
-      case RLC_OP_STATUS_OK:
-        //LOG_I(F1AP, "Data sending request over RLC succeeded!\n");
-        ret=true;
-        break;
-
-      case RLC_OP_STATUS_BAD_PARAMETER:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
-        ret= false;
-        break;
-
-      case RLC_OP_STATUS_INTERNAL_ERROR:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
-        ret= false;
-        break;
-
-      case RLC_OP_STATUS_OUT_OF_RESSOURCES:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
-        ret= false;
-        break;
-
-      default:
-        LOG_W(F1AP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
-        ret= false;
-        break;
-    } // switch case
-
-    return ret;
-  } // if pdcp_pdu_p
-
+  MessageDef *msg = itti_alloc_new_message(TASK_DU_F1, 0, NR_DU_RRC_DL_INDICATION);
+  NRDuDlReq_t *req=&NRDuDlReq(msg);
+  req->rnti=f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
+  req->srb_id=srb_id;
+  req->buf= get_free_mem_block( ie->value.choice.RRCContainer.size, __func__);
+  memcpy(req->buf->data, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
+  itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
   return 0;
 }
 
@@ -839,119 +483,3 @@ int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(instance_t instance,
   f1ap_itti_send_sctp_data_req(false, instance, buffer, len, getCxt(DUtype, instance)->default_sctp_stream_id);
   return 0;
 }
-
-/*  DL NR RRC Message Transfer */
-int DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance_t       instance,
-    uint32_t         assoc_id,
-    uint32_t         stream,
-    F1AP_F1AP_PDU_t *pdu) {
-  LOG_D(F1AP, "DU_handle_DL_NR_RRC_MESSAGE_TRANSFER \n");
-  F1AP_DLRRCMessageTransfer_t    *container;
-  F1AP_DLRRCMessageTransferIEs_t *ie;
-  uint64_t        cu_ue_f1ap_id;
-  uint64_t        du_ue_f1ap_id;
-  int             executeDuplication;
-  //uint64_t        subscriberProfileIDforRFP;
-  //uint64_t        rAT_FrequencySelectionPriority;
-  DevAssert(pdu != NULL);
-  container = &pdu->choice.initiatingMessage->value.choice.DLRRCMessageTransfer;
-  /* GNB_CU_UE_F1AP_ID */
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
-  cu_ue_f1ap_id = ie->value.choice.GNB_CU_UE_F1AP_ID;
-  LOG_D(F1AP, "cu_ue_f1ap_id %lu \n", cu_ue_f1ap_id);
-  /* GNB_DU_UE_F1AP_ID */
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
-  du_ue_f1ap_id = ie->value.choice.GNB_DU_UE_F1AP_ID;
-  LOG_D(F1AP, "du_ue_f1ap_id %lu associated with UE RNTI %x \n",
-        du_ue_f1ap_id,
-        f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id)); // this should be the one transmitted via initial ul rrc message transfer
-
-  if (f1ap_du_add_cu_ue_id(instance,du_ue_f1ap_id, cu_ue_f1ap_id) < 0 ) {
-    LOG_E(F1AP, "Failed to find the F1AP UID \n");
-    //return -1;
-  }
-
-  /* optional */
-  /* oldgNB_DU_UE_F1AP_ID */
-  if (0) {
-    F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                               F1AP_ProtocolIE_ID_id_oldgNB_DU_UE_F1AP_ID, true);
-  }
-
-  /* mandatory */
-  /* SRBID */
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_SRBID, true);
-  uint64_t  srb_id = ie->value.choice.SRBID;
-  LOG_D(F1AP, "srb_id %lu \n", srb_id);
-
-  /* optional */
-  /* ExecuteDuplication */
-  if (0) {
-    F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                               F1AP_ProtocolIE_ID_id_ExecuteDuplication, true);
-    executeDuplication = ie->value.choice.ExecuteDuplication;
-    LOG_D(F1AP, "ExecuteDuplication %d \n", executeDuplication);
-  }
-
-  // issue in here
-  /* mandatory */
-  /* RRC Container */
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_RRCContainer, true);
-  // BK: need check
-  // create an ITTI message and copy SDU
-  //  message_p = itti_alloc_new_message (TASK_CU_F1, RRC_MAC_CCCH_DATA_IND);
-  //  memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
-  //  memcpy(RRC_MAC_CCCH_DATA_IND (message_p).sdu, ie->value.choice.RRCContainer.buf,
-  //         ccch_sdu_len);
-
-  //LOG_I(F1AP, "%s() RRCContainer size %lu: ", __func__, ie->value.choice.RRCContainer.size);
-  //for (int i = 0;i < ie->value.choice.RRCContainer.size; i++)
-  //  printf("%02x ", ie->value.choice.RRCContainer.buf[i]);
-  //printf("\n");
-
-  /* optional */
-  /* RAT_FrequencyPriorityInformation */
-  if (0) {
-    F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
-                               F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation, true);
-
-    switch(ie->value.choice.RAT_FrequencyPriorityInformation.present) {
-      case F1AP_RAT_FrequencyPriorityInformation_PR_eNDC:
-        //subscriberProfileIDforRFP = ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP;
-        break;
-
-      case F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN:
-        //rAT_FrequencySelectionPriority = ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority;
-        break;
-
-      default:
-        LOG_W(F1AP, "unhandled IE RAT_FrequencyPriorityInformation.present\n");
-        break;
-    }
-  }
-
-  f1ap_dl_rrc_message_t dl_rrc = {
-    .rrc_container_length = ie->value.choice.RRCContainer.size,
-    .rrc_container = ie->value.choice.RRCContainer.buf,
-    .rnti = f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id),
-    .srb_id = srb_id
-  };
-  int rc = dl_rrc_message(instance, &dl_rrc);
-  if (rc == 0)
-    return 0; /* has been handled, otherwise continue below */
-
-  // decode RRC Container and act on the message type
-  AssertFatal(srb_id<3,"illegal srb_id\n");
-  MessageDef *msg = itti_alloc_new_message(TASK_DU_F1, 0, NR_DU_RRC_DL_INDICATION);
-  NRDuDlReq_t *req=&NRDuDlReq(msg);
-  req->rnti=f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
-  req->srb_id=srb_id;
-  req->buf= get_free_mem_block( ie->value.choice.RRCContainer.size, __func__);
-  memcpy(req->buf->data, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
-  itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
-  return 0;
-}
diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c
index c11316e19b6bec3583838d1969684c015f9cea77..29b15ae2bbc9c87a567bc36e5410b86e8ce0cfc0 100644
--- a/openair2/F1AP/f1ap_du_task.c
+++ b/openair2/F1AP/f1ap_du_task.c
@@ -150,14 +150,7 @@ void *F1AP_DU_task(void *arg) {
       } break;
 
       case F1AP_UL_RRC_MESSAGE: // to rrc
-        if (RC.nrrrc && RC.nrrrc[0]->node_type == ngran_gNB_DU) {
-          DU_send_UL_NR_RRC_MESSAGE_TRANSFER(myInstance,
-                                             &F1AP_UL_RRC_MESSAGE(msg));
-        } else {
-          DU_send_UL_RRC_MESSAGE_TRANSFER(myInstance,
-                                          &F1AP_UL_RRC_MESSAGE(msg));
-        }
-
+        DU_send_UL_NR_RRC_MESSAGE_TRANSFER(myInstance, &F1AP_UL_RRC_MESSAGE(msg));
         break;
 
       case F1AP_UE_CONTEXT_SETUP_RESP:
diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c
index 23ab58c6edf4455c3e0d6264bcba77e044d7c1b8..85282f742cac5ee659afe0f99dd207e3203fd658 100644
--- a/openair2/F1AP/f1ap_du_ue_context_management.c
+++ b/openair2/F1AP/f1ap_du_ue_context_management.c
@@ -182,23 +182,6 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t       instance,
           drb_p->rlc_mode = RLC_MODE_TM;
           break;
       }
-
-      if (!(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)) {
-        transport_layer_addr_t addr;
-        memcpy(addr.buffer, &drb_p->up_ul_tnl[0].tl_address, sizeof(drb_p->up_ul_tnl[0].tl_address));
-        addr.length=sizeof(drb_p->up_ul_tnl[0].tl_address)*8;
-        drb_p->up_dl_tnl[0].teid = newGtpuCreateTunnel(INSTANCE_DEFAULT,
-                                                       f1ap_ue_context_setup_req->rnti,
-                                                       drb_p->drb_id,
-                                                       drb_p->drb_id,
-                                                       drb_p->up_ul_tnl[0].teid,
-                                                       -1, // no qfi
-                                                       addr,
-                                                       drb_p->up_ul_tnl[0].port,
-                                                       lteDURecvCb,
-                                                       NULL);
-        drb_p->up_dl_tnl_length++;
-      }
     }
   }
 
@@ -242,11 +225,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t       instance,
     LOG_W(F1AP, "can't find RRCContainer in UEContextSetupRequestIEs by id %ld \n", F1AP_ProtocolIE_ID_id_RRCContainer);
   }
 
-  if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)
-    itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
-  else
-    // in 4G, race conditon is to fix
-    DU_send_UE_CONTEXT_SETUP_RESPONSE(instance,  f1ap_ue_context_setup_req);
+  itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
 
   return 0;
 }
@@ -670,146 +649,6 @@ int DU_send_UE_CONTEXT_RELEASE_REQUEST(instance_t instance,
                                getCxt(false, instance)->default_sctp_stream_id);
   return 0;
 }
-/*int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t       instance,
-    uint32_t         assoc_id,
-    uint32_t         stream,
-    F1AP_F1AP_PDU_t *pdu) {
-  F1AP_UEContextReleaseCommand_t *container;
-  F1AP_UEContextReleaseCommandIEs_t *ie;
-  protocol_ctxt_t ctxt;
-  DevAssert(pdu);
-  container = &pdu->choice.initiatingMessage->value.choice.UEContextReleaseCommand;
-  // GNB_CU_UE_F1AP_ID
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
-  ctxt.rnti = f1ap_get_rnti_by_cu_id(DUtype, instance, ie->value.choice.GNB_CU_UE_F1AP_ID);
-  ctxt.instance = instance;
-  ctxt.module_id = instance;
-  ctxt.enb_flag  = 1;
-  // GNB_DU_UE_F1AP_ID
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
-  const rnti_t rnti = f1ap_get_rnti_by_du_id(DUtype, instance,
-                      ie->value.choice.GNB_DU_UE_F1AP_ID);
-  AssertFatal(ctxt.rnti == rnti,
-              "RNTI obtained through DU ID (%x) is different from CU ID (%x)\n",
-              rnti, ctxt.rnti);
-  int UE_out_of_sync = 0;
-  if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
-    UE_iterator(RC.nrmac[instance]->UE_info.list, UE) {
-      if (UE->rnti == rnti) {
-        UE_out_of_sync = 0;
-        break;
-      }
-    }
-    if (!UE)
-      LOG_E(F1AP,"Not found rnti: %x\n", rnti);
-  } else {
-    for (int n = 0; n < MAX_MOBILES_PER_ENB; ++n) {
-      if (RC.mac[instance]->UE_info.active[n] == true
-          && rnti == UE_RNTI(instance, n)) {
-        UE_out_of_sync = RC.mac[instance]->UE_info.UE_sched_ctrl[n].ul_out_of_sync;
-        break;
-      }
-    }
-  }
-
-  // We don't need the Cause
-  // Optional RRC Container: if present, send to UE
-  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_RRCContainer, false);
-
-  if (ie && !UE_out_of_sync) {
-    // RRC message and UE is reachable, send message
-    const sdu_size_t sdu_len = ie->value.choice.RRCContainer.size;
-    mem_block_t *pdu_p = NULL;
-    pdu_p = get_free_mem_block(sdu_len, __func__);
-    memcpy(&pdu_p->data[0], ie->value.choice.RRCContainer.buf, sdu_len);
-    rlc_op_status_t rlc_status = rlc_data_req(&ctxt
-                                 , 1
-                                 , MBMS_FLAG_NO
-                                 , 1 // SRB 1 correct?
-                                 , 0
-                                 , 0
-                                 , sdu_len
-                                 , pdu_p
-                                 ,NULL
-                                 ,NULL
-                                             );
-
-    switch (rlc_status) {
-      case RLC_OP_STATUS_OK:
-        break;
-
-      case RLC_OP_STATUS_BAD_PARAMETER:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
-        break;
-
-      case RLC_OP_STATUS_INTERNAL_ERROR:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
-        break;
-
-      case RLC_OP_STATUS_OUT_OF_RESSOURCES:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
-        break;
-
-      default:
-        LOG_W(F1AP, "RLC returned an unknown status code after F1AP placed "
-              "the order to send some data (Status Code:%d)\n", rlc_status);
-        break;
-    }
-  }
-
-  if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
-    // struct rrc_gNB_ue_context_s *ue_context_p;
-    f1ap_ue_context_release_cplt_t cplt;
-    cplt.rnti = ctxt.rnti;
-    DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance, &cplt);
-    return 0;
-  } else {
-    struct rrc_eNB_ue_context_s *ue_context_p;
-    ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.instance], ctxt.rnti);
-
-    if (ue_context_p && !UE_out_of_sync) {
-      // UE exists and is in sync so we start a timer before releasing the
-      //  connection
-      pthread_mutex_lock(&rrc_release_freelist);
-
-      for (uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
-        if (rrc_release_info.RRC_release_ctrl[release_num].flag == 0) {
-          if (ue_context_p->ue_context.ue_release_timer_s1 > 0)
-            rrc_release_info.RRC_release_ctrl[release_num].flag = 1;
-          else
-            rrc_release_info.RRC_release_ctrl[release_num].flag = 2;
-
-          rrc_release_info.RRC_release_ctrl[release_num].rnti = ctxt.rnti;
-          LOG_D(F1AP, "add rrc_release_info RNTI %x\n", ctxt.rnti);
-          // TODO: how to provide the correct MUI?
-          rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui = 0;
-          rrc_release_info.num_UEs++;
-          LOG_D(RRC,"Generate DLSCH Release send: index %d rnti %x mui %d flag %d \n",release_num,
-                ctxt.rnti, 0, rrc_release_info.RRC_release_ctrl[release_num].flag);
-          break;
-        }
-      }
-
-      pthread_mutex_unlock(&rrc_release_freelist);
-      ue_context_p->ue_context.ue_release_timer_s1 = 0;
-    } else if (ue_context_p && UE_out_of_sync) {
-      // UE exists and is out of sync, drop the connection
-      mac_eNB_rrc_ul_failure(instance, 0, 0, 0, rnti);
-    } else {
-      LOG_E(F1AP, "no ue_context for RNTI %x, acknowledging release\n", rnti);
-    }
-
-    // TODO send this once the connection has really been released
-    f1ap_ue_context_release_cplt_t cplt;
-    cplt.rnti = ctxt.rnti;
-    DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance, &cplt);
-    return 0;
-  }
-}*/
-
 
 int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t       instance,
     uint32_t         assoc_id,
@@ -817,7 +656,6 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t       instance,
     F1AP_F1AP_PDU_t *pdu) {
   F1AP_UEContextReleaseCommand_t *container;
   F1AP_UEContextReleaseCommandIEs_t *ie;
-  protocol_ctxt_t ctxt;
 
   /* ITTI message to NR-RRC for the case of gNB-DU */
   MessageDef                      *msg_p; // message to NR-RRC
@@ -830,159 +668,48 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t       instance,
   // GNB_CU_UE_F1AP_ID
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
                              F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
-  if(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU){
-    f1ap_ue_context_release_cmd->rnti = f1ap_get_rnti_by_cu_id(DUtype, instance, ie->value.choice.GNB_CU_UE_F1AP_ID);
-  }
-  else{
-    ctxt.rntiMaybeUEid = f1ap_get_rnti_by_cu_id(DUtype, instance, ie->value.choice.GNB_CU_UE_F1AP_ID);
-    ctxt.instance = instance;
-    ctxt.module_id = instance;
-    ctxt.enb_flag  = 1;
-  }
+  f1ap_ue_context_release_cmd->rnti = f1ap_get_rnti_by_cu_id(DUtype, instance, ie->value.choice.GNB_CU_UE_F1AP_ID);
   // GNB_DU_UE_F1AP_ID
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
                              F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
   const rnti_t rnti = f1ap_get_rnti_by_du_id(DUtype, instance,
                       ie->value.choice.GNB_DU_UE_F1AP_ID);
-  if(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU){
-    AssertFatal(f1ap_ue_context_release_cmd->rnti == rnti,
-            "RNTI obtained through DU ID (%x) is different from CU ID (%x)\n",
-            rnti, f1ap_ue_context_release_cmd->rnti);
-  }
-  else{
-    AssertFatal(ctxt.rntiMaybeUEid == rnti, "RNTI obtained through DU ID (%x) is different from CU ID (%lx)\n", rnti, ctxt.rntiMaybeUEid);
-  }
-  int UE_out_of_sync = 0;
-
-  if(RC.rrc && RC.rrc[instance]->node_type == ngran_eNB_DU){
-    for (int n = 0; n < MAX_MOBILES_PER_ENB; ++n) {
-      if (RC.mac[instance]->UE_info.active[n] == true
-          && rnti == UE_RNTI(instance, n)) {
-        UE_out_of_sync = RC.mac[instance]->UE_info.UE_sched_ctrl[n].ul_out_of_sync;
-        break;
-      }
-    }
-  }
+  AssertFatal(f1ap_ue_context_release_cmd->rnti == rnti, "RNTI obtained through DU ID (%x) is different from CU ID (%x)\n", rnti, f1ap_ue_context_release_cmd->rnti);
 
   // We don't need the Cause
   // Optional RRC Container: if present, send to UE
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
                              F1AP_ProtocolIE_ID_id_RRCContainer, false);
 
-  if (ie && !UE_out_of_sync && RC.rrc && RC.rrc[instance]->node_type == ngran_eNB_DU) {
-    // RRC message and UE is reachable, send message
-    const sdu_size_t sdu_len = ie->value.choice.RRCContainer.size;
-    mem_block_t *pdu_p = NULL;
-    pdu_p = get_free_mem_block(sdu_len, __func__);
-    memcpy(&pdu_p->data[0], ie->value.choice.RRCContainer.buf, sdu_len);
-    rlc_op_status_t rlc_status = rlc_data_req(&ctxt
-                                 , 1
-                                 , MBMS_FLAG_NO
-                                 , 1 // SRB 1 correct?
-                                 , 0
-                                 , 0
-                                 , sdu_len
-                                 , pdu_p
-                                 ,NULL
-                                 ,NULL
-                                             );
-
-    switch (rlc_status) {
-      case RLC_OP_STATUS_OK:
-        break;
-
-      case RLC_OP_STATUS_BAD_PARAMETER:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
-        break;
-
-      case RLC_OP_STATUS_INTERNAL_ERROR:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
-        break;
+  f1ap_ue_context_release_cmd->rrc_container = malloc(ie->value.choice.RRCContainer.size);
+  memcpy(f1ap_ue_context_release_cmd->rrc_container, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
 
-      case RLC_OP_STATUS_OUT_OF_RESSOURCES:
-        LOG_W(F1AP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
-        break;
-
-      default:
-        LOG_W(F1AP, "RLC returned an unknown status code after F1AP placed "
-              "the order to send some data (Status Code:%d)\n", rlc_status);
-        break;
-    }
-  }
-  else if(ie && RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
-    f1ap_ue_context_release_cmd->rrc_container = malloc(ie->value.choice.RRCContainer.size);
-    memcpy(f1ap_ue_context_release_cmd->rrc_container,
-        ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
-  }
-
-  if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
-    F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
-        F1AP_ProtocolIE_ID_id_Cause, true);
-    switch (ie->value.choice.Cause.present){
-    case  F1AP_Cause_PR_radioNetwork:
-      LOG_W (F1AP, "UE context release command cause is due to radioNetwork with specific code: %ld\n",ie->value.choice.Cause.choice.radioNetwork);
-      f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_RADIO_NETWORK;
-      break;
-    case F1AP_Cause_PR_transport:
-      LOG_W (F1AP, "UE context release command cause is due to transport with specific code: %ld\n",ie->value.choice.Cause.choice.transport);
-      f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_TRANSPORT;
-      break;
-    case F1AP_Cause_PR_protocol:
-      LOG_W (F1AP, "UE context release command cause is due to protocol with specific code: %ld\n",ie->value.choice.Cause.choice.protocol);
-      f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_PROTOCOL;
-      break;
-    case F1AP_Cause_PR_misc:
-      LOG_W (F1AP, "UE context release command cause is misc with specific code: %ld \n",ie->value.choice.Cause.choice.misc);
-      f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_MISC;
-      break;
-    default:
-      LOG_W(F1AP, "Unknown cause for UE context release command\n");
-      break;
-
-    }
-    itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
-    return 0;
-  } else {
-    struct rrc_eNB_ue_context_s *ue_context_p;
-    ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.instance], ctxt.rntiMaybeUEid);
-
-    if (ue_context_p && !UE_out_of_sync) {
-      // UE exists and is in sync so we start a timer before releasing the
-      //  connection
-      pthread_mutex_lock(&rrc_release_freelist);
-
-      for (uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
-        if (rrc_release_info.RRC_release_ctrl[release_num].flag == 0) {
-          if (ue_context_p->ue_context.ue_release_timer_s1 > 0)
-            rrc_release_info.RRC_release_ctrl[release_num].flag = 1;
-          else
-            rrc_release_info.RRC_release_ctrl[release_num].flag = 2;
-
-          rrc_release_info.RRC_release_ctrl[release_num].rnti = ctxt.rntiMaybeUEid;
-          LOG_D(F1AP, "add rrc_release_info RNTI %lx\n", ctxt.rntiMaybeUEid);
-          // TODO: how to provide the correct MUI?
-          rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui = 0;
-          rrc_release_info.num_UEs++;
-          LOG_D(RRC, "Generate DLSCH Release send: index %d rnti %lx mui %d flag %d \n", release_num, ctxt.rntiMaybeUEid, 0, rrc_release_info.RRC_release_ctrl[release_num].flag);
-          break;
-        }
-      }
-
-      pthread_mutex_unlock(&rrc_release_freelist);
-      ue_context_p->ue_context.ue_release_timer_s1 = 0;
-    } else if (ue_context_p && UE_out_of_sync) {
-      // UE exists and is out of sync, drop the connection
-      mac_eNB_rrc_ul_failure(instance, 0, 0, 0, rnti);
-    } else {
-      LOG_E(F1AP, "no ue_context for RNTI %x, acknowledging release\n", rnti);
-    }
+  F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextReleaseCommandIEs_t, ie, container,
+      F1AP_ProtocolIE_ID_id_Cause, true);
+  switch (ie->value.choice.Cause.present){
+  case  F1AP_Cause_PR_radioNetwork:
+    LOG_W (F1AP, "UE context release command cause is due to radioNetwork with specific code: %ld\n",ie->value.choice.Cause.choice.radioNetwork);
+    f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_RADIO_NETWORK;
+    break;
+  case F1AP_Cause_PR_transport:
+    LOG_W (F1AP, "UE context release command cause is due to transport with specific code: %ld\n",ie->value.choice.Cause.choice.transport);
+    f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_TRANSPORT;
+    break;
+  case F1AP_Cause_PR_protocol:
+    LOG_W (F1AP, "UE context release command cause is due to protocol with specific code: %ld\n",ie->value.choice.Cause.choice.protocol);
+    f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_PROTOCOL;
+    break;
+  case F1AP_Cause_PR_misc:
+    LOG_W (F1AP, "UE context release command cause is misc with specific code: %ld \n",ie->value.choice.Cause.choice.misc);
+    f1ap_ue_context_release_cmd->cause = F1AP_CAUSE_MISC;
+    break;
+  default:
+    LOG_W(F1AP, "Unknown cause for UE context release command\n");
+    break;
 
-    // TODO send this once the connection has really been released
-    f1ap_ue_context_release_cplt_t cplt;
-    cplt.rnti = ctxt.rntiMaybeUEid;
-    DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance, &cplt);
-    return 0;
   }
+  itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
+  return 0;
 }
 
 int DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
@@ -1199,22 +926,6 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t       instance,
         drb_p->rlc_mode = RLC_MODE_TM;
         break;
       }
-      if (!(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)) {
-        transport_layer_addr_t addr;
-          memcpy(addr.buffer, &drb_p->up_ul_tnl[0].tl_address, sizeof(drb_p->up_ul_tnl[0].tl_address));
-          addr.length=sizeof(drb_p->up_ul_tnl[0].tl_address)*8;
-          drb_p->up_dl_tnl[0].teid = newGtpuCreateTunnel(INSTANCE_DEFAULT,
-                                                         f1ap_ue_context_modification_req->rnti,
-                                                         drb_p->drb_id,
-                                                         drb_p->drb_id,
-                                                         drb_p->up_ul_tnl[0].teid,
-                                                         -1, // no qfi
-                                                         addr,
-                                                         drb_p->up_ul_tnl[0].port,
-                                                         lteDURecvCb,
-                                                         NULL);
-          drb_p->up_dl_tnl_length++;
-      }
     }
   }
   /* RRC Reconfiguration Complete indicator */
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 166980da14180615622baf67293bf0959df79c75..b7cbac42561001ece3bfce4996a190d6100b4c4d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -468,25 +468,9 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
     // check threshold
     if (UE_info->UE_sched_ctrl[UE_id].ul_failure_timer > 4000) {
       // note: probably ul_failure_timer should be less than UE radio link failure time(see T310/N310/N311)
-      if (NODE_IS_DU(RC.rrc[module_idP]->node_type)) {
-        MessageDef *m = itti_alloc_new_message(TASK_PHY_ENB, 0, F1AP_UE_CONTEXT_RELEASE_REQ);
-        F1AP_UE_CONTEXT_RELEASE_REQ(m).rnti = rnti;
-        F1AP_UE_CONTEXT_RELEASE_REQ(m).cause = F1AP_CAUSE_RADIO_NETWORK;
-        F1AP_UE_CONTEXT_RELEASE_REQ(m).cause_value = 1; // 1 = F1AP_CauseRadioNetwork_rl_failure
-        F1AP_UE_CONTEXT_RELEASE_REQ(m).rrc_container = NULL;
-        F1AP_UE_CONTEXT_RELEASE_REQ(m).rrc_container_length = 0;
-        itti_send_msg_to_task(TASK_DU_F1, module_idP, m);
-      } else {
-        // inform RRC of failure and clear timer
-        LOG_I(MAC, "UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC \n",
-              UE_id,
-              rnti);
-        mac_eNB_rrc_ul_failure(module_idP,
-                               CC_id,
-                               frameP,
-                               subframeP,
-                               rnti);
-      }
+      // inform RRC of failure and clear timer
+      LOG_I(MAC, "UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC \n", UE_id, rnti);
+      mac_eNB_rrc_ul_failure(module_idP, CC_id, frameP, subframeP, rnti);
 
       UE_info->UE_sched_ctrl[UE_id].ul_failure_timer = 0;
       UE_info->UE_sched_ctrl[UE_id].ul_out_of_sync   = 1;
@@ -973,14 +957,12 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
   } // end for loop on UE_id
 
 #if (!defined(PRE_SCD_THREAD))
-  if (!NODE_IS_DU(RC.rrc[module_idP]->node_type)) {
-    void rlc_tick(int, int);
-    PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP);
-    rlc_tick(frameP, subframeP);
-    pdcp_run(&ctxt);
-    pdcp_mbms_run(&ctxt);
-    rrc_rx_tx(&ctxt, CC_id);
-  }
+  void rlc_tick(int, int);
+  PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP);
+  rlc_tick(frameP, subframeP);
+  pdcp_run(&ctxt);
+  pdcp_mbms_run(&ctxt);
+  rrc_rx_tx(&ctxt, CC_id);
 #endif
 
   int do_fembms_si=0;
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 03ff38611a9f8f05b8cb4d9eb9f15549f44e8230..f1fefc6973c744374a9f892134001133fa6af3fe 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -138,35 +138,6 @@ extern int oai_exit;
 
 pthread_t pdcp_stats_thread_desc;
 
-bool cu_f1u_data_req(
-  protocol_ctxt_t  *ctxt_pP,
-  const srb_flag_t srb_flagP,
-  const rb_id_t rb_id,
-  const mui_t muiP,
-  const confirm_t confirmP,
-  const sdu_size_t sdu_buffer_size,
-  unsigned char *const sdu_buffer,
-  const pdcp_transmission_mode_t mode,
-  const uint32_t *const sourceL2Id,
-  const uint32_t *const destinationL2Id
-  ) {
-  mem_block_t *memblock = get_free_mem_block(sdu_buffer_size, __func__);
-  if (memblock == NULL) {
-    LOG_E(RLC, "%s:%d:%s: ERROR: get_free_mem_block failed\n", __FILE__, __LINE__, __FUNCTION__);
-    exit(1);
-  }
-  memcpy(memblock->data,sdu_buffer, sdu_buffer_size);
-  // weird rb id management in 4G, not fully understand (looks bad design)
-  // overcomplex: if i understand, on the interface DRB start at 4 because there can be SRB 0..3
-  // but it would be much simpler to use absolute numbering
-  // instead of this "srb flag" associated to these +/-4
-  int ret=pdcp_data_ind(ctxt_pP,srb_flagP, false, rb_id-4, sdu_buffer_size, memblock, NULL, NULL);
-  if (!ret) {
-    LOG_E(RLC, "%s:%d:%s: ERROR: pdcp_data_ind failed\n", __FILE__, __LINE__, __FUNCTION__);
-    /* what to do in case of failure? for the moment: nothing */
-  }
-  return ret;
-}
 void *pdcp_stats_thread(void *param) {
 
    FILE *fd;
@@ -204,31 +175,6 @@ uint64_t get_pdcp_optmask(void) {
   return pdcp_params.optmask;
 }
 
-rlc_op_status_t cu_send_to_du(const protocol_ctxt_t *const ctxt,
-			       const srb_flag_t srb_flag, const MBMS_flag_t MBMS_flag,
-			       const rb_id_t rb_id, const mui_t mui,
-			       confirm_t confirm, sdu_size_t size, mem_block_t *sdu,
-                               const uint32_t *const sourceID, const uint32_t *const destID) {
-  MessageDef  *message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB, 0, GTPV1U_TUNNEL_DATA_REQ,
-                                                        sizeof(gtpv1u_tunnel_data_req_t) +
-                                                        size + GTPU_HEADER_OVERHEAD_MAX );
-  AssertFatal(message_p != NULL, "OUT OF MEMORY");
-  gtpv1u_tunnel_data_req_t *req=&GTPV1U_TUNNEL_DATA_REQ(message_p);
-  req->buffer        = (uint8_t*)(req+1);
-  memcpy(req->buffer + GTPU_HEADER_OVERHEAD_MAX,
-	 sdu->data,
-	 size );
-  req->length        = size;
-  req->offset        = GTPU_HEADER_OVERHEAD_MAX;
-  req->ue_id = ctxt->rntiMaybeUEid;
-  req->bearer_id = rb_id+4;
-  LOG_D(PDCP, "%s() (drb %ld) sending message to gtp size %d\n",
-	__func__, rb_id, size);
-  extern instance_t CUuniqInstance;
-  itti_send_msg_to_task(TASK_GTPV1_U, CUuniqInstance, message_p);
-  return true;
-}
-
 //-----------------------------------------------------------------------------
 /*
  * If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
@@ -326,7 +272,7 @@ bool pdcp_data_req(protocol_ctxt_t  *ctxt_pP,
         LOG_UI(PDCP, "Before rlc_data_req 1, srb_flagP: %d, rb_idP: %ld \n", srb_flagP, rb_idP);
       }
 
-      rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)?MBMS_FLAG_NO:MBMS_FLAG_YES, rb_idP, muiP,
+      rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, MBMS_FLAG_YES, rb_idP, muiP,
                    confirmP, sdu_buffer_sizeP, pdcp_pdu_p,NULL,NULL);
     } else {
       rlc_status = RLC_OP_STATUS_OUT_OF_RESSOURCES;
@@ -488,98 +434,73 @@ bool pdcp_data_req(protocol_ctxt_t  *ctxt_pP,
                 "[MSG] PDCP DL %s PDU on rb_id %ld\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP);
 
     if ((pdcp_pdu_p!=NULL) && (srb_flagP == 0) && (ctxt_pP->enb_flag == 1)) {
-      LOG_D(PDCP, "pdcp data req on drb %ld, size %d, rnti %lx, node_type %d \n", rb_idP, pdcp_pdu_size, ctxt_pP->rntiMaybeUEid, RC.rrc ? RC.rrc[ctxt_pP->module_id]->node_type : -1);
-
-      if (ctxt_pP->enb_flag == ENB_FLAG_YES && NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-        LOG_E(PDCP, "Can't be DU, bad node type %d \n", RC.rrc[ctxt_pP->module_id]->node_type);
-        ret = false;
-      } else {
-        rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP,
-                     confirmP, pdcp_pdu_size, pdcp_pdu_p,sourceL2Id,
-                     destinationL2Id);
-        ret = false;
-        switch (rlc_status) {
-          case RLC_OP_STATUS_OK:
-            LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
-            ret=true;
-            break;
+      LOG_D(PDCP, "pdcp data req on drb %ld, size %d, rnti %lx\n", rb_idP, pdcp_pdu_size, ctxt_pP->rntiMaybeUEid);
+
+      rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP,
+                   confirmP, pdcp_pdu_size, pdcp_pdu_p,sourceL2Id,
+                   destinationL2Id);
+      ret = false;
+      switch (rlc_status) {
+        case RLC_OP_STATUS_OK:
+          LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
+          ret=true;
+          break;
 
-          case RLC_OP_STATUS_BAD_PARAMETER:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
-            break;
+        case RLC_OP_STATUS_BAD_PARAMETER:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
+          break;
 
-          case RLC_OP_STATUS_INTERNAL_ERROR:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
-            break;
+        case RLC_OP_STATUS_INTERNAL_ERROR:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
+          break;
 
-          case RLC_OP_STATUS_OUT_OF_RESSOURCES:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
-            break;
+        case RLC_OP_STATUS_OUT_OF_RESSOURCES:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
+          break;
 
-          default:
-            LOG_W(PDCP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
-            break;
-        } // switch case
-      } /* end if node_type is not DU */
+        default:
+          LOG_W(PDCP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
+          break;
+      } // switch case
     } else { // SRB
-      if (ctxt_pP->enb_flag == ENB_FLAG_YES && NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-        // DL transfer
-        MessageDef                            *message_p;
-        // Note: the acyual task must be TASK_PDCP_ENB, but this task is not created
-        message_p = itti_alloc_new_message (TASK_PDCP_ENB, 0, F1AP_DL_RRC_MESSAGE);
-        F1AP_DL_RRC_MESSAGE (message_p).rrc_container =  &pdcp_pdu_p->data[0] ;
-        F1AP_DL_RRC_MESSAGE (message_p).rrc_container_length = pdcp_pdu_size;
-        F1AP_DL_RRC_MESSAGE (message_p).gNB_CU_ue_id  = 0;
-        F1AP_DL_RRC_MESSAGE (message_p).gNB_DU_ue_id  = 0;
-        F1AP_DL_RRC_MESSAGE (message_p).old_gNB_DU_ue_id  = 0xFFFFFFFF; // unknown
-        F1AP_DL_RRC_MESSAGE(message_p).rnti = ctxt_pP->rntiMaybeUEid;
-        F1AP_DL_RRC_MESSAGE (message_p).srb_id = rb_idP;
-        F1AP_DL_RRC_MESSAGE (message_p).execute_duplication      = 1;
-        F1AP_DL_RRC_MESSAGE (message_p).RAT_frequency_priority_information.en_dc      = 0;
-        itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p);
-        //CU_send_DL_RRC_MESSAGE_TRANSFER(ctxt_pP->module_id, message_p);
-        LOG_I(PDCP, "Send F1AP_DL_RRC_MESSAGE with ITTI\n");
-        ret=true;
-      } else {
-        rlc_status = rlc_data_req(ctxt_pP
-                                  , srb_flagP
-                                  , MBMS_FLAG_NO
-                                  , rb_idP
-                                  , muiP
-                                  , confirmP
-                                  , pdcp_pdu_size
-                                  , pdcp_pdu_p
-                                  ,NULL
-                                  ,NULL
-                                 );
-
-        switch (rlc_status) {
-          case RLC_OP_STATUS_OK:
-            LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
-            ret=true;
-            break;
+      rlc_status = rlc_data_req(ctxt_pP
+                                , srb_flagP
+                                , MBMS_FLAG_NO
+                                , rb_idP
+                                , muiP
+                                , confirmP
+                                , pdcp_pdu_size
+                                , pdcp_pdu_p
+                                ,NULL
+                                ,NULL
+                               );
+
+      switch (rlc_status) {
+        case RLC_OP_STATUS_OK:
+          LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
+          ret=true;
+          break;
 
-          case RLC_OP_STATUS_BAD_PARAMETER:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
-            ret= false;
-            break;
+        case RLC_OP_STATUS_BAD_PARAMETER:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
+          ret= false;
+          break;
 
-          case RLC_OP_STATUS_INTERNAL_ERROR:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
-            ret= false;
-            break;
+        case RLC_OP_STATUS_INTERNAL_ERROR:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
+          ret= false;
+          break;
 
-          case RLC_OP_STATUS_OUT_OF_RESSOURCES:
-            LOG_W(PDCP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
-            ret= false;
-            break;
+        case RLC_OP_STATUS_OUT_OF_RESSOURCES:
+          LOG_W(PDCP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
+          ret= false;
+          break;
 
-          default:
-            LOG_W(PDCP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
-            ret= false;
-            break;
-        } // switch case
-      }
+        default:
+          LOG_W(PDCP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
+          ret= false;
+          break;
+      } // switch case
     }
   }
 
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index 944e641358d36c8997f21111a541808cb30df325..b4303d1fdd80108e4fc074801193c6db6179d7ef 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -420,10 +420,6 @@ pdcp_data_ind_func_t get_pdcp_data_ind_func(void);
 //-----------------------------------------------------------------------------
 int pdcp_fifo_flush_mbms_sdus                      ( const protocol_ctxt_t *const  ctxt_pP);
 int pdcp_fifo_read_input_mbms_sdus_fromtun       ( const protocol_ctxt_t *const  ctxt_pP);
-rlc_op_status_t cu_send_to_du(const protocol_ctxt_t *const ctxt_pP,
-			       const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP,
-			       const rb_id_t rb_idP, const mui_t muiP,
-			       confirm_t confirmP, sdu_size_t sdu_sizeP, mem_block_t *sdu_pP, const uint32_t *const, const uint32_t *const);
 
 /*
  * Following two types are utilized between NAS driver and PDCP
diff --git a/openair2/LAYER2/rlc_v2/rlc_oai_api.c b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
index 87c922246824a4b73c59a770ae256dc4c14e631d..d45640bbfa05bfd5309fd373cfbf5efa5af8cad5 100644
--- a/openair2/LAYER2/rlc_v2/rlc_oai_api.c
+++ b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
@@ -412,37 +412,6 @@ rb_found:
     T(T_ENB_RLC_UL,
       T_INT(0 /*ctxt_pP->module_id*/),
       T_INT(ue->rnti), T_INT(rb_id), T_INT(size));
-
-    const ngran_node_t type = RC.rrc[0 /*ctxt_pP->module_id*/]->node_type;
-    AssertFatal(!NODE_IS_CU(type),
-                "Can't be CU, bad node type %d\n", type);
-
-    if (NODE_IS_DU(type)) {
-      if (is_srb == 1) {
-	MessageDef *msg = itti_alloc_new_message_sized(TASK_RLC_ENB, 0, F1AP_UL_RRC_MESSAGE, sizeof(*msg) + size);
-	F1AP_UL_RRC_MESSAGE(msg).rrc_container = (uint8_t*)(msg+1);
-	memcpy(F1AP_UL_RRC_MESSAGE(msg).rrc_container, buf, size);
-	F1AP_UL_RRC_MESSAGE(msg).rnti = ue->rnti;
-	F1AP_UL_RRC_MESSAGE(msg).srb_id = rb_id;
-	F1AP_UL_RRC_MESSAGE(msg).rrc_container_length = size;
-	itti_send_msg_to_task(TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(0 /*ctxt_pP->module_id*/), msg);
-	return;
-      }  else {
-	// Fixme: very dirty workaround of incomplete F1-U implementation
-	instance_t DUuniqInstance=0;
-	MessageDef *msg = itti_alloc_new_message_sized(TASK_RLC_ENB, 0, GTPV1U_TUNNEL_DATA_REQ, sizeof(gtpv1u_tunnel_data_req_t) + size);
-	gtpv1u_tunnel_data_req_t *req=&GTPV1U_TUNNEL_DATA_REQ(msg);
-	req->buffer=(uint8_t*)(req+1);
-	memcpy(req->buffer,buf,size);
-	req->length=size;
-	req->offset=0;
-	req->ue_id=ue->rnti;
-	req->bearer_id=rb_id+4;
-	LOG_D(RLC, "Received uplink user-plane traffic at RLC-DU to be sent to the CU, size %d \n", size);
-	itti_send_msg_to_task(TASK_GTPV1_U, DUuniqInstance, msg);      
-	return;
-      }
-    }
   }
   
   memblock = get_free_mem_block(size, __func__);
diff --git a/openair2/M2AP/m2ap_MCE.c b/openair2/M2AP/m2ap_MCE.c
index f163aa453a47fdcd622d565950d422db6c879cbf..e5e924e0181dae7b5e74a7fcafb7d9272f1cf8da 100644
--- a/openair2/M2AP/m2ap_MCE.c
+++ b/openair2/M2AP/m2ap_MCE.c
@@ -111,9 +111,7 @@ void m2ap_MCE_handle_sctp_association_resp(instance_t instance, sctp_new_associa
               sctp_new_association_resp->ulp_cnx_id);
 
     if (sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN)
-      //proto_agent_stop(instance);
-      //f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
-    return; // exit -1 for debugging
+      return;
   }
 
    // go to an init func
diff --git a/openair2/M2AP/m2ap_MCE_interface_management.c b/openair2/M2AP/m2ap_MCE_interface_management.c
index 0ece50b88e29075ff8bf5166e6bcbba3924ff951..58a4c7b967d044ee648b002daacc78188da56a3b 100644
--- a/openair2/M2AP/m2ap_MCE_interface_management.c
+++ b/openair2/M2AP/m2ap_MCE_interface_management.c
@@ -75,7 +75,7 @@ int MCE_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStartRequest_Ies__value_PR_MCE_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -140,7 +140,7 @@ int MCE_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
 	 // ie->id                        = M2AP_ProtocolIE_ID_id_TNL_Information_1; 
 	 // ie->criticality               = M2AP_Criticality_reject;
 	 // ie->value.present             = M2AP_SessionStartRequest_Ies__value_PR_TNL_Information_1;
-	 // //asn_int642INTEGER(&ie->value.choice.MBMS_Session_ID, f1ap_du_data->MBMS_Session_ID); //?
+	 // //asn_int642INTEGER(&ie->value.choice.MBMS_Session_ID, 0);
 	 // asn1cSeqAdd(&out->protocolIEs.list, ie);
   }
    
@@ -258,7 +258,7 @@ int MCE_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m2ap_session_stop_re
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStopRequest_Ies__value_PR_MCE_MBMS_M2AP_ID;
-  ie->value.choice.MCE_MBMS_M2AP_ID = 0; /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -267,7 +267,7 @@ int MCE_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m2ap_session_stop_re
   ie->id                        = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStopRequest_Ies__value_PR_ENB_MBMS_M2AP_ID;
-  ie->value.choice.ENB_MBMS_M2AP_ID = 0;/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  ie->value.choice.ENB_MBMS_M2AP_ID = 0;
 
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
@@ -1437,7 +1437,7 @@ int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance,  module_id_t d
   ie->id                        = M2AP_ProtocolIE_ID_id_MBSFN_Area_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBSFN_Area_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
diff --git a/openair2/M2AP/m2ap_eNB_generate_messages.c b/openair2/M2AP/m2ap_eNB_generate_messages.c
index 89c83a87018a6e1ac5e2a952466cd00eb2f5456f..8e7e096d13be5c03ffe34a9db16a690ca2b548e1 100644
--- a/openair2/M2AP/m2ap_eNB_generate_messages.c
+++ b/openair2/M2AP/m2ap_eNB_generate_messages.c
@@ -92,7 +92,7 @@
 //  //ie->id                        = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
 //  //ie->criticality               = M2AP_Criticality_reject;
 //  //ie->value.present             = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
-//  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, f1ap_du_data->gNB_eNB_id);
+//  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, 0);
 //  //asn1cSeqAdd(&out->protocolIEs.list, ie);
 //
 //  /* optional */
diff --git a/openair2/M2AP/m2ap_eNB_interface_management.c b/openair2/M2AP/m2ap_eNB_interface_management.c
index df3f060226e602a0658cf4af65b5fe414c7e8623..a336a559a323bdc30b9940b2167b919077877497 100644
--- a/openair2/M2AP/m2ap_eNB_interface_management.c
+++ b/openair2/M2AP/m2ap_eNB_interface_management.c
@@ -234,7 +234,7 @@ int eNB_send_MBMS_SCHEDULING_INFORMATION_RESPONSE(instance_t instance, m2ap_mbms
 //  ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
 //  ie->criticality               = M2AP_Criticality_reject;
 //  ie->value.present             = M2AP_MbmsSchedulingInformationResponse_Ies__value_PR_MCE_MBMS_M2AP_ID;
-//  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+//  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
 //  asn1cSeqAdd(&out->protocolIEs.list, ie);
 //
 // /* mandatory */
@@ -243,7 +243,7 @@ int eNB_send_MBMS_SCHEDULING_INFORMATION_RESPONSE(instance_t instance, m2ap_mbms
 //  ie->id                        = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
 //  ie->criticality               = M2AP_Criticality_reject;
 //  ie->value.present             = M2AP_MbmsSchedulingInformationResponse_Ies__value_PR_ENB_MBMS_M2AP_ID;
-//  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+//  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
 //  asn1cSeqAdd(&out->protocolIEs.list, ie);
 //
 
@@ -329,7 +329,7 @@ int eNB_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m2ap_session_start
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStartResponse_Ies__value_PR_MCE_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
  /* mandatory */
@@ -338,7 +338,7 @@ int eNB_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m2ap_session_start
   ie->id                        = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStartResponse_Ies__value_PR_ENB_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -395,7 +395,7 @@ int eNB_send_MBMS_SESSION_START_FAILURE(instance_t instance, m2ap_session_start_
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStartFailure_Ies__value_PR_MCE_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -493,7 +493,7 @@ int eNB_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m2ap_session_stop_r
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStopResponse_Ies__value_PR_MCE_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
  /* mandatory */
@@ -502,7 +502,7 @@ int eNB_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m2ap_session_stop_r
   ie->id                        = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_SessionStopResponse_Ies__value_PR_ENB_MBMS_M2AP_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -579,7 +579,7 @@ int eNB_send_M2_SETUP_REQUEST(m2ap_eNB_instance_t *instance_p, m2ap_eNB_data_t*
   //ie->id                        = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
   //ie->criticality               = M2AP_Criticality_reject;
   //ie->value.present             = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
-  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, f1ap_du_data->gNB_eNB_id);
+  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, 0);
   //asn1cSeqAdd(&out->protocolIEs.list, ie);
 
      /* optional */
@@ -1290,7 +1290,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_REPORT(instance_t instance, m2ap_mbms_service
   ie->id                        = M2AP_ProtocolIE_ID_id_MBSFN_Area_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBSFN_Area_ID;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -1299,7 +1299,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_REPORT(instance_t instance, m2ap_mbms_service
   ie->id                        = M2AP_ProtocolIE_ID_id_MBMS_Counting_Result_List;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBMS_Counting_Result_List;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   M2AP_MBMS_Counting_Result_List_t * m2ap_mbms_counting_result_list = &ie->value.choice.MBMS_Counting_Result_List;
 
   M2AP_MBMS_Counting_Result_Item_t * m2ap_mbms_counting_result_item = (M2AP_MBMS_Counting_Result_Item_t*)calloc(1,sizeof(M2AP_MBMS_Counting_Result_Item_t));
@@ -1356,7 +1356,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_RESP(instance_t instance, m2ap_mbms_service_c
   ie->id                        = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_MbmsServiceCountingResponse_Ies__value_PR_CriticalityDiagnostics;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   if (m2ap_encode_pdu(&pdu, &buffer, &len) < 0) {
@@ -1395,7 +1395,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_FAILURE(instance_t instance, m2ap_mbms_servic
   ie->id                        = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
   ie->criticality               = M2AP_Criticality_reject;
   ie->value.present             = M2AP_MbmsServiceCountingFailure_Ies__value_PR_CriticalityDiagnostics;
-  //ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M2AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
     /* mandatory */
diff --git a/openair2/MCE_APP/mce_app.c b/openair2/MCE_APP/mce_app.c
index e626a09a9866bf06811afdb08a6c7cb3c0f6129f..c832df55855e31b34de200337cb421a530dcd2e9 100644
--- a/openair2/MCE_APP/mce_app.c
+++ b/openair2/MCE_APP/mce_app.c
@@ -67,7 +67,7 @@ static m2ap_setup_req_t * m2ap_setup_req_local = NULL;
 
 /*------------------------------------------------------------------------------*/
 
-static uint32_t MCE_app_register(ngran_node_t node_type,uint32_t mce_id_start, uint32_t mce_id_end) {
+static uint32_t MCE_app_register(uint32_t mce_id_start, uint32_t mce_id_end) {
   uint32_t         mce_id;
   MessageDef      *msg_p;
   uint32_t         register_mce_pending = 0;
@@ -87,17 +87,7 @@ static uint32_t MCE_app_register(ngran_node_t node_type,uint32_t mce_id_start, u
         LOG_I(ENB_APP,"[MCE %d] MCE_app_register via M3AP for instance %d\n", mce_id, ENB_MODULE_ID_TO_INSTANCE(mce_id));
         itti_send_msg_to_task (TASK_M3AP, ENB_MODULE_ID_TO_INSTANCE(mce_id), msg_p);
 
-      //if (NODE_IS_DU(node_type)) { // F1AP registration
-      //  // configure F1AP here for F1C
-      //  LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n");
-      //  msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SETUP_REQ);
-      //  RCconfig_DU_F1(msg_p, enb_id);
-
-      //  LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
-      //  itti_send_msg_to_task (TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
-      //  // configure GTPu here for F1U
-      //}
-      //else { // S1AP registration
+      //{ // S1AP registration
       //  /* note:  there is an implicit relationship between the data structure and the message name */
       //  msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
       //  RCconfig_S1(msg_p, enb_id);
@@ -340,39 +330,37 @@ void *MCE_app_task(void *args_p) {
   itti_mark_task_ready (TASK_MCE_APP);
 
   /* Try to register each MCE */
-  // This assumes that node_type of all RRC instances is the same
   if ( EPC_MODE_ENABLED && RC.rrc == NULL )
 	  LOG_E(RRC, "inconsistent global variables\n");
   if (EPC_MODE_ENABLED && RC.rrc ) {
-    register_mce_pending = MCE_app_register(RC.rrc[0]->node_type, mce_id_start, mce_id_end);
+    register_mce_pending = MCE_app_register(mce_id_start, mce_id_end);
   }
 
     /* Try to register each MCE with each other */
- // if (is_x2ap_enabled() && !NODE_IS_DU(RC.rrc[0]->node_type)) {
+ // if (is_x2ap_enabled()) {
  //   x2_register_enb_pending = MCE_app_register_x2 (enb_id_start, enb_id_end);
  // }
  // MCE_app_send_MME_APP2(0);
 
+  if (is_m2ap_MCE_enabled()) {
+    RCconfig_MCE();
 
- if (is_m2ap_MCE_enabled() /*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/) {
-  RCconfig_MCE();
-
-  if(!m2ap_mbms_scheduling_information_local)
-	m2ap_mbms_scheduling_information_local = (m2ap_mbms_scheduling_information_t*)calloc(1,sizeof(m2ap_mbms_scheduling_information_t));
-  if(m2ap_mbms_scheduling_information_local)
-  	RCconfig_m2_scheduling(m2ap_mbms_scheduling_information_local,0);
+    if (!m2ap_mbms_scheduling_information_local)
+      m2ap_mbms_scheduling_information_local = (m2ap_mbms_scheduling_information_t *)calloc(1, sizeof(m2ap_mbms_scheduling_information_t));
+    if (m2ap_mbms_scheduling_information_local)
+      RCconfig_m2_scheduling(m2ap_mbms_scheduling_information_local, 0);
 
-  if(!m2ap_setup_resp_local)
-	m2ap_setup_resp_local = (m2ap_setup_resp_t*)calloc(1,sizeof(m2ap_setup_resp_t));
-  if(m2ap_setup_resp_local)
-	RCconfig_m2_mcch(m2ap_setup_resp_local,0);
- }
+    if (!m2ap_setup_resp_local)
+      m2ap_setup_resp_local = (m2ap_setup_resp_t *)calloc(1, sizeof(m2ap_setup_resp_t));
+    if (m2ap_setup_resp_local)
+      RCconfig_m2_mcch(m2ap_setup_resp_local, 0);
+  }
 
  // /* Try to register each MCE with MCE each other */
- if (is_m3ap_MCE_enabled() /*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/) {
-   	///*m3_register_mce_pending =*/ 
-	MCE_app_register_m3 (mce_id_start, mce_id_end);
-   }
+  if (is_m3ap_MCE_enabled()) {
+    ///*m3_register_mce_pending =*/
+    MCE_app_register_m3(mce_id_start, mce_id_end);
+  }
 
   do {
     // Wait for a message
@@ -390,7 +378,6 @@ void *MCE_app_task(void *args_p) {
       break;
 
     case M3AP_REGISTER_MCE_CNF:
-      //AssertFatal(!NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received S1AP_REGISTER_ENB_CNF\n");
           LOG_I(MCE_APP, "[MCE %ld] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
                 M3AP_REGISTER_MCE_CNF(msg_p).nb_mme);
           DevAssert(register_mce_pending > 0);
@@ -451,12 +438,7 @@ void *MCE_app_task(void *args_p) {
 
    case M3AP_SETUP_RESP:
       LOG_I(MCE_APP, "Received M3AP_SETUP_RESP message %s\n", ITTI_MSG_NAME (msg_p));
-   //   //AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/MCE\n");
 
-   //   //LOG_I(MCE_APP, "Received %s: associated ngran_MCE_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
-   //         //F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
-   //   
-   //   //handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
    //   handle_m3ap_setup_resp(&M3AP_SETUP_RESP(msg_p));
 
    //   DevAssert(register_mce_pending > 0);
diff --git a/openair2/MCE_APP/mce_config.h b/openair2/MCE_APP/mce_config.h
index dbed65221ac241351f56291e64ca174bc5cb7818..858f09db17b8ca71193a55983c495fe4f3dece42 100644
--- a/openair2/MCE_APP/mce_config.h
+++ b/openair2/MCE_APP/mce_config.h
@@ -40,7 +40,6 @@
 #include "PHY/impl_defs_top.h"
 #include "PHY/defs_eNB.h"
 #include "s1ap_messages_types.h"
-#include "f1ap_messages_types.h"
 #include "LTE_SystemInformationBlockType2.h"
 #include "rrc_messages_types.h"
 #include "RRC/LTE/rrc_defs.h"
diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c
index c6d2d1ae68059c803de0133f53c19773999424b2..e0bf90cff2fddf592f30814fe0d0b97c8611c001 100644
--- a/openair2/RRC/LTE/L2_interface.c
+++ b/openair2/RRC/LTE/L2_interface.c
@@ -47,7 +47,6 @@
 
 #include "intertask_interface.h"
 
-#include "openair2/F1AP/f1ap_du_rrc_message_transfer.h"
 
 extern RAN_CONTEXT_t RC;
 
@@ -302,28 +301,6 @@ mac_rrc_data_ind(
 )
 //--------------------------------------------------------------------------
 {
-  if (NODE_IS_DU(RC.rrc[module_idP]->node_type)) {
-    LOG_W(RRC,"[DU %d][RAPROC] Received SDU for CCCH on SRB %ld length %d for UE id %d RNTI %x \n",
-          module_idP, srb_idP, sdu_lenP, UE_id, rntiP);
-    /* do ITTI message */
-    DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(
-      module_idP,
-      CC_id,
-      UE_id,
-      rntiP,
-      sduP,
-      sdu_lenP,
-      NULL,
-      0);
-    struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_allocate_new_UE_context(RC.rrc[module_idP]);
-    ue_context_p->ue_id_rnti                    = rntiP;
-    ue_context_p->ue_context.rnti               = rntiP;
-    ue_context_p->ue_context.random_ue_identity = rntiP;
-    ue_context_p->ue_context.Srb0.Active        = 1;
-    RB_INSERT(rrc_ue_tree_s, &RC.rrc[module_idP]->rrc_ue_head, ue_context_p);
-    return(0);
-  }
-
   //SRB_INFO *Srb_info;
   protocol_ctxt_t ctxt;
   sdu_size_t      sdu_size = 0;
diff --git a/openair2/RRC/LTE/L2_interface_common.c b/openair2/RRC/LTE/L2_interface_common.c
index 21ecc07b057e454e056f1bd46dfd20f8c752ada1..6a0830e6df1f9ac6cd0046028a904739424459dd 100644
--- a/openair2/RRC/LTE/L2_interface_common.c
+++ b/openair2/RRC/LTE/L2_interface_common.c
@@ -88,12 +88,6 @@ rrc_data_req(
     message_p);
   LOG_I(RRC,"sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB\n");
 
-  /* Hack: only trigger PDCP if in CU, otherwise it is triggered by RU threads
-   * Ideally, PDCP would not neet to be triggered like this but react to ITTI
-   * messages automatically */
-  if (ctxt_pP->enb_flag && NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type))
-    pdcp_run(ctxt_pP);
-
   return true; // TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
 }
 
diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h
index ecf2cd12f15619138081965bb88ac6d0b2ac5a11..6ce27da5ce41421e64a7bba7940ceb00efe5ef24 100644
--- a/openair2/RRC/LTE/rrc_defs.h
+++ b/openair2/RRC/LTE/rrc_defs.h
@@ -742,7 +742,6 @@ typedef struct {
 
 typedef struct eNB_RRC_INST_s {
   /// southbound midhaul configuration
-  ngran_node_t                    node_type;
   eth_params_t                    eth_params_s;
   char                            *node_name;
   uint32_t                        node_id;
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 999d1d5a71707d864939f0940ca4d211177079ab..24ec163b2e6cd2e19d6c390a6b741b83d3be841c 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -237,193 +237,161 @@ init_SI(
   carrier->SIB1 = (uint8_t *) malloc16(32);
   AssertFatal(carrier->SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n",
               PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
-  LOG_I(RRC,"[eNB %d] Node type %d \n ", ctxt_pP->module_id, rrc->node_type);
-
-  if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
-    // copy basic Cell parameters
-    carrier->physCellId      = configuration->Nid_cell[CC_id];
-    carrier->p_eNB           = configuration->nb_antenna_ports[CC_id];
-    carrier->Ncp             = configuration->prefix_type[CC_id];
-    carrier->dl_CarrierFreq  = configuration->downlink_frequency[CC_id];
-    carrier->ul_CarrierFreq  = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id];
-    carrier->eutra_band      = configuration->eutra_band[CC_id];
-    carrier->N_RB_DL         = configuration->N_RB_DL[CC_id];
-    carrier->pbch_repetition = configuration->pbch_repetition[CC_id];
-    LOG_I(RRC, "configuration->schedulingInfoSIB1_BR_r13[CC_id] %d\n",(int)configuration->schedulingInfoSIB1_BR_r13[CC_id]);
-    LOG_A(RRC, "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n",
-          (int)configuration->N_RB_DL[CC_id],
-          (int)configuration->radioresourceconfig[CC_id].phich_resource,
-          (int)configuration->radioresourceconfig[CC_id].phich_duration);
-    carrier->sizeof_MIB = do_MIB(&rrc->carrier[CC_id],
-                                 configuration->N_RB_DL[CC_id],
-                                 configuration->radioresourceconfig[CC_id].phich_resource,
-                                 configuration->radioresourceconfig[CC_id].phich_duration,
-                                 0,
-                                 configuration->schedulingInfoSIB1_BR_r13[CC_id]
-                                );
-    carrier->sizeof_SIB1 = do_SIB1(&rrc->carrier[CC_id],
-                                   ctxt_pP->module_id,
-                                   CC_id,
-                                   false,
-                                   configuration
-                                  );
-    AssertFatal(carrier->sizeof_SIB1 != 255,"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255");
-    RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_BR = 0;
-
-    if (configuration->schedulingInfoSIB1_BR_r13[CC_id] > 0) {
-      RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_BR = (uint8_t *) malloc16(32);
-      RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_BR = do_SIB1(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id],
-          ctxt_pP->module_id,
-          CC_id, true, configuration);
-    }
-  }
 
-  if (!NODE_IS_DU(rrc->node_type)) {
-    carrier->SIB23 = (uint8_t *) malloc16(64);
-    AssertFatal(carrier->SIB23!=NULL,"cannot allocate memory for SIB");
-    carrier->sizeof_SIB23 = do_SIB23(ctxt_pP->module_id,
-                                     CC_id,
-                                     false,
-                                     configuration
-                                    );
-    LOG_I(RRC,"do_SIB23, size %d \n ", carrier->sizeof_SIB23);
-    AssertFatal(carrier->sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255");
-    carrier->sizeof_SIB23_BR = 0;
-
-    if (configuration->schedulingInfoSIB1_BR_r13[CC_id]>0) {
-      carrier->SIB23_BR = (uint8_t *) malloc16(64);
-      AssertFatal(carrier->SIB23_BR!=NULL,"cannot allocate memory for SIB");
-      carrier->sizeof_SIB23_BR = do_SIB23(ctxt_pP->module_id, CC_id, true, configuration);
+  // copy basic Cell parameters
+  carrier->physCellId = configuration->Nid_cell[CC_id];
+  carrier->p_eNB = configuration->nb_antenna_ports[CC_id];
+  carrier->Ncp = configuration->prefix_type[CC_id];
+  carrier->dl_CarrierFreq = configuration->downlink_frequency[CC_id];
+  carrier->ul_CarrierFreq = configuration->downlink_frequency[CC_id] + configuration->uplink_frequency_offset[CC_id];
+  carrier->eutra_band = configuration->eutra_band[CC_id];
+  carrier->N_RB_DL = configuration->N_RB_DL[CC_id];
+  carrier->pbch_repetition = configuration->pbch_repetition[CC_id];
+  LOG_I(RRC, "configuration->schedulingInfoSIB1_BR_r13[CC_id] %d\n", (int)configuration->schedulingInfoSIB1_BR_r13[CC_id]);
+  LOG_A(RRC,
+        "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n",
+        (int)configuration->N_RB_DL[CC_id],
+        (int)configuration->radioresourceconfig[CC_id].phich_resource,
+        (int)configuration->radioresourceconfig[CC_id].phich_duration);
+  carrier->sizeof_MIB = do_MIB(&rrc->carrier[CC_id],
+                               configuration->N_RB_DL[CC_id],
+                               configuration->radioresourceconfig[CC_id].phich_resource,
+                               configuration->radioresourceconfig[CC_id].phich_duration,
+                               0,
+                               configuration->schedulingInfoSIB1_BR_r13[CC_id]);
+  carrier->sizeof_SIB1 = do_SIB1(&rrc->carrier[CC_id], ctxt_pP->module_id, CC_id, false, configuration);
+  AssertFatal(carrier->sizeof_SIB1 != 255, "FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255");
+  RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_BR = 0;
+
+  if (configuration->schedulingInfoSIB1_BR_r13[CC_id] > 0) {
+    RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_BR = (uint8_t *)malloc16(32);
+    RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_BR = do_SIB1(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id], ctxt_pP->module_id, CC_id, true, configuration);
+  }
+
+  carrier->SIB23 = (uint8_t *)malloc16(64);
+  AssertFatal(carrier->SIB23 != NULL, "cannot allocate memory for SIB");
+  carrier->sizeof_SIB23 = do_SIB23(ctxt_pP->module_id, CC_id, false, configuration);
+  LOG_I(RRC, "do_SIB23, size %d \n ", carrier->sizeof_SIB23);
+  AssertFatal(carrier->sizeof_SIB23 != 255, "FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255");
+  carrier->sizeof_SIB23_BR = 0;
+
+  if (configuration->schedulingInfoSIB1_BR_r13[CC_id] > 0) {
+    carrier->SIB23_BR = (uint8_t *)malloc16(64);
+    AssertFatal(carrier->SIB23_BR != NULL, "cannot allocate memory for SIB");
+    carrier->sizeof_SIB23_BR = do_SIB23(ctxt_pP->module_id, CC_id, true, configuration);
+  }
+
+  LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT " SIB2/3 Contents (partial)\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
+  LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT " pusch_config_common.n_SB = %ld\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.hoppingMode = %ld\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.pusch_HoppingOffset = %ld\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.enable64QAM = %d\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.groupHoppingEnabled = %d\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.groupAssignmentPUSCH = %ld\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.sequenceHoppingEnabled = %d\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_FMT " pusch_config_common.cyclicShift  = %ld\n",
+        PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+        carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
+
+  if (carrier->MBMS_flag > 0) {
+    for (i = 0; i < carrier->sib2->mbsfn_SubframeConfigList->list.count; i++) {
+      // SIB 2
+      //   LOG_D(RRC, "[eNB %ld] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, RC.rrc[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count);
+      LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT " SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), i, carrier->sib2->mbsfn_SubframeConfigList->list.count);
+      LOG_D(RRC,
+            PROTOCOL_RRC_CTXT_FMT " mbsfn_Subframe_pattern is  = %x\n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0] >> 0);
+      LOG_D(RRC,
+            PROTOCOL_RRC_CTXT_FMT " radioframe_allocation_period  = %ld (just index number, not the real value)\n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2)
+      LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT " radioframe_allocation_offset  = %ld\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset);
     }
 
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" SIB2/3 Contents (partial)\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
-    LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift  = %ld\n",
-          PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-          carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
-
-    if (carrier->MBMS_flag > 0) {
-      for (i = 0; i < carrier->sib2->mbsfn_SubframeConfigList->list.count; i++) {
-        // SIB 2
-        //   LOG_D(RRC, "[eNB %ld] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, RC.rrc[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count);
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              i,
-              carrier->sib2->mbsfn_SubframeConfigList->list.count);
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is  = %x\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0] >> 0);
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_period  = %ld (just index number, not the real value)\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod);   // need to display the real value, using array of char (like in dumping SIB2)
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_offset  = %ld\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset);
-      }
-
-      //   SIB13
-      for (i = 0; i < carrier->sib13->mbsfn_AreaInfoList_r9.list.count; i++) {
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN sync area %d/%d (partial)\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              i,
-              carrier->sib13->mbsfn_AreaInfoList_r9.list.count);
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Repetition Period: %ld (just index number, not real value)\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
-        LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Offset: %ld\n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9);
-      }
-    } else memset((void *)&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13,0,sizeof(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13));
-
-    //TTN - SIB 18
-    if (configuration->SL_configured > 0) {
-      for (int j = 0; j < carrier->sib18->commConfig_r12->commRxPool_r12.list.count; j++) {
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB18 %d/%d \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              j+1,
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.count);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 rxPool_sc_CP_Len: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_CP_Len_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 sc_Period_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_Period_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 data_CP_Len_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->data_CP_Len_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Num_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Num_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Start_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Start_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_End_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_End_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 offsetIndicator: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 subframeBitmap_choice_bs_buf: %s \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
-      }
+    //   SIB13
+    for (i = 0; i < carrier->sib13->mbsfn_AreaInfoList_r9.list.count; i++) {
+      LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT " SIB13 contents for MBSFN sync area %d/%d (partial)\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), i, carrier->sib13->mbsfn_AreaInfoList_r9.list.count);
+      LOG_D(RRC,
+            PROTOCOL_RRC_CTXT_FMT " MCCH Repetition Period: %ld (just index number, not real value)\n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
+      LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT " MCCH Offset: %ld\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9);
+    }
+  } else
+    memset((void *)&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13, 0, sizeof(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13));
+
+  // TTN - SIB 18
+  if (configuration->SL_configured > 0) {
+    for (int j = 0; j < carrier->sib18->commConfig_r12->commRxPool_r12.list.count; j++) {
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " Contents of SIB18 %d/%d \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), j + 1, carrier->sib18->commConfig_r12->commRxPool_r12.list.count);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB18 rxPool_sc_CP_Len: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_CP_Len_r12);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB18 sc_Period_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_Period_r12);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB18 data_CP_Len_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->data_CP_Len_r12);
+      LOG_I(
+          RRC, PROTOCOL_RRC_CTXT_FMT " SIB18 prb_Num_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Num_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB18 prb_Start_r12: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Start_r12);
+      LOG_I(
+          RRC, PROTOCOL_RRC_CTXT_FMT " SIB18 prb_End_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_End_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB18 offsetIndicator: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB18 subframeBitmap_choice_bs_buf: %s \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
+    }
 
-      //TTN - SIB 19
-      for (int j = 0; j < carrier->sib19->discConfig_r12->discRxPool_r12.list.count; j++) {
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB19 %d/%d \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              j+1,
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.count);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 cp_Len_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->cp_Len_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 discPeriod_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->discPeriod_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRetx_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRetx_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRepetition_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRepetition_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Num_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Num_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Start_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Start_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_End_r12: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_End_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 offsetIndicator: %ld \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12);
-        LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 subframeBitmap_choice_bs_buf: %s \n",
-              PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
-              carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
-      }
+    // TTN - SIB 19
+    for (int j = 0; j < carrier->sib19->discConfig_r12->discRxPool_r12.list.count; j++) {
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " Contents of SIB19 %d/%d \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), j + 1, carrier->sib19->discConfig_r12->discRxPool_r12.list.count);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB19 cp_Len_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->cp_Len_r12);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB19 discPeriod_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->discPeriod_r12);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB19 numRetx_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRetx_r12);
+      LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT " SIB19 numRepetition_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRepetition_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB19 tf_ResourceConfig_r12 prb_Num_r12: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Num_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB19 tf_ResourceConfig_r12 prb_Start_r12: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Start_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB19 tf_ResourceConfig_r12 prb_End_r12: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_End_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB19 tf_ResourceConfig_r12 offsetIndicator: %ld \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12);
+      LOG_I(RRC,
+            PROTOCOL_RRC_CTXT_FMT " SIB19 tf_ResourceConfig_r12 subframeBitmap_choice_bs_buf: %s \n",
+            PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
+            carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
     }
   }
 
@@ -432,72 +400,61 @@ init_SI(
         PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
 
   // LTE-M stuff here (take out CU-DU for now)
-  if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-    if ((carrier->mib.message.schedulingInfoSIB1_BR_r13>0) &&
-        (carrier->sib1_BR!=NULL)) {
-      AssertFatal(carrier->sib1_BR->nonCriticalExtension!=NULL,
-                  "sib2_br->nonCriticalExtension is null (v8.9)\n");
-      AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension!=NULL,
-                  "sib2_br->nonCriticalExtension is null (v9.2)\n");
-      AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL,
-                  "sib2_br->nonCriticalExtension is null (v11.3)\n");
-      AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL,
-                  "sib2_br->nonCriticalExtension is null (v12.5)\n");
-      AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL,
-                  "sib2_br->nonCriticalExtension is null (v13.10)\n");
-      sib1_v13ext = carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension;
-      // Basic Asserts for CE_level0 PRACH configuration
-      LTE_RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR = &carrier[CC_id].sib2_BR->radioResourceConfigCommon;
-      struct LTE_PRACH_ConfigSIB_v1310 *ext4_prach=radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310;
-      LTE_PRACH_ParametersListCE_r13_t   *prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13;
-      AssertFatal(prach_ParametersListCE_r13->list.count>0,"prach_ParametersListCE_r13 is empty\n");
-      LTE_PRACH_ParametersCE_r13_t *p = prach_ParametersListCE_r13->list.array[0];
-      AssertFatal(p->prach_StartingSubframe_r13 != NULL, "prach_StartingSubframe_r13 celevel0 is null\n");
-      AssertFatal((1<<p->numRepetitionPerPreambleAttempt_r13)<=(2<<*p->prach_StartingSubframe_r13),
-                  "prachce0->numReptitionPerPreambleAttempt_r13 %d > prach_StartingSubframe_r13 %d\n",
-                  1<<p->numRepetitionPerPreambleAttempt_r13,
-                  2<<*p->prach_StartingSubframe_r13);
-    }
-  }
-
-  if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-    LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n");
-    rrc_mac_config_req_eNB_t tmp = {
-        .CC_id = CC_id,
-        .physCellId = carrier->physCellId,
-        .p_eNB = carrier->p_eNB,
-        .Ncp = carrier->Ncp,
-        .eutra_band = carrier->sib1->freqBandIndicator,
-        .dl_CarrierFreq = carrier->dl_CarrierFreq,
-        .pbch_repetition = carrier->pbch_repetition,
-        .mib = &carrier->mib,
-        .radioResourceConfigCommon = &carrier->sib2->radioResourceConfigCommon,
-        .tdd_Config = carrier->sib1->tdd_Config,
-        .schedulingInfoList = &carrier->sib1->schedulingInfoList,
-        .ul_CarrierFreq = carrier->ul_CarrierFreq,
-        .ul_Bandwidth = carrier->sib2->freqInfo.ul_Bandwidth,
-        .additionalSpectrumEmission = &carrier->sib2->freqInfo.additionalSpectrumEmission,
-        .mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList,
-        .MBMS_Flag = carrier->MBMS_flag,
-        .sib1_ext_r13 = sib1_v13ext,
-        .FeMBMS_Flag = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].FeMBMS_flag,
-        .mib_fembms = &carrier->siblock1_MBMS,
-    };
-    if (carrier->sib2_BR)
-      tmp.LTE_radioResourceConfigCommon_BR = &carrier->sib2_BR->radioResourceConfigCommon;
-    if (carrier->sib13)
-      tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
-    if (carrier->sib1_MBMS) {
-      tmp.nonMBSFN_SubframeConfig = carrier->sib1_MBMS->nonMBSFN_SubframeConfig_r14;
-      tmp.sib1_mbms_r14_fembms = carrier->sib1_MBMS->systemInformationBlockType13_r14;
-      if (carrier->sib1_MBMS->systemInformationBlockType13_r14)
-        tmp.mbsfn_AreaInfoList_fembms = &carrier->sib1_MBMS->systemInformationBlockType13_r14->mbsfn_AreaInfoList_r9;
-    }
-    rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
+  if ((carrier->mib.message.schedulingInfoSIB1_BR_r13 > 0) && (carrier->sib1_BR != NULL)) {
+    AssertFatal(carrier->sib1_BR->nonCriticalExtension != NULL, "sib2_br->nonCriticalExtension is null (v8.9)\n");
+    AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension != NULL, "sib2_br->nonCriticalExtension is null (v9.2)\n");
+    AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension != NULL, "sib2_br->nonCriticalExtension is null (v11.3)\n");
+    AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension != NULL, "sib2_br->nonCriticalExtension is null (v12.5)\n");
+    AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension != NULL,
+                "sib2_br->nonCriticalExtension is null (v13.10)\n");
+    sib1_v13ext = carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension;
+    // Basic Asserts for CE_level0 PRACH configuration
+    LTE_RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR = &carrier[CC_id].sib2_BR->radioResourceConfigCommon;
+    struct LTE_PRACH_ConfigSIB_v1310 *ext4_prach = radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310;
+    LTE_PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13;
+    AssertFatal(prach_ParametersListCE_r13->list.count > 0, "prach_ParametersListCE_r13 is empty\n");
+    LTE_PRACH_ParametersCE_r13_t *p = prach_ParametersListCE_r13->list.array[0];
+    AssertFatal(p->prach_StartingSubframe_r13 != NULL, "prach_StartingSubframe_r13 celevel0 is null\n");
+    AssertFatal((1 << p->numRepetitionPerPreambleAttempt_r13) <= (2 << *p->prach_StartingSubframe_r13),
+                "prachce0->numReptitionPerPreambleAttempt_r13 %d > prach_StartingSubframe_r13 %d\n",
+                1 << p->numRepetitionPerPreambleAttempt_r13,
+                2 << *p->prach_StartingSubframe_r13);
+  }
+
+  LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n");
+  rrc_mac_config_req_eNB_t tmp = {
+      .CC_id = CC_id,
+      .physCellId = carrier->physCellId,
+      .p_eNB = carrier->p_eNB,
+      .Ncp = carrier->Ncp,
+      .eutra_band = carrier->sib1->freqBandIndicator,
+      .dl_CarrierFreq = carrier->dl_CarrierFreq,
+      .pbch_repetition = carrier->pbch_repetition,
+      .mib = &carrier->mib,
+      .radioResourceConfigCommon = &carrier->sib2->radioResourceConfigCommon,
+      .tdd_Config = carrier->sib1->tdd_Config,
+      .schedulingInfoList = &carrier->sib1->schedulingInfoList,
+      .ul_CarrierFreq = carrier->ul_CarrierFreq,
+      .ul_Bandwidth = carrier->sib2->freqInfo.ul_Bandwidth,
+      .additionalSpectrumEmission = &carrier->sib2->freqInfo.additionalSpectrumEmission,
+      .mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList,
+      .MBMS_Flag = carrier->MBMS_flag,
+      .sib1_ext_r13 = sib1_v13ext,
+      .FeMBMS_Flag = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].FeMBMS_flag,
+      .mib_fembms = &carrier->siblock1_MBMS,
+  };
+  if (carrier->sib2_BR)
+    tmp.LTE_radioResourceConfigCommon_BR = &carrier->sib2_BR->radioResourceConfigCommon;
+  if (carrier->sib13)
+    tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
+  if (carrier->sib1_MBMS) {
+    tmp.nonMBSFN_SubframeConfig = carrier->sib1_MBMS->nonMBSFN_SubframeConfig_r14;
+    tmp.sib1_mbms_r14_fembms = carrier->sib1_MBMS->systemInformationBlockType13_r14;
+    if (carrier->sib1_MBMS->systemInformationBlockType13_r14)
+      tmp.mbsfn_AreaInfoList_fembms = &carrier->sib1_MBMS->systemInformationBlockType13_r14->mbsfn_AreaInfoList_r9;
   }
+  rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
 
-  /* set flag to indicate that cell information is configured. This is required
-   * in DU to trigger F1AP_SETUP procedure */
   pthread_mutex_lock(&rrc->cell_info_mutex);
   rrc->cell_info_configured=1;
   pthread_mutex_unlock(&rrc->cell_info_mutex);
@@ -512,8 +469,6 @@ init_MCCH(
 //-----------------------------------------------------------------------------
 {
   int                                 sync_area = 0;
-  // initialize RRC_eNB_INST MCCH entry
-  eNB_RRC_INST *rrc = RC.rrc[enb_mod_idP];
   RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE =
     malloc(RC.rrc[enb_mod_idP]->carrier[CC_id].num_mbsfn_sync_area * sizeof(uint8_t *));
 
@@ -546,19 +501,10 @@ init_MCCH(
     RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESS[sync_area].Active = 1;
   }
 
-  //Set the RC.rrc[enb_mod_idP]->MCCH_MESS.Active to 1 (allow to  transfer MCCH message RRC->MAC in function mac_rrc_data_req)
-  // ??Configure MCCH logical channel
-  // call mac_config_req with appropriate structure from ASN.1 description
-  //  LOG_I(RRC, "DUY: serviceID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]);
-  //  LOG_I(RRC, "DUY: session ID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]);
-  if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-    rrc_mac_config_req_eNB_t tmp = {0};
-    tmp.CC_id = CC_id;
-    tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
-    rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
-  }
-
-  //LOG_I(RRC,"DUY: lcid after rrc_mac_config_req is %02d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9);
+  rrc_mac_config_req_eNB_t tmp = {0};
+  tmp.CC_id = CC_id;
+  tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
+  rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
 }
 
 //-----------------------------------------------------------------------------
@@ -587,14 +533,12 @@ static void init_MBMS(
                              , &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9)
                              ,NULL);
 
-    if (!NODE_IS_CU(RC.rrc[enb_mod_idP]->node_type)) {
-      rrc_rlc_config_asn1_req(&ctxt,
-                              NULL, // LTE_SRB_ToAddModList
-                              NULL,   // LTE_DRB_ToAddModList
-                              NULL,   // DRB_ToReleaseList
-                              &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9),0, 0
-                             );
-    }
+    rrc_rlc_config_asn1_req(&ctxt,
+                            NULL, // LTE_SRB_ToAddModList
+                            NULL,   // LTE_DRB_ToAddModList
+                            NULL,   // DRB_ToReleaseList
+                            &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9),0, 0
+                           );
 
     //rrc_mac_config_req();
   }
@@ -897,35 +841,24 @@ rrc_eNB_free_UE(
   }
 
   if(EPC_MODE_ENABLED) {
-    if (!NODE_IS_DU(RC.rrc[enb_mod_idP]->node_type)) {
-      if((ue_context_pP->ue_context.ul_failure_timer >= 20000) && (mac_eNB_get_rrc_status(enb_mod_idP, rnti) >= RRC_CONNECTED)) {
-        LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ sent for RNTI %x, cause 21, radio connection with ue lost\n",
-              enb_mod_idP,
-              rnti);
-        rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP,
-            ue_context_pP,
-            S1AP_CAUSE_RADIO_NETWORK,
-            21); // send cause 21: radio connection with ue lost
-        /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
-         * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
-         *  triggering the S1 UE Context Release Request procedure in order to allow the UE to perform the NAS recovery
-         *  procedure, see TS 23.401 [17].
-         */
-        return;
-      }
+    if ((ue_context_pP->ue_context.ul_failure_timer >= 20000) && (mac_eNB_get_rrc_status(enb_mod_idP, rnti) >= RRC_CONNECTED)) {
+      LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ sent for RNTI %x, cause 21, radio connection with ue lost\n", enb_mod_idP, rnti);
+      rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK,
+                                               21); // send cause 21: radio connection with ue lost
+      /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
+       * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
+       *  triggering the S1 UE Context Release Request procedure in order to allow the UE to perform the NAS recovery
+       *  procedure, see TS 23.401 [17].
+       */
+      return;
+    }
 
-      if((ue_context_pP->ue_context.ue_rrc_inactivity_timer >= RC.rrc[enb_mod_idP]->configuration.rrc_inactivity_timer_thres) &&
-          (mac_eNB_get_rrc_status(enb_mod_idP, rnti) >= RRC_CONNECTED) &&
-          (RC.rrc[enb_mod_idP]->configuration.rrc_inactivity_timer_thres > 0)) {
-        LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ sent for RNTI %x, cause 20, user inactivity\n",
-              enb_mod_idP,
-              rnti);
-        rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP,
-            ue_context_pP,
-            S1AP_CAUSE_RADIO_NETWORK,
-            20); // send cause 20: user inactivity
-        return;
-      }
+    if ((ue_context_pP->ue_context.ue_rrc_inactivity_timer >= RC.rrc[enb_mod_idP]->configuration.rrc_inactivity_timer_thres) && (mac_eNB_get_rrc_status(enb_mod_idP, rnti) >= RRC_CONNECTED)
+        && (RC.rrc[enb_mod_idP]->configuration.rrc_inactivity_timer_thres > 0)) {
+      LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ sent for RNTI %x, cause 20, user inactivity\n", enb_mod_idP, rnti);
+      rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK,
+                                               20); // send cause 20: user inactivity
+      return;
     }
   }
 
@@ -1023,20 +956,10 @@ void release_UE_in_freeList(module_id_t mod_id) {
         }
       }
 
-      if (!NODE_IS_CU(RC.rrc[mod_id]->node_type)) {
-	if (!eNB_MAC->UE_free_ctrl[ue_num].raFlag)
-	    rrc_mac_remove_ue(mod_id,rnti);
-        rrc_rlc_remove_ue(&ctxt);
-        pdcp_remove_UE(&ctxt);
-      } else {
-        MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD);
-        F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = rnti;
-        F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK;
-        F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release
-        F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = NULL;
-        F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = 0;
-        itti_send_msg_to_task(TASK_CU_F1, mod_id, m);
-      }
+      if (!eNB_MAC->UE_free_ctrl[ue_num].raFlag)
+        rrc_mac_remove_ue(mod_id, rnti);
+      rrc_rlc_remove_ue(&ctxt);
+      pdcp_remove_UE(&ctxt);
 
       if(eNB_MAC->UE_free_ctrl[ue_num].removeContextFlg) {
 	struct rrc_eNB_ue_context_s *ue_context_pP = rrc_eNB_get_ue_context(RC.rrc[mod_id],rnti);
@@ -1141,16 +1064,8 @@ rrc_eNB_generate_SecurityModeCommand(
         rrc_eNB_mui,
         DCCH);
 
-  if (!NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    LOG_I(RRC,"calling rrc_data_req :securityModeCommand\n");
-    rrc_data_req(ctxt_pP,
-                 DCCH,
-                 rrc_eNB_mui++,
-                 SDU_CONFIRM_NO,
-                 size,
-                 buffer,
-                 PDCP_TRANSMISSION_MODE_CONTROL);
-  }
+  LOG_I(RRC, "calling rrc_data_req :securityModeCommand\n");
+  rrc_data_req(ctxt_pP, DCCH, rrc_eNB_mui++, SDU_CONFIRM_NO, size, buffer, PDCP_TRANSMISSION_MODE_CONTROL);
 }
 
 //-----------------------------------------------------------------------------
@@ -1316,17 +1231,15 @@ rrc_eNB_generate_RRCConnectionReestablishment(
         LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ  (SRB1) ---> MAC_eNB\n",
               PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
 
-        if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
-          rrc_mac_config_req_eNB_t tmp = {0};
-          tmp.CC_id = ue_context->primaryCC_id;
-          tmp.physicalConfigDedicated = ue_context->physicalConfigDedicated;
-          tmp.mac_MainConfig = ue_context->mac_MainConfig;
-          tmp.logicalChannelIdentity = 1;
-          tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
-          tmp.measGapConfig = ue_context->measGapConfig;
-          rrc_mac_config_req_eNB(module_id, &tmp);
-          break;
-        }
+        rrc_mac_config_req_eNB_t tmp = {0};
+        tmp.CC_id = ue_context->primaryCC_id;
+        tmp.physicalConfigDedicated = ue_context->physicalConfigDedicated;
+        tmp.mac_MainConfig = ue_context->mac_MainConfig;
+        tmp.logicalChannelIdentity = 1;
+        tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
+        tmp.measGapConfig = ue_context->measGapConfig;
+        rrc_mac_config_req_eNB(module_id, &tmp);
+        break;
       }  // if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1)
     }  // for (int cnt = 0; cnt < (*SRB_configList)->list.count; cnt++)
   }  // if (*SRB_configList != NULL)
@@ -1891,15 +1804,13 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
 )
 //-----------------------------------------------------------------------------
 {
-  if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
+  int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
 
-    if(UE_id != -1) {
-      RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1;
-      RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 20;
-    } else {
-      LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT " Generating LTE_RRCConnectionReestablishmentReject without UE_id(MAC) rnti %lx\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ctxt_pP->rntiMaybeUEid);
-    }
+  if(UE_id != -1) {
+    RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1;
+    RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 20;
+  } else {
+    LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT " Generating LTE_RRCConnectionReestablishmentReject without UE_id(MAC) rnti %lx\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ctxt_pP->rntiMaybeUEid);
   }
 
   T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rntiMaybeUEid));
@@ -2003,23 +1914,13 @@ rrc_eNB_generate_RRCConnectionRelease(
 
   pthread_mutex_unlock(&rrc_release_freelist);
 
-  if (NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD);
-    F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = ctxt_pP->rntiMaybeUEid;
-    F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK;
-    F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release
-    F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = buffer;
-    F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = size;
-    itti_send_msg_to_task(TASK_CU_F1, ctxt_pP->module_id, m);
-  } else {
-    rrc_data_req(ctxt_pP,
-                 DCCH,
-                 rrc_eNB_mui++,
-                 SDU_CONFIRM_NO,
-                 size,
-                 buffer,
-                 PDCP_TRANSMISSION_MODE_CONTROL);
-  }
+  rrc_data_req(ctxt_pP,
+               DCCH,
+               rrc_eNB_mui++,
+               SDU_CONFIRM_NO,
+               size,
+               buffer,
+               PDCP_TRANSMISSION_MODE_CONTROL);
 }
 
 uint8_t qci_to_priority[9]= {2,4,3,5,1,6,7,8,9};
@@ -2806,17 +2707,15 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
   LOG_D(RRC, "Processing the DRX configuration in RRC Connection Reconfiguration\n");
 
   /* Process the IE drx_Config */
-  if (NODE_IS_MONOLITHIC(rrc_inst->node_type)) {
-    mac_MainConfig->drx_Config = do_DrxConfig(cc_id, &rrc_inst->configuration, UEcap); // drx_Config IE
+  mac_MainConfig->drx_Config = do_DrxConfig(cc_id, &rrc_inst->configuration, UEcap); // drx_Config IE
 
-    if (mac_MainConfig->drx_Config == NULL) {
-      LOG_W(RRC, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n");
-    } else {
-      /* Send DRX configuration to MAC task to configure timers of local UE context */
-      rrc_mac_drx_config_req_t req = {.rnti = rnti, .drx_Configuration = mac_MainConfig->drx_Config};
-      eNB_Config_Local_DRX(module_id, &req);
-      LOG_D(RRC, "DRX configured in MAC Main Configuration for RRC Connection Reconfiguration\n");
-    }
+  if (mac_MainConfig->drx_Config == NULL) {
+    LOG_W(RRC, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n");
+  } else {
+    /* Send DRX configuration to MAC task to configure timers of local UE context */
+    rrc_mac_drx_config_req_t req = {.rnti = rnti, .drx_Configuration = mac_MainConfig->drx_Config};
+    eNB_Config_Local_DRX(module_id, &req);
+    LOG_D(RRC, "DRX configured in MAC Main Configuration for RRC Connection Reconfiguration\n");
   }
 
   /* End of CDRX configuration */
@@ -3319,16 +3218,13 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
                            , NULL);
 
   /* Refresh SRBs/DRBs */
-  if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    rrc_rlc_config_asn1_req(ctxt_pP,
-                            *SRB_configList2, // NULL,
-                            *DRB_configList,
-                            NULL
-                            , (LTE_PMCH_InfoList_r9_t *) NULL,
-                            0,
-                            0
-                           );
-  }
+  rrc_rlc_config_asn1_req(ctxt_pP,
+                          *SRB_configList2, // NULL,
+                          *DRB_configList,
+                          NULL,
+                          (LTE_PMCH_InfoList_r9_t *)NULL,
+                          0,
+                          0);
 
   free(Sparams);
   Sparams = NULL;
@@ -5213,16 +5109,13 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
                            , NULL);
 
   /* Refresh SRBs/DRBs */
-  if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    rrc_rlc_config_asn1_req(ctxt_pP,
-                            *SRB_configList2, // NULL,
-                            *DRB_configList,
-                            NULL
-                            , (LTE_PMCH_InfoList_r9_t *) NULL,
-                            0,
-                            0
-                           );
-  }
+  rrc_rlc_config_asn1_req(ctxt_pP,
+                          *SRB_configList2, // NULL,
+                          *DRB_configList,
+                          NULL,
+                          (LTE_PMCH_InfoList_r9_t *)NULL,
+                          0,
+                          0);
 
   free(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ);
   quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = NULL;
@@ -5268,14 +5161,7 @@ rrc_eNB_configure_rbs_handover(struct rrc_eNB_ue_context_s *ue_context_p, protoc
                            NULL,
                            (LTE_PMCH_InfoList_r9_t *) NULL, NULL);
 
-  if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    rrc_rlc_config_asn1_req(ctxt_pP,
-                            ue_context_p->ue_context.SRB_configList,
-                            (LTE_DRB_ToAddModList_t *) NULL,
-                            (LTE_DRB_ToReleaseList_t *) NULL,
-                            (LTE_PMCH_InfoList_r9_t *) NULL, 0, 0
-                           );
-  }
+  rrc_rlc_config_asn1_req(ctxt_pP, ue_context_p->ue_context.SRB_configList, (LTE_DRB_ToAddModList_t *)NULL, (LTE_DRB_ToReleaseList_t *)NULL, (LTE_PMCH_InfoList_r9_t *)NULL, 0, 0);
 
   if (EPC_MODE_ENABLED) {
     rrc_eNB_process_security (
@@ -5331,21 +5217,19 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
   rnti_t rnti = ue_context_pP->ue_id_rnti;
   module_id_t module_id = ctxt_pP->module_id;
 
-  if (NODE_IS_MONOLITHIC(RC.rrc[module_id]->node_type)) {
-    int UE_id_mac = find_UE_id(module_id, rnti);
+  int UE_id_mac = find_UE_id(module_id, rnti);
 
-    if (UE_id_mac == -1) {
-      LOG_E(RRC, "Can't find UE_id(MAC) of UE rnti %x\n", rnti);
-      return;
-    }
+  if (UE_id_mac == -1) {
+    LOG_E(RRC, "Can't find UE_id(MAC) of UE rnti %x\n", rnti);
+    return;
+  }
 
-    UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[module_id]->UE_info.UE_sched_ctrl[UE_id_mac]);
+  UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[module_id]->UE_info.UE_sched_ctrl[UE_id_mac]);
 
-    if (UE_scheduling_control->cdrx_waiting_ack == true) {
-      UE_scheduling_control->cdrx_waiting_ack = false;
-      UE_scheduling_control->cdrx_configured = true; // Set to TRUE when RRC Connection Reconfiguration is received
-      LOG_I(RRC, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n");
-    }
+  if (UE_scheduling_control->cdrx_waiting_ack == true) {
+    UE_scheduling_control->cdrx_waiting_ack = false;
+    UE_scheduling_control->cdrx_configured = true; // Set to TRUE when RRC Connection Reconfiguration is received
+    LOG_I(RRC, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n");
   }
 
   /* End of CDRX processing */
@@ -5377,16 +5261,13 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
                            NULL);
 
   /* Refresh SRBs/DRBs */
-  if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-    rrc_rlc_config_asn1_req(ctxt_pP,
-                            SRB_configList, // NULL,
-                            DRB_configList,
-                            DRB_Release_configList2,
-                            (LTE_PMCH_InfoList_r9_t *) NULL,
-                            0,
-                            0
-                           );
-  }
+  rrc_rlc_config_asn1_req(ctxt_pP,
+                          SRB_configList, // NULL,
+                          DRB_configList,
+                          DRB_Release_configList2,
+                          (LTE_PMCH_InfoList_r9_t *)NULL,
+                          0,
+                          0);
 
   /* Set the SRB active in UE context */
   if (SRB_configList != NULL) {
@@ -5474,17 +5355,15 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
             DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity;
           }
 
-          if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
-            rrc_mac_config_req_eNB_t tmp = {0};
-            tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
-            tmp.rnti = ue_context_pP->ue_context.rnti;
-            tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
-            tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
-            tmp.logicalChannelIdentity = DRB2LCHAN[i];
-            tmp.logicalChannelConfig = DRB_configList->list.array[i]->logicalChannelConfig;
-            tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
-            rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
-          }
+          rrc_mac_config_req_eNB_t tmp = {0};
+          tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
+          tmp.rnti = ue_context_pP->ue_context.rnti;
+          tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
+          tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
+          tmp.logicalChannelIdentity = DRB2LCHAN[i];
+          tmp.logicalChannelConfig = DRB_configList->list.array[i]->logicalChannelConfig;
+          tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
+          rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
         } else {        // remove LCHAN from MAC/PHY
           if (DRB_configList->list.array[i]->logicalChannelIdentity) {
             DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity;
@@ -5493,15 +5372,13 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
           LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ  (DRB) ---> MAC_eNB\n",
                 PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
 
-          if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
-            rrc_mac_config_req_eNB_t tmp = {0};
-            tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
-            tmp.rnti = ue_context_pP->ue_context.rnti;
-            tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
-            tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
-            tmp.logicalChannelIdentity = DRB2LCHAN[i];
-            rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
-          }
+          rrc_mac_config_req_eNB_t tmp = {0};
+          tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
+          tmp.rnti = ue_context_pP->ue_context.rnti;
+          tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
+          tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
+          tmp.logicalChannelIdentity = DRB2LCHAN[i];
+          rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
         } // end else of if (ue_context_pP->ue_context.DRB_active[drb_id] == 0)
       } // end if (DRB_configList->list.array[i])
     } // end for (int i = 0; i < DRB_configList->list.count; i++)
@@ -5549,7 +5426,6 @@ rrc_eNB_generate_RRCConnectionSetup(
   LTE_LogicalChannelConfig_t             *SRB1_logicalChannelConfig;  //,*SRB2_logicalChannelConfig;
   LTE_SRB_ToAddModList_t                **SRB_configList;
   LTE_SRB_ToAddMod_t                     *SRB1_config;
-  MessageDef                             *message_p;
   T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rntiMaybeUEid));
   eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
   SRB_configList = &ue_p->SRB_configList;
@@ -5582,87 +5458,43 @@ rrc_eNB_generate_RRCConnectionSetup(
               "[MSG] RRC Connection Setup\n");
 
   // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE
-  switch (RC.rrc[ctxt_pP->module_id]->node_type) {
-    case ngran_eNB_CU    :
-    case ngran_ng_eNB_CU :
-    case ngran_gNB_CU    :
-    case ngran_gNB_CUCP  :
-      // create an ITTI message
-      /* TODO: F1 IDs ar missing in RRC */
-      message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, F1AP_DL_RRC_MESSAGE);
-      F1AP_DL_RRC_MESSAGE (message_p).rrc_container =  (uint8_t *)ue_p->Srb0.Tx_buffer.Payload;
-      F1AP_DL_RRC_MESSAGE (message_p).rrc_container_length = ue_p->Srb0.Tx_buffer.payload_size;
-      F1AP_DL_RRC_MESSAGE (message_p).gNB_CU_ue_id     = 0;
-      F1AP_DL_RRC_MESSAGE (message_p).gNB_DU_ue_id = 0;
-      F1AP_DL_RRC_MESSAGE (message_p).old_gNB_DU_ue_id  = 0xFFFFFFFF; // unknown
-      F1AP_DL_RRC_MESSAGE (message_p).rnti = ue_p->rnti;
-      F1AP_DL_RRC_MESSAGE (message_p).srb_id = CCCH;
-      F1AP_DL_RRC_MESSAGE (message_p).execute_duplication      = 1;
-      F1AP_DL_RRC_MESSAGE (message_p).RAT_frequency_priority_information.en_dc      = 0;
-      itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p);
-      LOG_D(RRC, "Send F1AP_DL_RRC_MESSAGE with ITTI\n");
-      break;
-
-    case ngran_eNB_DU    :
-    case ngran_gNB_DU  :
-      // nothing to do for DU
-      AssertFatal(1==0,"nothing to do for DU\n");
-      break;
-
-    case ngran_eNB:
-    case ngran_ng_eNB :
-    case ngran_gNB  :
-      if (*SRB_configList != NULL) {
-        for (int cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) {
-          if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) {
-            SRB1_config = (*SRB_configList)->list.array[cnt];
-
-            if (SRB1_config->logicalChannelConfig) {
-              if (SRB1_config->logicalChannelConfig->present ==
-                  LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) {
-                SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue;
-              } else {
-                SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
-              }
-            } else {
-              SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
-            }
-
-            LOG_D(RRC,
-                  PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ  (SRB1) ---> MAC_eNB\n",
-                  PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
+  if (*SRB_configList != NULL) {
+    for (int cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) {
+      if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) {
+        SRB1_config = (*SRB_configList)->list.array[cnt];
 
-            if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) {
-              rrc_mac_config_req_eNB_t tmp = {0};
-              tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
-              tmp.rnti = ue_context_pP->ue_context.rnti;
-              tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
-              tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
-              tmp.logicalChannelIdentity = 1;
-              tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
-              tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
-              rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
-              break;
-            }
+        if (SRB1_config->logicalChannelConfig) {
+          if (SRB1_config->logicalChannelConfig->present == LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) {
+            SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue;
+          } else {
+            SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
           }
+        } else {
+          SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue;
         }
 
+        LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT " RRC_eNB --- MAC_CONFIG_REQ  (SRB1) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
+
+        rrc_mac_config_req_eNB_t tmp = {0};
+        tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
+        tmp.rnti = ue_context_pP->ue_context.rnti;
+        tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
+        tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
+        tmp.logicalChannelIdentity = 1;
+        tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
+        tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
+        rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
         break;
-
-      default :
-        LOG_W(RRC, "Unknown node type %d\n", RC.rrc[ctxt_pP->module_id]->node_type);
       }
+    }
 
-      LOG_I(RRC,
-            PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d)\n",
-            PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
-            ue_p->Srb0.Tx_buffer.payload_size);
-      // activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
-      ue_context_pP->ue_context.ue_release_timer = 1;
-      // remove UE after 10 frames after RRCConnectionRelease is triggered
-      ue_context_pP->ue_context.ue_release_timer_thres = 1000;
-      /* init timers */
-      ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
+    LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT " [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d)\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ue_p->Srb0.Tx_buffer.payload_size);
+    // activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
+    ue_context_pP->ue_context.ue_release_timer = 1;
+    // remove UE after 10 frames after RRCConnectionRelease is triggered
+    ue_context_pP->ue_context.ue_release_timer_thres = 1000;
+    /* init timers */
+    ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
   }
 }
 
@@ -5777,19 +5609,6 @@ char openair_rrc_eNB_configuration(
 
   openair_rrc_on(&ctxt);
 
-  /*
-    RC.rrc[ctxt.module_id]->mcc= rrc_configuration_req->mcc;
-    RC.rrc[ctxt.module_id]->mnc= rrc_configuration_req->mnc;
-    RC.rrc[ctxt.module_id]->mnc_digit_length= rrc_configuration_req->mnc_digit_length;
-    RC.rrc[ctxt.module_id]->tac= rrc_configuration_req->tac;
-
-    LOG_W(RRC, "[inst %d] RRC->MCC/MSG->MCC %d/%d \n", ctxt.module_id, RC.rrc[ctxt.module_id]->mcc, rrc_configuration_req->mcc);
-    */
-  if (NODE_IS_CU(RC.rrc[ctxt.module_id]->node_type))
-    // msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SCTP_REQ);
-    // RCconfig_CU_F1(msg_p, enb_id);
-    setup_ngran_CU(RC.rrc[ctxt.module_id]);
-
   return 0;
 }
 
@@ -6072,16 +5891,7 @@ rrc_eNB_decode_ccch(
                                    , (LTE_PMCH_InfoList_r9_t *) NULL
                                    ,NULL);
 
-          if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-            rrc_rlc_config_asn1_req(ctxt_pP,
-                                    ue_context_p->ue_context.SRB_configList,
-                                    (LTE_DRB_ToAddModList_t *) NULL,
-                                    (LTE_DRB_ToReleaseList_t *) NULL
-                                    , (LTE_PMCH_InfoList_r9_t *) NULL,
-                                    0,0
-                                   );
-          }
-
+          rrc_rlc_config_asn1_req(ctxt_pP, ue_context_p->ue_context.SRB_configList, NULL, NULL, NULL, 0, 0);
         }
         break;
 
@@ -6141,18 +5951,8 @@ rrc_eNB_decode_ccch(
               if ((ue_context_p = rrc_eNB_ue_context_stmsi_exist(ctxt_pP, mme_code, m_tmsi))) {
                 LOG_I(RRC, " S-TMSI exists, ue_context_p %p, old rnti %x => %lx\n", ue_context_p, ue_context_p->ue_context.rnti, ctxt_pP->rntiMaybeUEid);
 
-                if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-		  LOG_I(PHY, "remove RNTI %04x\n", ue_context_p->ue_context.rnti);
-                  rrc_mac_remove_ue(ctxt_pP->module_id, ue_context_p->ue_context.rnti);
-                } else {
-                  MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD);
-                  F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = ctxt_pP->rntiMaybeUEid;
-                  F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK;
-                  F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release
-                  F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = NULL;
-                  F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = 0;
-                  itti_send_msg_to_task(TASK_CU_F1, ctxt_pP->module_id, m);
-                }
+                LOG_I(PHY, "remove RNTI %04x\n", ue_context_p->ue_context.rnti);
+                rrc_mac_remove_ue(ctxt_pP->module_id, ue_context_p->ue_context.rnti);
 
                 stmsi_received=1;
                 /* replace rnti in the context */
@@ -6226,17 +6026,7 @@ rrc_eNB_decode_ccch(
                   PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
                   random_value);
 
-            if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type))
-              rrc_mac_remove_ue(ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
-            else if (NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-              MessageDef *m = itti_alloc_new_message(TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_CMD);
-              F1AP_UE_CONTEXT_RELEASE_CMD(m).rnti = ctxt_pP->rntiMaybeUEid;
-              F1AP_UE_CONTEXT_RELEASE_CMD(m).cause = F1AP_CAUSE_RADIO_NETWORK;
-              F1AP_UE_CONTEXT_RELEASE_CMD(m).cause_value = 10; // 10 = F1AP_CauseRadioNetwork_normal_release
-              F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container = NULL;
-              F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = 0;
-              itti_send_msg_to_task(TASK_CU_F1, ctxt_pP->module_id, m);
-            }
+            rrc_mac_remove_ue(ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
 
             return -1;
           }
@@ -6277,14 +6067,7 @@ rrc_eNB_decode_ccch(
                                  NULL,
                                  (LTE_PMCH_InfoList_r9_t *) NULL,NULL);
 
-        if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
-          rrc_rlc_config_asn1_req(ctxt_pP,
-                                  ue_context_p->ue_context.SRB_configList,
-                                  (LTE_DRB_ToAddModList_t *) NULL,
-                                  (LTE_DRB_ToReleaseList_t *) NULL,
-                                  (LTE_PMCH_InfoList_r9_t *) NULL, 0, 0
-                                 );
-        }
+        rrc_rlc_config_asn1_req(ctxt_pP, ue_context_p->ue_context.SRB_configList, NULL, NULL, NULL, 0, 0);
 
         break;
 
@@ -6665,9 +6448,6 @@ rrc_eNB_decode_dcch(
                 break;
               }
 
-              AssertFatal(!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type),
-                          "CU cannot decode DCCH: no access to RC.mac[]\n");
-
               if(RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1) {
                 LOG_I(RRC,
                       PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n",
@@ -6914,8 +6694,6 @@ rrc_eNB_decode_dcch(
           if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.choice.c1.
               present ==
               LTE_RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8) {
-            AssertFatal(!NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type),
-                        "should not be reached in DU\n");
             rrc_eNB_process_RRCConnectionSetupComplete(
               ctxt_pP,
               ue_context_p,
@@ -7312,112 +7090,6 @@ void rrc_eNB_reconfigure_DRBs (const protocol_ctxt_t *const ctxt_pP,
   rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(ctxt_pP, ue_context_pP, 0);
 }
 
-void handle_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
-  LOG_I(RRC,"Received F1 Setup Request from gNB_DU %llu (%s)\n",(unsigned long long int)f1_setup_req->gNB_DU_id,f1_setup_req->gNB_DU_name);
-  //uint16_t num_cells_to_activate = 0;
-  int cu_cell_ind=0;
-  MessageDef                         *msg_p = NULL;
-
-  //LOG_W(RRC,"num_cells_available %d \n", f1_setup_req->num_cells_available);
-  for (int i=0; i<f1_setup_req->num_cells_available; i++) {
-    // check that mcc/mnc match and grab MIB/SIB1
-    int found_cell=0;
-
-    for (int j=0; j<RC.nb_inst; j++) {
-      eNB_RRC_INST *rrc = RC.rrc[j];
-
-      if (rrc->configuration.mcc[0] == f1_setup_req->cell[i].mcc &&
-          rrc->configuration.mnc[0] == f1_setup_req->cell[i].mnc &&
-          rrc->nr_cellid == f1_setup_req->cell[i].nr_cellid) {
-        // check that CU rrc instance corresponds to mcc/mnc/cgi (normally cgi should be enough, but just in case)
-        rrc->carrier[0].MIB = malloc(f1_setup_req->mib_length[i]);
-        rrc->carrier[0].sizeof_MIB = f1_setup_req->mib_length[i];
-        LOG_W(RRC, "instance %d mib length %d\n", i, f1_setup_req->mib_length[i]);
-        LOG_W(RRC, "instance %d sib1 length %d\n", i, f1_setup_req->sib1_length[i]);
-        memcpy((void *)rrc->carrier[0].MIB,f1_setup_req->mib[i],f1_setup_req->mib_length[i]);
-        asn_dec_rval_t dec_rval = uper_decode_complete(NULL,
-                                  &asn_DEF_LTE_BCCH_BCH_Message,
-                                  (void **)&rrc->carrier[0].mib_DU,
-                                  f1_setup_req->mib[i],
-                                  f1_setup_req->mib_length[i]);
-        AssertFatal(dec_rval.code == RC_OK,
-                    "[eNB_DU %"PRIu8"] Failed to decode LTE_BCCH_BCH_MESSAGE (%zu bits)\n",
-                    j,
-                    dec_rval.consumed );
-        LTE_BCCH_BCH_Message_t *mib = &rrc->carrier[0].mib;
-        LTE_BCCH_BCH_Message_t *mib_DU = rrc->carrier[0].mib_DU;
-        mib->message.dl_Bandwidth = mib_DU->message.dl_Bandwidth;
-        mib->message.phich_Config.phich_Resource = mib_DU->message.phich_Config.phich_Resource;
-        mib->message.phich_Config.phich_Duration = mib_DU->message.phich_Config.phich_Duration;
-        rrc->carrier[0].SIB1 = malloc(f1_setup_req->sib1_length[i]);
-        rrc->carrier[0].sizeof_SIB1 = f1_setup_req->sib1_length[i];
-        memcpy((void *)rrc->carrier[0].SIB1,f1_setup_req->sib1[i],f1_setup_req->sib1_length[i]);
-        dec_rval = uper_decode_complete(NULL,
-                                        &asn_DEF_LTE_BCCH_DL_SCH_Message,
-                                        (void **)&rrc->carrier[0].siblock1_DU,
-                                        f1_setup_req->sib1[i],
-                                        f1_setup_req->sib1_length[i]);
-        AssertFatal(dec_rval.code == RC_OK,
-                    "[eNB_DU %"PRIu8"] Failed to decode LTE_BCCH_DLSCH_MESSAGE (%zu bits)\n",
-                    j,
-                    dec_rval.consumed );
-        // Parse message and extract SystemInformationBlockType1 field
-        LTE_BCCH_DL_SCH_Message_t *bcch_message = rrc->carrier[0].siblock1_DU;
-        AssertFatal(bcch_message->message.present == LTE_BCCH_DL_SCH_MessageType_PR_c1,
-                    "bcch_message->message.present != LTE_BCCH_DL_SCH_MessageType_PR_c1\n");
-        AssertFatal(bcch_message->message.choice.c1.present == LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1,
-                    "bcch_message->message.choice.c1.present != LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1\n");
-        rrc->carrier[0].sib1 = &bcch_message->message.choice.c1.choice.systemInformationBlockType1;
-        rrc->carrier[0].physCellId = f1_setup_req->cell[i].nr_pci;
-        // prepare F1_SETUP_RESPONSE
-
-        if (msg_p == NULL) {
-          msg_p = itti_alloc_new_message (TASK_CU_F1, 0,F1AP_SETUP_RESP);
-        }
-
-        F1AP_SETUP_RESP (msg_p).gNB_CU_name                                = rrc->node_name;
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].mcc                           = rrc->configuration.mcc[0];
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].mnc                           = rrc->configuration.mnc[0];
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].mnc_digit_length              = rrc->configuration.mnc_digit_length[0];
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].nr_cellid                     = rrc->nr_cellid;
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].nrpci                         = f1_setup_req->cell[i].nr_pci;
-        int num_SI= 0;
-        if (rrc->carrier[0].SIB23) {
-          F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container[2+num_SI]        = rrc->carrier[0].SIB23;
-          F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container_length[2+num_SI] = rrc->carrier[0].sizeof_SIB23;
-          //printf("SI %d size %d: ", 0, F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container_length[2+num_SI]);
-          //for (int n = 0; n < F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container_length[2+num_SI]; n++)
-          //  printf("%02x ", F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container[2+num_SI][n]);
-          //printf("\n");
-          num_SI++;
-        }
-
-        F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].num_SI = num_SI;
-        cu_cell_ind++;
-        found_cell=1;
-        F1AP_SETUP_RESP (msg_p).num_cells_to_activate = cu_cell_ind;
-        // send ITTI message to F1AP-CU task
-        itti_send_msg_to_task (TASK_CU_F1, ENB_MODULE_ID_TO_INSTANCE(j), msg_p);
-        break;
-      } else {// setup_req mcc/mnc match rrc internal list element
-        LOG_W(RRC,"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d \n",
-              j, rrc->configuration.mcc[0], f1_setup_req->cell[i].mcc,rrc->configuration.mnc[0], f1_setup_req->cell[i].mnc);
-      }
-    }// for (int j=0;j<RC.nb_inst;j++)
-
-    if (found_cell==0) {
-      AssertFatal(1==0,"No cell found\n");
-      /*msg_p = itti_alloc_new_message (TASK_CU_F1, 0,F1AP_SETUP_FAILURE);
-      F1AP_SETUP_RESP (msg_p).cause                             = rrc->node_name;
-      F1AP_SETUP_RESP (msg_p).time_to_wait                      = rrc->node_id;
-      F1AP_SETUP_RESP (msg_p).criticality_diagnostics           = rrc->node_name;*/
-    }
-
-    // handle other failure cases
-  }//for (int i=0;i<f1_setup_req->num_cells_available;i++)
-}
-
-
 // ignore 5GNR fields for now, just take MIB and SIB1
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -7665,7 +7337,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
               ue_context_p->ue_context.rnti,
               ue_context_p->ue_context.ue_release_timer_thres_s1);
 
-        if (EPC_MODE_ENABLED && !NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type))
+        if (EPC_MODE_ENABLED)
           rrc_eNB_generate_RRCConnectionRelease(ctxt_pP, ue_context_p);
         else
           removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
@@ -7719,7 +7391,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
           ue_context_p->ue_context.ue_release_timer_rrc = 1;
           ue_context_p->ue_context.ue_release_timer_thres_rrc = 100;
 
-          if (EPC_MODE_ENABLED && !NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type)) {
+          if (EPC_MODE_ENABLED) {
             if (rrc_release_info.RRC_release_ctrl[release_num].flag == 4) { // if timer_s1 == 0
               rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_CPLT(ctxt_pP->module_id,
                   ue_context_p->ue_context.eNB_ue_s1ap_id);
@@ -7744,7 +7416,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
             if (rrc_ue_s1ap_ids != NULL) {
               rrc_eNB_S1AP_remove_ue_ids(RC.rrc[ctxt_pP->module_id], rrc_ue_s1ap_ids);
             }
-          } /* EPC_MODE_ENABLED && !NODE_IS_DU */
+          } /* EPC_MODE_ENABLED */
 
           rrc_release_info.RRC_release_ctrl[release_num].flag = 0;
           rrc_release_info.num_UEs--;
@@ -7938,47 +7610,35 @@ void rrc_eNB_process_AdditionResponseInformation(const module_id_t enb_mod_idP,
   int size;
   ue_context = rrc_eNB_get_ue_context(RC.rrc[enb_mod_idP], m->rnti);
 
-  if (ue_context) {
-    ue_context->ue_context.nb_of_modify_endc_e_rabs = m->nb_e_rabs_admitted_tobeadded;
+  if (ue_context == NULL) {
+    LOG_E(RRC, "no ue_context for RNTI %x\n", m->rnti);
+    return;
+  }
 
-    ue_context->ue_context.gnb_rnti = m->SgNB_ue_x2_id;
-    ue_context->ue_context.gnb_x2_assoc_id = m->gnb_x2_assoc_id;
+  ue_context->ue_context.nb_of_modify_endc_e_rabs = m->nb_e_rabs_admitted_tobeadded;
+  ue_context->ue_context.gnb_rnti = m->SgNB_ue_x2_id;
+  ue_context->ue_context.gnb_x2_assoc_id = m->gnb_x2_assoc_id;
 
-    int j=0;
+  int j = 0;
 
-    while(j < m->nb_e_rabs_admitted_tobeadded) {
-      for (int e_rab_idx=0; e_rab_idx<ue_context->ue_context.setup_e_rabs; e_rab_idx++) {
-        //Update ue_context information with gNB's address and new GTP tunnel ID
-        if( ue_context->ue_context.e_rab[e_rab_idx].param.e_rab_id == m->e_rabs_admitted_tobeadded[j].e_rab_id) {
-          memcpy(ue_context->ue_context.gnb_gtp_endc_addrs[e_rab_idx].buffer,
-                 m->e_rabs_admitted_tobeadded[j].gnb_addr.buffer,
-                 m->e_rabs_admitted_tobeadded[j].gnb_addr.length);
-          ue_context->ue_context.gnb_gtp_endc_addrs[e_rab_idx].length = m->e_rabs_admitted_tobeadded[j].gnb_addr.length;
-          ue_context->ue_context.gnb_gtp_endc_teid[e_rab_idx] = m->e_rabs_admitted_tobeadded[j].gtp_teid;
-          ue_context->ue_context.e_rab[e_rab_idx].status = E_RAB_STATUS_TOMODIFY;
-          break;
-        }
+  while (j < m->nb_e_rabs_admitted_tobeadded) {
+    for (int e_rab_idx = 0; e_rab_idx < ue_context->ue_context.setup_e_rabs; e_rab_idx++) {
+      // Update ue_context information with gNB's address and new GTP tunnel ID
+      if (ue_context->ue_context.e_rab[e_rab_idx].param.e_rab_id == m->e_rabs_admitted_tobeadded[j].e_rab_id) {
+        memcpy(ue_context->ue_context.gnb_gtp_endc_addrs[e_rab_idx].buffer, m->e_rabs_admitted_tobeadded[j].gnb_addr.buffer, m->e_rabs_admitted_tobeadded[j].gnb_addr.length);
+        ue_context->ue_context.gnb_gtp_endc_addrs[e_rab_idx].length = m->e_rabs_admitted_tobeadded[j].gnb_addr.length;
+        ue_context->ue_context.gnb_gtp_endc_teid[e_rab_idx] = m->e_rabs_admitted_tobeadded[j].gtp_teid;
+        ue_context->ue_context.e_rab[e_rab_idx].status = E_RAB_STATUS_TOMODIFY;
+        break;
       }
-
-      j++;
     }
 
-    PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt,
-                                  0,
-                                  ENB_FLAG_YES,
-                                  m->rnti,
-                                  0, 0);
-    size = rrc_eNB_generate_RRCConnectionReconfiguration_endc(&ctxt, ue_context, buffer, 8192, scg_CellGroupConfig, nr1_conf);
-    rrc_data_req(&ctxt,
-                 DCCH,
-                 rrc_eNB_mui++,
-                 SDU_CONFIRM_NO,
-                 size,
-                 buffer,
-                 PDCP_TRANSMISSION_MODE_CONTROL);
-  } else {
-    LOG_E(F1AP, "no ue_context for RNTI %x, acknowledging release\n", m->rnti);
+    j++;
   }
+
+  PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, 0, ENB_FLAG_YES, m->rnti, 0, 0);
+  size = rrc_eNB_generate_RRCConnectionReconfiguration_endc(&ctxt, ue_context, buffer, 8192, scg_CellGroupConfig, nr1_conf);
+  rrc_data_req(&ctxt, DCCH, rrc_eNB_mui++, SDU_CONFIRM_NO, size, buffer, PDCP_TRANSMISSION_MODE_CONTROL);
 }
 
 void rrc_eNB_process_ENDC_DC_prep_timeout(module_id_t module_id, x2ap_ENDC_dc_prep_timeout_t *m)
@@ -8287,13 +7947,6 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
       openair_rrc_eNB_configuration(ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_CONFIGURATION_REQ(msg_p));
       break;
 
-    /* Messages from F1AP task */
-    case F1AP_SETUP_REQ:
-        AssertFatal(NODE_IS_CU(RC.rrc[instance]->node_type), "should not receive F1AP_SETUP_REQUEST, need call by CU!\n");
-        LOG_I(RRC, "[eNB %ld] Received %s : %p\n", instance, msg_name_p, &F1AP_SETUP_REQ(msg_p));
-      handle_f1_setup_req(&F1AP_SETUP_REQ(msg_p));
-      break;
-
     case RRC_SUBFRAME_PROCESS:
       rrc_subframe_process(&RRC_SUBFRAME_PROCESS(msg_p).ctxt, RRC_SUBFRAME_PROCESS(msg_p).CC_id);
       break;
diff --git a/openair2/RRC/LTE/rrc_eNB_M2AP.c b/openair2/RRC/LTE/rrc_eNB_M2AP.c
index 550bb7c2bc1938e422c73e56de1abdf253d3250a..3b4818d534afcd1374e677b0db355fbe3de62265 100644
--- a/openair2/RRC/LTE/rrc_eNB_M2AP.c
+++ b/openair2/RRC/LTE/rrc_eNB_M2AP.c
@@ -276,15 +276,13 @@ static void rrc_M2AP_init_MBMS(
                              , &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9)
                              ,NULL);
 
-    if (!NODE_IS_CU(RC.rrc[enb_mod_idP]->node_type)) {
-      rrc_rlc_config_asn1_req(&ctxt,
-                              NULL, // LTE_SRB_ToAddModList
-                              NULL,   // LTE_DRB_ToAddModList
-                              NULL,   // DRB_ToReleaseList
-                              &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9)
-                              ,0, 0
-                              );
-    }
+    rrc_rlc_config_asn1_req(&ctxt,
+                            NULL, // LTE_SRB_ToAddModList
+                            NULL,   // LTE_DRB_ToAddModList
+                            NULL,   // DRB_ToReleaseList
+                            &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9)
+                            ,0, 0
+                            );
             //rrc_mac_config_req();
   }
 }
@@ -298,8 +296,6 @@ static void rrc_M2AP_init_MCCH(
 ){
 
     int                                 sync_area = 0;
-    // initialize RRC_eNB_INST MCCH entry
-    eNB_RRC_INST *rrc = RC.rrc[enb_mod_idP];
   
     RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE =
       malloc(RC.rrc[enb_mod_idP]->carrier[CC_id].num_mbsfn_sync_area * sizeof(uint8_t *));
@@ -353,13 +349,11 @@ static void rrc_M2AP_init_MCCH(
       RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESS_COUNTING[sync_area].Active = 1;
     }
 
-    if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-      rrc_mac_config_req_eNB_t tmp = {0};
-      tmp.CC_id = CC_id;
-      tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
-      tmp.mbms_AreaConfiguration = RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message;
-      rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
-    }
+    rrc_mac_config_req_eNB_t tmp = {0};
+    tmp.CC_id = CC_id;
+    tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
+    tmp.mbms_AreaConfiguration = RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message;
+    rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
 
     return;
 }
@@ -599,18 +593,16 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
     return(-1);
   }
 
- carrier->MBMS_flag =1;
-
- if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-   rrc_mac_config_req_eNB_t tmp = {0};
-   tmp.CC_id = CC_id;
-   tmp.rnti = 0xfffd;
-   tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
-   tmp.MBMS_Flag = carrier->MBMS_flag;
-   tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
-   tmp.FeMBMS_Flag = carrier->FeMBMS_flag;
-   rrc_mac_config_req_eNB(Mod_id, &tmp);
- }
+  carrier->MBMS_flag = 1;
+
+  rrc_mac_config_req_eNB_t tmp = {0};
+  tmp.CC_id = CC_id;
+  tmp.rnti = 0xfffd;
+  tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
+  tmp.MBMS_Flag = carrier->MBMS_flag;
+  tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
+  tmp.FeMBMS_Flag = carrier->FeMBMS_flag;
+  rrc_mac_config_req_eNB(Mod_id, &tmp);
 
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
  
@@ -856,15 +848,13 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2(
     return(-1);
   }
 
- carrier->MBMS_flag =1;
+  carrier->MBMS_flag = 1;
 
- if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-   rrc_mac_config_req_eNB_t tmp = {0};
-   tmp.CC_id = CC_id;
-   tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
-   tmp.MBMS_Flag = carrier->MBMS_flag;
-   rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
- }
+  rrc_mac_config_req_eNB_t tmp = {0};
+  tmp.CC_id = CC_id;
+  tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
+  tmp.MBMS_Flag = carrier->MBMS_flag;
+  rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
 
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
  
@@ -1001,13 +991,11 @@ static uint8_t rrc_M2AP_do_SIB23_SIB13(
     return(-1);
   }
 
- if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-   rrc_mac_config_req_eNB_t tmp = {0};
-   tmp.CC_id = CC_id;
-   tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
-   tmp.MBMS_Flag = carrier->MBMS_flag;
-   rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
-  }
+  rrc_mac_config_req_eNB_t tmp = {0};
+  tmp.CC_id = CC_id;
+  tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
+  tmp.MBMS_Flag = carrier->MBMS_flag;
+  rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
 
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
  
@@ -1250,16 +1238,14 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2_SIB13(
     return(-1);
   }
 
- carrier->MBMS_flag =1;
+  carrier->MBMS_flag = 1;
 
- if (NODE_IS_MONOLITHIC(rrc->node_type)) {
-   rrc_mac_config_req_eNB_t tmp = {0};
-   tmp.CC_id = CC_id;
-   tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
-   tmp.MBMS_Flag = carrier->MBMS_flag;
-   tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
-   rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
-  }
+  rrc_mac_config_req_eNB_t tmp = {0};
+  tmp.CC_id = CC_id;
+  tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
+  tmp.MBMS_Flag = carrier->MBMS_flag;
+  tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
+  rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
 
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
  
diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c
index e2e8e56f4a8a590557e1cc7d560be17a1023dd04..fbc19d0a472393fc5b4123f40ce92d27cf3a8d94 100644
--- a/openair2/RRC/LTE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c
@@ -993,39 +993,6 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char
       //if(ue_context_p->ue_context.reestablishment_cause == ReestablishmentCause_spare1){}
       rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(&ctxt,ue_context_p);
     }
-
-    
-    if (NODE_IS_CU(RC.rrc[ctxt.module_id]->node_type)) {
-      struct eNB_RRC_INST_s *rrc= RC.rrc[0];
-      MessageDef *message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_SETUP_REQ);
-      f1ap_ue_context_setup_t *req=&F1AP_UE_CONTEXT_SETUP_REQ (message_p);
-      req->gNB_CU_ue_id     = 0;
-      req->gNB_DU_ue_id = 0;
-      req->rnti = ue_context_p->ue_context.rnti;
-      req->mcc  = rrc->configuration.mcc[0];
-      req->mnc  = rrc->configuration.mnc[0];
-      req->mnc_digit_length = rrc->configuration.mnc_digit_length[0];
-      req->nr_cellid        = rrc->nr_cellid;
-      req->srbs_to_be_setup = malloc(sizeof(f1ap_srb_to_be_setup_t));
-      req->srbs_to_be_setup_length = 1;
-      f1ap_srb_to_be_setup_t *SRBs=req->srbs_to_be_setup;
-      SRBs[0].srb_id=CCCH;
-      req->drbs_to_be_setup_length = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_e_rabs;
-      req->drbs_to_be_setup = malloc(req->drbs_to_be_setup_length * sizeof(f1ap_drb_to_be_setup_t));
-      f1ap_drb_to_be_setup_t *DRBs=req->drbs_to_be_setup;
-      for (int i = 0; i < req->drbs_to_be_setup_length ; i++) {
-	DRBs[i].drb_id=S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].e_rab_id;
-	DRBs[i].rlc_mode = RLC_MODE_AM;
-	DRBs[i].up_ul_tnl[0].tl_address = inet_addr(rrc->eth_params_s.my_addr);
-	DRBs[i].up_ul_tnl[0].port=rrc->eth_params_s.my_portd;
-	DRBs[i].up_ul_tnl_length = 1;
-	DRBs[i].up_dl_tnl[0].tl_address = inet_addr(rrc->eth_params_s.remote_addr);
-	DRBs[i].up_dl_tnl[0].port=rrc->eth_params_s.remote_portd;
-	DRBs[i].up_dl_tnl_length = 1;
-      }
-      LOG_I(RRC, "Send F1AP_UE_CONTEXT_SETUP_REQ with ITTI\n");
-      itti_send_msg_to_task (TASK_CU_F1, 0, message_p);
-    }
   }
   
   return (0);
diff --git a/openair2/RRC/NR/L2_nr_interface.c b/openair2/RRC/NR/L2_nr_interface.c
index 9452a1f1a9a39857e8a0e75ff8b5732e9d3941d6..0e56a5f57272ca4484d135559f7fd85a53b99017 100644
--- a/openair2/RRC/NR/L2_nr_interface.c
+++ b/openair2/RRC/NR/L2_nr_interface.c
@@ -28,7 +28,6 @@
  * \email: raymond.knopp@eurecom.fr, kroempa@gmail.com
  */
 
-#include <f1ap_du_rrc_message_transfer.h>
 #include "platform_types.h"
 #include "nr_rrc_defs.h"
 #include "nr_rrc_extern.h"
@@ -44,7 +43,6 @@
 #include "NR_BCCH-BCH-Message.h"
 #include "rrc_gNB_UE_context.h"
 #include <openair2/RRC/NR/MESSAGES/asn1_msg.h>
-#include <openair2/F1AP/f1ap_du_rrc_message_transfer.h>
 
 
 extern RAN_CONTEXT_t RC;
@@ -101,7 +99,7 @@ nr_rrc_data_req(
   /* Hack: only trigger PDCP if in CU, otherwise it is triggered by RU threads
    * Ideally, PDCP would not neet to be triggered like this but react to ITTI
    * messages automatically */
-  if (ctxt_pP->enb_flag && NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type))
+  if (ctxt_pP->enb_flag)
     pdcp_run(ctxt_pP);
 
   return true; // TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
diff --git a/openair3/COMMON/messages_types.h b/openair3/COMMON/messages_types.h
index f8fd4642882ad5a8da84bd19c6513519b02edf71..1c16011af214ef52062d8fae752976d71f842fbd 100644
--- a/openair3/COMMON/messages_types.h
+++ b/openair3/COMMON/messages_types.h
@@ -31,7 +31,6 @@
 #include "ip_forward_messages_types.h"
 #include "s11_messages_types.h"
 #include "s1ap_messages_types.h"
-#include "f1ap_messages_types.h"
 #include "nas_messages_types.h"
 #include "s6a_messages_types.h"
 #include "sctp_messages_types.h"
diff --git a/openair3/M3AP/m3ap_MCE_generate_messsages.c b/openair3/M3AP/m3ap_MCE_generate_messsages.c
index 218fb965d3e5e51155871e48b7ab9a2ce097f593..0bedc0e4a230c14f417460a782141ff2fcc434fa 100644
--- a/openair3/M3AP/m3ap_MCE_generate_messsages.c
+++ b/openair3/M3AP/m3ap_MCE_generate_messsages.c
@@ -92,7 +92,7 @@ int m2ap_eNB_generate_m2_setup_request(
   //ie->id                        = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
   //ie->criticality               = M2AP_Criticality_reject;
   //ie->value.present             = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
-  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, f1ap_du_data->gNB_eNB_id);
+  //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID, 0);
   //asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* optional */
diff --git a/openair3/M3AP/m3ap_MCE_interface_management.c b/openair3/M3AP/m3ap_MCE_interface_management.c
index f17513e7f8b38c823ccb26788d6e391d9f80e6aa..82fc044d3ed45e6c2562dc5440e03e8f87ecfb49 100644
--- a/openair3/M3AP/m3ap_MCE_interface_management.c
+++ b/openair3/M3AP/m3ap_MCE_interface_management.c
@@ -128,7 +128,7 @@ int MCE_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m3ap_session_start
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStartResponse_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
  /* mandatory */
@@ -137,7 +137,7 @@ int MCE_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m3ap_session_start
   ie->id                        = M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStartResponse_IEs__value_PR_MME_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -289,7 +289,7 @@ int MCE_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m3ap_session_start_
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStopResponse_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
  /* mandatory */
@@ -298,7 +298,7 @@ int MCE_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m3ap_session_start_
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStopResponse_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -388,7 +388,7 @@ int MCE_send_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance, m3ap_mbms_session
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionUpdateResponse_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
  /* mandatory */
@@ -397,7 +397,7 @@ int MCE_send_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance, m3ap_mbms_session
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionUpdateResponse_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
 
@@ -494,7 +494,7 @@ int MCE_send_M3_SETUP_REQUEST(m3ap_MCE_instance_t *instance_p, m3ap_MCE_data_t *
 //  //ie->id                        = M3AP_ProtocolIE_ID_id_gNB_MCE_ID;
 //  //ie->criticality               = M3AP_Criticality_reject;
 //  //ie->value.present             = M3AP_M3SetupRequestIEs__value_PR_GNB_MCE_ID;
-//  //asn_int642INTEGER(&ie->value.choice.GNB_MCE_ID, f1ap_du_data->gNB_MCE_id);
+//  //asn_int642INTEGER(&ie->value.choice.GNB_MCE_ID, 0);
 //  //asn1cSeqAdd(&out->protocolIEs.list, ie);
 //
 //     /* optional */
diff --git a/openair3/M3AP/m3ap_MME.c b/openair3/M3AP/m3ap_MME.c
index 4d73caff232568afa588f13fbacee92b29743a90..cb3b7f96db8b3be470b42b142ab5c862b78868e5 100644
--- a/openair3/M3AP/m3ap_MME.c
+++ b/openair3/M3AP/m3ap_MME.c
@@ -111,9 +111,7 @@ void m3ap_MME_handle_sctp_association_resp(instance_t instance, sctp_new_associa
               sctp_new_association_resp->ulp_cnx_id);
 
     if (sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN)
-      //proto_agent_stop(instance);
-      //f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
-    return; // exit -1 for debugging
+      return;
   }
 
    // go to an init func
diff --git a/openair3/M3AP/m3ap_MME_interface_management.c b/openair3/M3AP/m3ap_MME_interface_management.c
index 4b866fad2fb35e10bfcf1de11d3b4a1bfc7a8f01..2926261f0ec800dd81d638a1cb1e74e034edbcaf 100644
--- a/openair3/M3AP/m3ap_MME_interface_management.c
+++ b/openair3/M3AP/m3ap_MME_interface_management.c
@@ -93,7 +93,7 @@ int MME_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
   ie->id                        = M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStartRequest_IEs__value_PR_MME_MBMS_M3AP_ID;
-  //ie->value.choice.MME_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MME_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -343,7 +343,7 @@ int MME_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m3ap_session_stop_re
   ie->id                        = M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStopRequest_IEs__value_PR_MME_MBMS_M3AP_ID;
-  //ie->value.choice.MME_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MME_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -352,7 +352,7 @@ int MME_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m3ap_session_stop_re
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionStopRequest_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
 
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
@@ -857,7 +857,7 @@ int MME_send_MBMS_SESSION_UPDATE_REQUEST(instance_t instance, m3ap_mbms_session_
   ie->id                        = M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionUpdateRequest_IEs__value_PR_MME_MBMS_M3AP_ID;
-  //ie->value.choice.MME_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MME_MBMS_M3AP_ID = 0;
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
   /* mandatory */
@@ -866,7 +866,7 @@ int MME_send_MBMS_SESSION_UPDATE_REQUEST(instance_t instance, m3ap_mbms_session_
   ie->id                        = M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID;
   ie->criticality               = M3AP_Criticality_reject;
   ie->value.present             = M3AP_MBMSSessionUpdateRequest_IEs__value_PR_MCE_MBMS_M3AP_ID;
-  //ie->value.choice.MCE_MBMS_M3AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
+  //ie->value.choice.MCE_MBMS_M3AP_ID = 0;
 
   asn1cSeqAdd(&out->protocolIEs.list, ie);
 
diff --git a/openair3/MME_APP/mme_app.c b/openair3/MME_APP/mme_app.c
index 43a5df2ac8038b5829aefef0160036cc539eac67..61ec0641e3f15d0b996d60004f82efaecd3d1f83 100644
--- a/openair3/MME_APP/mme_app.c
+++ b/openair3/MME_APP/mme_app.c
@@ -85,17 +85,7 @@ extern RAN_CONTEXT_t RC;
 //        LOG_I(ENB_APP,"[MCE %d] MCE_app_register via M3AP for instance %d\n", mce_id, ENB_MODULE_ID_TO_INSTANCE(mce_id));
 //        itti_send_msg_to_task (TASK_M3AP, ENB_MODULE_ID_TO_INSTANCE(mce_id), msg_p);
 //
-//      //if (NODE_IS_DU(node_type)) { // F1AP registration
-//      //  // configure F1AP here for F1C
-//      //  LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n");
-//      //  msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SETUP_REQ);
-//      //  RCconfig_DU_F1(msg_p, enb_id);
-//
-//      //  LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
-//      //  itti_send_msg_to_task (TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
-//      //  // configure GTPu here for F1U
-//      //}
-//      //else { // S1AP registration
+//      //{ // S1AP registration
 //      //  /* note:  there is an implicit relationship between the data structure and the message name */
 //      //  msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
 //      //  RCconfig_S1(msg_p, enb_id);
@@ -313,12 +303,9 @@ void *MME_app_task(void *args_p) {
       break;
 
    // case M3AP_SETUP_RESP:
-   //   //AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/MCE\n");
 
    //   //LOG_I(MME_APP, "Received %s: associated ngran_MCE_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
-   //         //F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
    //   
-   //   //handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
    //   handle_m3ap_setup_resp(&M3AP_SETUP_RESP(msg_p));
 
    //   DevAssert(register_mce_pending > 0);
diff --git a/openair3/MME_APP/mme_config.h b/openair3/MME_APP/mme_config.h
index 6500404d63a5adfdb7268afbd486abe2d2262471..1afe619008bb7127684e2e4562a49dd4250ad714 100644
--- a/openair3/MME_APP/mme_config.h
+++ b/openair3/MME_APP/mme_config.h
@@ -40,7 +40,6 @@
 #include "PHY/impl_defs_top.h"
 #include "PHY/defs_eNB.h"
 #include "s1ap_messages_types.h"
-#include "f1ap_messages_types.h"
 #include "LTE_SystemInformationBlockType2.h"
 #include "rrc_messages_types.h"
 #include "RRC/LTE/rrc_defs.h"