diff --git a/openair2/E1AP/e1ap.c b/openair2/E1AP/e1ap.c
index 2318e44cfbd134b7e7d9ab5af828a3d6b3dc85ea..1cd9a3d087f68c254c10181377c8d12b58be0c92 100644
--- a/openair2/E1AP/e1ap.c
+++ b/openair2/E1AP/e1ap.c
@@ -671,12 +671,14 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
   ieC1->value.choice.GNB_CU_CP_UE_E1AP_ID = resp->gNB_cu_up_ue_id;
 
   asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextSetupResponseIEs_t, ieC3);
-  ieC3->id = E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest;
-  ieC3->criticality = E1AP_Criticality_reject;
+  ieC3->id            = E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest;
+  ieC3->criticality   = E1AP_Criticality_reject;
+  ieC3->value.present = E1AP_BearerContextSetupResponseIEs__value_PR_System_BearerContextSetupResponse;
   if (0) { // EUTRAN
     ieC3->value.choice.System_BearerContextSetupResponse.present = E1AP_System_BearerContextSetupResponse_PR_e_UTRAN_BearerContextSetupResponse;
-    E1AP_EUTRAN_BearerContextSetupResponse_t *msgEUTRAN = calloc(1, sizeof(E1AP_EUTRAN_BearerContextSetupResponse_t));
-    ieC3->value.choice.System_BearerContextSetupResponse.choice.e_UTRAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgEUTRAN;
+    E1AP_ProtocolIE_Container_4932P21_t *msgEUTRAN_list = calloc(1, sizeof(E1AP_ProtocolIE_Container_4932P21_t));
+    ieC3->value.choice.System_BearerContextSetupResponse.choice.e_UTRAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgEUTRAN_list;
+    asn1cSequenceAdd(msgEUTRAN_list->list, E1AP_EUTRAN_BearerContextSetupResponse_t, msgEUTRAN);
     msgEUTRAN->id = E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN;
     msgEUTRAN->criticality = E1AP_Criticality_reject;
     msgEUTRAN->value.present = E1AP_EUTRAN_BearerContextSetupResponse__value_PR_DRB_Setup_List_EUTRAN;
@@ -701,8 +703,9 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
     }
   } else {
     ieC3->value.choice.System_BearerContextSetupResponse.present = E1AP_System_BearerContextSetupResponse_PR_nG_RAN_BearerContextSetupResponse;
-    E1AP_NG_RAN_BearerContextSetupResponse_t *msgNGRAN = calloc(1, sizeof(E1AP_NG_RAN_BearerContextSetupResponse_t));
-    ieC3->value.choice.System_BearerContextSetupResponse.choice.nG_RAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgNGRAN;
+    E1AP_ProtocolIE_Container_4932P22_t *msgNGRAN_list = calloc(1, sizeof(E1AP_ProtocolIE_Container_4932P22_t));
+    ieC3->value.choice.System_BearerContextSetupResponse.choice.nG_RAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgNGRAN_list;
+    asn1cSequenceAdd(msgNGRAN_list->list, E1AP_NG_RAN_BearerContextSetupResponse_t, msgNGRAN);
     msgNGRAN->id = E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN;
     msgNGRAN->criticality = E1AP_Criticality_reject;
     msgNGRAN->value.present = E1AP_NG_RAN_BearerContextSetupResponse__value_PR_PDU_Session_Resource_Setup_List;
@@ -776,8 +779,8 @@ 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(UPtype, instance)->bearerSetupReq;
-  if (!bearerCxt) {
+  e1ap_upcp_inst_t *e1_inst = getCxtE1(UPtype, instance);
+  if (!e1_inst) {
     LOG_E(E1AP, "got BEARER_CONTEXT_SETUP_REQUEST on not established instance (%ld)\n", instance);
     return -1;
   }
@@ -797,6 +800,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
 
   MessageDef *msg = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ);
 
+  e1ap_bearer_setup_req_t *bearerCxt = &E1AP_BEARER_CONTEXT_SETUP_REQ(msg);
   LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
 
   for (int i=0; i < in->protocolIEs.list.count; i++) {
@@ -878,6 +882,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
                     "msgNGRAN->value.present != E1AP_NG_RAN_BearerContextSetupRequest__value_PR_PDU_Session_Resource_To_Setup_List\n");
 
         E1AP_PDU_Session_Resource_To_Setup_List_t *pdu2SetupList = &msgNGRAN->value.choice.PDU_Session_Resource_To_Setup_List;
+        bearerCxt->numPDUSessions = pdu2SetupList->list.count;
         for (int i=0; i < pdu2SetupList->list.count; i++) {
           pdu_session_to_setup_t *pdu = bearerCxt->pduSession + i;
           E1AP_PDU_Session_Resource_To_Setup_Item_t *pdu2Setup = pdu2SetupList->list.array[i];
@@ -899,6 +904,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
           }
 
           E1AP_DRB_To_Setup_List_NG_RAN_t *drb2SetupList = &pdu2Setup->dRB_To_Setup_List_NG_RAN;
+          pdu->numDRB2Setup = drb2SetupList->list.count;
           for (int j=0; j < drb2SetupList->list.count; j++) {
             DRB_nGRAN_to_setup_t *drb = pdu->DRBnGRanList + j;
             E1AP_DRB_To_Setup_Item_NG_RAN_t *drb2Setup = drb2SetupList->list.array[j];
@@ -923,6 +929,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
             drb->rLC_Mode = drb2Setup->pDCP_Configuration.rLC_Mode;
 
             E1AP_Cell_Group_Information_t *cellGroupList = &drb2Setup->cell_Group_Information;
+            drb->numCellGroups = cellGroupList->list.count;
             for (int k=0; k < cellGroupList->list.count; k++) {
               E1AP_Cell_Group_Information_Item_t *cg2Setup = cellGroupList->list.array[k];
 
@@ -930,6 +937,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
             }
 
             E1AP_QoS_Flow_QoS_Parameter_List_t *qos2SetupList = &drb2Setup->qos_flow_Information_To_Be_Setup;
+            drb->numQosFlow2Setup = qos2SetupList->list.count;
             for (int k=0; k < qos2SetupList->list.count; k++) {
               qos_flow_to_setup_t *qos = drb->qosFlows + k;
               E1AP_QoS_Flow_QoS_Parameter_Item_t *qos2Setup = qos2SetupList->list.array[k];
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index 147eb027e777cd982b5ff5b48900b756c6b4790d..a7514e1f74b5feed38b603aacf3b1203306fce55 100755
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -3941,14 +3941,15 @@ int rrc_gNB_process_e1_bearer_context_setup_req(e1ap_bearer_setup_req_t *req, in
   gtpv1u_gnb_create_tunnel_req_t  create_tunnel_req={0};
   gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp={0};
 
-  NR_DRB_ToAddModList_t DRB_configList;
+  NR_DRB_ToAddModList_t DRB_configList = {0};
   for (int i=0; i < req->numPDUSessions; i++) {
     pdu_session_to_setup_t *pdu = &req->pduSession[i];
     create_tunnel_req.pdusession_id[i] = pdu->sessionId;
     create_tunnel_req.incoming_rb_id[i] = pdu->DRBnGRanList[0].id; // taking only the first DRB. TODO:change this
     memcpy(&create_tunnel_req.dst_addr[i].buffer,
            &pdu->tlAddress,
-           sizeof(pdu->tlAddress));
+           sizeof(uint8_t)*4);
+    create_tunnel_req.dst_addr[i].length = 32; // 8bits * 4bytes
     create_tunnel_req.outgoing_teid[i] = pdu->teId;
     fill_DRB_configList(&DRB_configList, pdu);
   }
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index 885d8e876110ecae2675e129a15c05d7aa3b7cae..f1553d4554122a4dad603e467d65fb6c83d7772b 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -1017,7 +1017,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
       pdu->teId                                = msg->pdusession_setup_params[i].gtp_teid;
       memcpy(&pdu->tlAddress,
              msg->pdusession_setup_params[i].upf_addr.buffer,
-             sizeof(uint8_t)*20);
+             sizeof(uint8_t)*4);
       
       pdu->numDRB2Setup = 1; // One DRB per PDU Session. TODO: Remove hardcoding
       for (int j=0; j < pdu->numDRB2Setup; j++) {