diff --git a/CMakeLists.txt b/CMakeLists.txt
index fe41692e800a09a3cb09d29d4292b43be4fddd11..1f88da21fe926d652f07098c735bafa6b1827c4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -334,7 +334,9 @@ add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"")
 
 # Debug related options
 #########################################
-add_boolean_option(DEBUG_ASN1C      False "ASN1 coder/decoder Debug traces, see common/utils/config.h, the logs are regular OAI logs, in the log group 'ASN'")
+add_boolean_option(ASN_EMIT_DEBUG      True "ASN1 coder/decoder Debug")
+add_boolean_option(ASN_THREAD_SAFE     True "ASN1 coder/decoder Debug")
+add_boolean_option(MSG_PRINT           True "print debug messages")
 add_boolean_option(DISABLE_XER_PRINT   False "print XER Format")
 add_boolean_option(XER_PRINT           False "print XER Format")
 add_boolean_option(DEBUG_PDCP_PAYLOAD  False "print PDCP PDU to stdout")  # if true, make sure that global and PDCP log levels are trace
diff --git a/doc/SW_archi.md b/doc/SW_archi.md
index 01d3c377d4382b510207199e60b9c5c6c9ca9d42..5186c60bfd6e5fd30499487c6c41c750887cbde5 100644
--- a/doc/SW_archi.md
+++ b/doc/SW_archi.md
@@ -344,7 +344,8 @@ pdcp_config_set_security(): not yet developped
 
 nr_DRB_preconfiguration(): the mac layer calls this for ???
 
-nr_rrc_pdcp_config_asn1_req() adds a UE in pdcp, pdcp_remove_UE() removes it
+nr_pdcp_add_srbs() adds UE SRBs in pdcp, pdcp_remove_UE() removes it
+nr_pdcp_add_drbs() adds UE DRBs in pdcp, pdcp_remove_UE() removes it
 
 # GTP
 Gtp + UDP are two twin threads performing the data plane interface to the core network
diff --git a/openair2/E1AP/e1ap.c b/openair2/E1AP/e1ap.c
index 60b0bed2d37e722be36a8c3bab73ac431d193d4f..9f1bcea1dfeb880c1575d148f918962c5a24bba9 100644
--- a/openair2/E1AP/e1ap.c
+++ b/openair2/E1AP/e1ap.c
@@ -507,6 +507,12 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
   E1AP_E1AP_PDU_t pdu = {0};
   /* Create */
   /* 0. pdu Type */
+  e1ap_setup_req_t *setup = &getCxtE1(CPtype, instance)->setupReq;
+  if (!setup) {
+    LOG_E(E1AP, "got send_BEARER_CONTEXT_SETUP_REQUEST on not established instance (%ld)\n", instance);
+    return -1;
+  }
+
   pdu.present = E1AP_E1AP_PDU_PR_initiatingMessage;
   asn1cCalloc(pdu.choice.initiatingMessage, msg);
   msg->procedureCode = E1AP_ProcedureCode_id_bearerContextSetup;
@@ -527,7 +533,8 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
   ieC2->criticality                = E1AP_Criticality_reject;
   ieC2->value.present              = E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation;
   ieC2->value.choice.SecurityInformation.securityAlgorithm.cipheringAlgorithm = bearerCxt->cipheringAlgorithm;
-  OCTET_STRING_fromBuf(&ieC2->value.choice.SecurityInformation.uPSecuritykey.encryptionKey, bearerCxt->encryptionKey, strlen(bearerCxt->encryptionKey));
+  OCTET_STRING_fromBuf(&ieC2->value.choice.SecurityInformation.uPSecuritykey.encryptionKey,
+                       bearerCxt->encryptionKey, strlen(bearerCxt->encryptionKey));
   /* mandatory */
   /* c3. UE DL Aggregate Maximum Bit Rate */
   asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextSetupRequestIEs_t, ieC3);
@@ -541,7 +548,6 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
   ieC4->id                         = E1AP_ProtocolIE_ID_id_Serving_PLMN;
   ieC4->criticality                = E1AP_Criticality_ignore;
   ieC4->value.present              = E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity;
-  e1ap_setup_req_t *setup = &getCxtE1(CPtype, instance)->setupReq;
   PLMN_ID_t *servingPLMN = setup->plmns; // First PLMN is serving PLMN. TODO: Remove hard coding here
   MCC_MNC_TO_PLMNID(servingPLMN->mcc, servingPLMN->mnc, servingPLMN->mnc_digit_length, &ieC4->value.choice.PLMN_Identity);
   /* mandatory */
@@ -600,7 +606,6 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
     for(pdu_session_to_setup_t *i=bearerCxt->pduSession; i < bearerCxt->pduSession+bearerCxt->numPDUSessions; i++) {
       asn1cSequenceAdd(pdu2Setup->list, E1AP_PDU_Session_Resource_To_Setup_Item_t, ieC6_1);
       ieC6_1->pDU_Session_ID = i->sessionId;
-
       ieC6_1->pDU_Session_Type = i->sessionType;
 
       INT32_TO_OCTET_STRING(i->sst, &ieC6_1->sNSSAI.sST);
@@ -791,6 +796,12 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance) {
 
 int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
                                                  E1AP_E1AP_PDU_t *pdu) {
+  e1ap_bearer_setup_req_t *bearerCxt = &getCxtE1(CPtype, instance)->bearerSetupReq;
+  if (!bearerCxt) {
+    LOG_E(E1AP, "got BEARER_CONTEXT_SETUP_REQUEST on not established instance (%ld)\n", instance);
+    return -1;
+  }
+  
   DevAssert(pdu != NULL);
   AssertFatal(pdu->present == E1AP_E1AP_PDU_PR_initiatingMessage,
               "pdu->present != E1AP_E1AP_PDU_PR_initiatingMessage\n");
@@ -804,8 +815,6 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
   E1AP_BearerContextSetupRequest_t *in = &pdu->choice.initiatingMessage->value.choice.BearerContextSetupRequest;
   E1AP_BearerContextSetupRequestIEs_t *ie;
 
-  e1ap_bearer_setup_req_t *bearerCxt = &getCxtE1(CPtype, instance)->bearerSetupReq;
-
   MessageDef *msg = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ);
 
   LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
@@ -1207,6 +1216,11 @@ void *E1AP_CUCP_task(void *arg) {
         e1apCUCP_send_SETUP_RESPONSE(myInstance, &E1AP_SETUP_RESP(msg));
         break;
 
+    case E1AP_BEARER_CONTEXT_SETUP_REQ:
+      LOG_I(E1AP, "CUCP Task Received E1AP_BEARER_CONTEXT_SETUP_REQ\n");
+      e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(myInstance, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg));
+      break;
+
       default:
         LOG_E(E1AP, "Unknown message received in TASK_CUCP_E1\n");
         break;
diff --git a/openair2/E1AP/e1ap_common.c b/openair2/E1AP/e1ap_common.c
index dd92f9c100eaa2a622306d592c7693c4d9ec998b..8b995bc12f631790295b6bd34bc0ea1f76c4f9db 100644
--- a/openair2/E1AP/e1ap_common.c
+++ b/openair2/E1AP/e1ap_common.c
@@ -31,7 +31,7 @@ static e1ap_upcp_inst_t *e1ap_up_inst[NUMBER_OF_gNB_MAX] = {0};
 
 e1ap_upcp_inst_t *getCxtE1(E1_t type, instance_t instance) {
   AssertFatal( instance < sizeofArray(e1ap_cp_inst), "instance exceeds limit\n");
-  return type ? e1ap_up_inst[instance] : e1ap_cp_inst[instance];
+  return type == UPtype ? e1ap_up_inst[instance] : e1ap_cp_inst[instance];
 }
 
 int e1ap_assoc_id(E1_t type, instance_t instance) {
diff --git a/openair2/E1AP/e1ap_common.h b/openair2/E1AP/e1ap_common.h
index fdb3a96596107986e8a9a9443877a63146fb6767..2a28b542d5752aa64d1b0171676755ab49abefad 100644
--- a/openair2/E1AP/e1ap_common.h
+++ b/openair2/E1AP/e1ap_common.h
@@ -25,7 +25,7 @@
 #define E1AP_COMMON_H_
 
 #include "openair2/COMMON/e1ap_messages_types.h"
-
+//#define ASN_DEBUG( x... )  LOG_I(ASN, x)
 int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t length);
 
 e1ap_upcp_inst_t *getCxtE1(E1_t type, instance_t instance);
diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c
index 1d0c210158d4959d2b4b88e9f276fb6cca700d85..e65c53f259b1461630841286c1a1f5756e5ac39b 100644
--- a/openair2/GNB_APP/gnb_app.c
+++ b/openair2/GNB_APP/gnb_app.c
@@ -68,7 +68,6 @@ static void configure_nr_rrc(uint32_t gnb_id)
   msg_p = itti_alloc_new_message (TASK_GNB_APP, 0, NRRRC_CONFIGURATION_REQ);
 
   if (RC.nrrrc[gnb_id]) {
-    RC.nrrrc[gnb_id]->node_type=set_node_type();
     RCconfig_NRRRC(msg_p,gnb_id, RC.nrrrc[gnb_id]);
     
     LOG_I(GNB_APP, "RRC starting with node type %d\n", RC.nrrrc[gnb_id]->node_type);
@@ -143,7 +142,6 @@ void *gNB_app_task(void *args_p)
   uint32_t                        gnb_nb = RC.nb_nr_inst; 
   uint32_t                        gnb_id_start = 0;
   uint32_t                        gnb_id_end = gnb_id_start + gnb_nb;
-  uint32_t                        gnb_id;
   MessageDef                      *msg_p           = NULL;
   const char                      *msg_name        = NULL;
   instance_t                      instance;
@@ -172,13 +170,17 @@ void *gNB_app_task(void *args_p)
 
   RC.nrrrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *));
   LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.nrrrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.nrrrc);
-  for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) {
+  for (int gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) {
     RC.nrrrc[gnb_id] = (gNB_RRC_INST*)calloc(1,sizeof(gNB_RRC_INST));
     LOG_I(PHY, "%s() Creating RRC instance RC.nrrrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.nrrrc[gnb_id], gnb_id+1, gnb_id_end);
+    RC.nrrrc[gnb_id]->node_type=set_node_type();
     configure_nr_rrc(gnb_id);
   }
 
-  if (RC.nb_nr_inst > 0 && !get_softmodem_params()->nsa)  {
+  if (RC.nb_nr_inst > 0 &&
+      !get_softmodem_params()->nsa &&
+      !(RC.nrrrc[0]->node_type == ngran_gNB_DU))  {
+    // we start pdcp in both cuup (for drb) and cucp (for srb)
     init_pdcp();
   }
 
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 042352e8eac732d269d95ded5f2c1867ddfbecbe..25ea76cde3466a7af5f4e42bfe9248ea24317a8f 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -1036,72 +1036,45 @@ static void add_drb(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s,
   LOG_I(PDCP, "%s:%s:%d: added DRB for UE RNTI %x\n", __FILE__, __FUNCTION__, __LINE__, rnti);
 }
 
-bool nr_rrc_pdcp_config_asn1_req(const protocol_ctxt_t *const  ctxt_pP,
-                                 NR_SRB_ToAddModList_t  *const srb2add_list,
-                                 NR_DRB_ToAddModList_t  *const drb2add_list,
-                                 NR_DRB_ToReleaseList_t *const drb2release_list,
-                                 const uint8_t                   security_modeP,
-                                 uint8_t                  *const kRRCenc,
-                                 uint8_t                  *const kRRCint,
-                                 uint8_t                  *const kUPenc,
-                                 uint8_t                  *const kUPint,
-                                 LTE_PMCH_InfoList_r9_t  *pmch_InfoList_r9,
-                                 rb_id_t                 *const defaultDRB,
-                                 struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list)
-{
-  int rnti = ctxt_pP->rnti;
-  int i;
-
-  if (//ctxt_pP->enb_flag != 1 ||
-      ctxt_pP->module_id != 0 ||
-      ctxt_pP->instance != 0 ||
-      ctxt_pP->eNB_index != 0 ||
-      //ctxt_pP->configured != 2 ||
-      //srb2add_list == NULL ||
-      //drb2add_list != NULL ||
-      //drb2release_list != NULL ||
-      //security_modeP != 255 ||
-      //kRRCenc != NULL ||
-      //kRRCint != NULL ||
-      //kUPenc != NULL ||
-      pmch_InfoList_r9 != NULL /*||
-      defaultDRB != NULL */) {
-    LOG_I(PDCP,"Releasing DRBs, oops\n");
-    TODO;
-  }
-
+void nr_pdcp_add_srbs(eNB_flag_t enb_flag, rnti_t rnti,
+                   NR_SRB_ToAddModList_t  *const srb2add_list,
+                   const uint8_t security_modeP,
+                   uint8_t  *const kRRCenc,
+                   uint8_t *const  kRRCint) {
   if (srb2add_list != NULL) {
-    for (i = 0; i < srb2add_list->list.count; i++) {
-      add_srb(ctxt_pP->enb_flag,rnti, srb2add_list->list.array[i],
+    for (int i = 0; i < srb2add_list->list.count; i++) {
+      add_srb(enb_flag,rnti, srb2add_list->list.array[i],
               security_modeP & 0x0f, (security_modeP >> 4) & 0x0f,
               kRRCenc, kRRCint);
     }
   }
+  LOG_W(PDCP, "nr_pdcp_add_srbs() with void list\n");
+  if (kRRCenc)
+    free(kRRCenc);
+  if (kRRCint)
+    free(kRRCint);
+}
+
+void nr_pdcp_add_drbs(eNB_flag_t enb_flag, rnti_t rnti,
+                      NR_DRB_ToAddModList_t  *const drb2add_list,
+                      const uint8_t  security_modeP,
+                      uint8_t        *const kUPenc,
+                      uint8_t        *const kUPint,
+                      struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list) {
 
   if (drb2add_list != NULL) {
-    for (i = 0; i < drb2add_list->list.count; i++) {
-      add_drb(ctxt_pP->enb_flag, rnti, drb2add_list->list.array[i],
+    for (int i = 0; i < drb2add_list->list.count; i++) {
+      add_drb(enb_flag, rnti, drb2add_list->list.array[i],
               rlc_bearer2add_list->list.array[i]->rlc_Config,
               security_modeP & 0x0f, (security_modeP >> 4) & 0x0f,
               kUPenc, kUPint);
     }
-  }
-
-  /* update security */
-  if (kRRCint != NULL) {
-    /* todo */
-  }
-  
-  if (drb2release_list != NULL) {
-    // TODO
-  }
-
-  free(kRRCenc);
-  free(kRRCint);
-  free(kUPenc);
-  free(kUPint);
-
-  return 0;
+  } else
+    LOG_W(PDCP, "nr_pdcp_add_drbs() with void list\n");
+  if (kUPenc)
+    free(kUPenc);
+  if (kUPint)
+    free(kUPint);
 }
 
 /* Dummy function due to dependency from LTE libraries */
@@ -1188,21 +1161,14 @@ void nr_DRB_preconfiguration(uint16_t crnti)
   else{
     PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, crnti, 0, 0,0);
   }
-
-  nr_rrc_pdcp_config_asn1_req(
-    &ctxt,
-    (NR_SRB_ToAddModList_t *) NULL,
-    rbconfig->drb_ToAddModList ,
-    rbconfig->drb_ToReleaseList,
-    0,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    Rlc_Bearer_ToAdd_list);
-
+  
+  nr_pdcp_add_drbs(ctxt.enb_flag, ctxt.rnti,
+                   rbconfig->drb_ToAddModList ,
+                   0,
+                   NULL,
+                   NULL,
+                   Rlc_Bearer_ToAdd_list);
+  
   nr_rrc_rlc_config_asn1_req (&ctxt,
       (NR_SRB_ToAddModList_t *) NULL,
       rbconfig->drb_ToAddModList,
diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h
index b90cf4dfa4cc8a8c868b26d60a90686b95f8aa61..779f804486a3e22feccdf451d013d6756ca2acc5 100644
--- a/openair2/RRC/NR/nr_rrc_proto.h
+++ b/openair2/RRC/NR/nr_rrc_proto.h
@@ -206,15 +206,15 @@ rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t   * const ctxt
     const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
     struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
 
-bool nr_rrc_pdcp_config_asn1_req(const protocol_ctxt_t *const  ctxt_pP,
-                                 NR_SRB_ToAddModList_t  *const srb2add_list,
-                                 NR_DRB_ToAddModList_t  *const drb2add_list,
-                                 NR_DRB_ToReleaseList_t *const drb2release_list,
-                                 const uint8_t                   security_modeP,
-                                 uint8_t                  *const kRRCenc,
-                                 uint8_t                  *const kRRCint,
-                                 uint8_t                  *const kUPenc,
-                                 uint8_t                  *const kUPint,
-                                 LTE_PMCH_InfoList_r9_t   *pmch_InfoList_r9,
-                                 rb_id_t                  *const defaultDRB,
-                                 struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
+void nr_pdcp_add_srbs(eNB_flag_t enb_flag, rnti_t rnti,
+                   NR_SRB_ToAddModList_t  *const srb2add_list,
+                   const uint8_t security_modeP,
+                   uint8_t  *const kRRCenc,
+                      uint8_t *const  kUPint);
+
+void nr_pdcp_add_drbs(eNB_flag_t enb_flag, rnti_t rnti,
+                      NR_DRB_ToAddModList_t  *const drb2add_list,
+                      const uint8_t  security_modeP,
+                      uint8_t                  *const kUPenc,
+                      uint8_t                  *const kUPint,
+                      struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index e69ed804b6bf48ba6fa30a3f435049601b070528..2932c39d60ee06c074b5618bcdf2ce8c5c33e037 100755
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -316,23 +316,7 @@ void apply_macrlc_config(gNB_RRC_INST *rrc,
 
 }
 
-void apply_pdcp_config(rrc_gNB_ue_context_t         *const ue_context_pP,
-                       const protocol_ctxt_t        *const ctxt_pP ) {
-
-      nr_rrc_pdcp_config_asn1_req(ctxt_pP,
-                                  ue_context_pP->ue_context.SRB_configList,
-                                  NULL,
-                                  NULL,
-                                  0,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
 
-}
 
 //-----------------------------------------------------------------------------
 void
@@ -1340,19 +1324,21 @@ rrc_gNB_process_RRCReconfigurationComplete(
 
   LOG_D(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti);
 
-  nr_rrc_pdcp_config_asn1_req(ctxt_pP,
-                              SRB_configList, // NULL,
-                              DRB_configList,
-                              DRB_Release_configList2,
-                              (ue_context_pP->ue_context.integrity_algorithm << 4)
-                              | ue_context_pP->ue_context.ciphering_algorithm,
-                              kRRCenc,
-                              kRRCint,
-                              kUPenc,
-                              kUPint,
-                              NULL,
-                              NULL,
-                              get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
+  nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rnti,
+                   SRB_configList,
+                   (ue_context_pP->ue_context.integrity_algorithm << 4)
+                   | ue_context_pP->ue_context.ciphering_algorithm,
+                   kRRCenc,
+                   kRRCint);
+                   
+  nr_pdcp_add_drbs(ctxt_pP->enb_flag, ctxt_pP->rnti,
+                   DRB_configList,
+                   (ue_context_pP->ue_context.integrity_algorithm << 4)
+                   | ue_context_pP->ue_context.ciphering_algorithm,
+                   kUPenc,
+                   kUPint,
+                   get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
+  
   /* Refresh SRBs/DRBs */
   if (!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
     LOG_D(NR_RRC,"Configuring RLC DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti);
@@ -2188,27 +2174,6 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t    *const ctxt_pP,
           LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n",
                 PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
                 Idx);
-          // nr_rrc_pdcp_config_asn1_req(ctxt_pP,
-          //                         ue_context_p->ue_context.SRB_configList,
-          //                         NULL,
-          //                         NULL,
-          //                         0xff,
-          //                         NULL,
-          //                         NULL,
-          //                         NULL,
-          //                         NULL,
-          //                         NULL,
-          //                         NULL,
-          //                         NULL);
-
-          // if (!NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
-            // nr_rrc_rlc_config_asn1_req(ctxt_pP,
-            //                         ue_context_p->ue_context.SRB_configList,
-            //                         NULL,
-            //                         NULL,
-            //                         NULL,
-            //                         NULL);
-          // }
         }
         break;
 
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index a92f43b080f75b4b572e3f16763c8f7eb376dd8f..c905b59d82a7a2f76b663265a7196636e6d80b8c 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -992,8 +992,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
        At CU-CP we configure the E1 bearer context setup parameters (PDU sessions, DRBs and 
        QoS flows) same as in these functions. At CU-UP we create PDU Sessions and allocate DRBs.
     */
-    MessageDef *msg_p = NULL;
-    msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ);
+    MessageDef *msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ);
     e1ap_bearer_setup_req_t *bearer_req = &E1AP_BEARER_CONTEXT_SETUP_REQ(msg_p);
     
     bearer_req->gNB_cu_cp_ue_id = gNB_ue_ngap_id;
diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c
index b3eada8136ad9b1c11b918c689777bca26b28dbc..cfcb1f6db5def5e92dade4b21f21511d968663d3 100644
--- a/openair2/RRC/NR/rrc_gNB_nsa.c
+++ b/openair2/RRC/NR/rrc_gNB_nsa.c
@@ -383,21 +383,15 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
         ctxt.subframe,
         ctxt.eNB_index);
 
-  nr_rrc_pdcp_config_asn1_req(&ctxt,
-                              get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : (NR_SRB_ToAddModList_t *) NULL,
-                              ue_context_p->ue_context.rb_config->drb_ToAddModList ,
-                              ue_context_p->ue_context.rb_config->drb_ToReleaseList,
-                              (ue_context_p->ue_context.integrity_algorithm << 4) | ue_context_p->ue_context.ciphering_algorithm,
-                              NULL,          /* kRRCenc - unused */
-                              NULL,          /* kRRCint - unused */
-                              kUPenc,        /* kUPenc  */
-                              kUPint,        /* kUPint */
-                              NULL,
-                              NULL,
-                              ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
+  nr_pdcp_add_drbs(ctxt.enb_flag, ctxt.rnti,
+                   ue_context_p->ue_context.rb_config->drb_ToAddModList ,
+                   (ue_context_p->ue_context.integrity_algorithm << 4) | ue_context_p->ue_context.ciphering_algorithm,
+                   kUPenc,
+                   kUPint,
+                   ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
 
   nr_rrc_rlc_config_asn1_req(&ctxt,
-                             get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : (NR_SRB_ToAddModList_t *) NULL,
+                             get_softmodem_params()->sa ? ue_context_p->ue_context.rb_config->srb_ToAddModList : NULL,
                              ue_context_p->ue_context.rb_config->drb_ToAddModList,
                              ue_context_p->ue_context.rb_config->drb_ToReleaseList,
                              (LTE_PMCH_InfoList_r9_t *) NULL,
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index bf4f053ba6fe5ec3d9023550d2e4e91bef7c2713..84724020ff7d63fccf4e177ce777cbee4618ef4d 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -1989,19 +1989,12 @@ nr_rrc_ue_establish_srb2(
                            NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, &kRRCint);
 
      // Refresh SRBs
-      nr_rrc_pdcp_config_asn1_req(ctxt_pP,
-                                  radioBearerConfig->srb_ToAddModList,
-                                  NULL,
-                                  NULL,
-                                  NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm |
-                                  (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4),
-                                  kRRCenc,
-                                  kRRCint,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList);
+     nr_pdcp_add_srbs(ctxt_pP->enb_flag, ctxt_pP->rnti,
+                      radioBearerConfig->srb_ToAddModList,
+                      NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm |
+                      (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4),
+                      kRRCenc,
+                      kRRCint);
      // Refresh SRBs
       nr_rrc_rlc_config_asn1_req(ctxt_pP,
                                   radioBearerConfig->srb_ToAddModList,
@@ -2094,27 +2087,21 @@ nr_rrc_ue_establish_srb2(
                           NR_UE_rrc_inst[ctxt_pP->module_id].kgnb, &kUPint);
 
        // Refresh DRBs
-        nr_rrc_pdcp_config_asn1_req(ctxt_pP,
-                                    NULL,
-                                    radioBearerConfig->drb_ToAddModList,
-                                    NULL,
-                                    NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm
-                                      | (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4),
-                                    NULL,
-                                    NULL,
-                                    kUPenc,
-                                    kUPint,
-                                    NULL,
-                                    NR_UE_rrc_inst[ctxt_pP->module_id].defaultDRB,
-                                    NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList);
-       // Refresh DRBs
-        nr_rrc_rlc_config_asn1_req(ctxt_pP,
-                                    NULL,
-                                    radioBearerConfig->drb_ToAddModList,
-                                    NULL,
-                                    NULL,
-                                    NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList
-                                    );
+     nr_pdcp_add_drbs(ctxt_pP->enb_flag, ctxt_pP->rnti,
+                      radioBearerConfig->drb_ToAddModList,
+                      NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm
+                      | (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4),
+                      kUPenc,
+                      kUPint,
+                      NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList);
+     // Refresh DRBs
+     nr_rrc_rlc_config_asn1_req(ctxt_pP,
+                                NULL,
+                                radioBearerConfig->drb_ToAddModList,
+                                NULL,
+                                NULL,
+                                NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->rlc_BearerToAddModList
+                                );
    } // drb_ToAddModList //
 
    if (radioBearerConfig->drb_ToReleaseList != NULL) {