diff --git a/common/ran_context.h b/common/ran_context.h
index 055c6f783e562563519b161706ec06098c918b11..e198fd5d72869a50f88429f0a0a0d721d4bd7c14 100644
--- a/common/ran_context.h
+++ b/common/ran_context.h
@@ -46,7 +46,7 @@
 #include "RRC/LTE/defs_NB_IoT.h"
 #include "RRC/LTE/rrc_defs.h"
 #include "RRC/NR/nr_rrc_defs.h"
-#include <openair3/ocp-gtpu/gtpv1u_eNB_task.h>
+#include <openair3/ocp-gtpu/gtp_itf.h>
 
 
 typedef struct {
diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h
index cb7b7c6a525bcf530f0e4781f05c558f3b1e98f0..e9c438a0f531fe6b5582ea4921f34ddc24a53b85 100644
--- a/common/utils/ocp_itti/intertask_interface.h
+++ b/common/utils/ocp_itti/intertask_interface.h
@@ -257,8 +257,6 @@ typedef struct IttiMsgText_s {
 #include <openair3/MME_APP/mme_app.h>
 //#include <proto.h>
 
-#include <openair3/ocp-gtpu/gtpv1u_eNB_task.h>
-#include <openair3/ocp-gtpu/gtpv1u_gNB_task.h>
 void *rrc_enb_process_itti_msg(void *);
 #include <openair3/SCTP/sctp_eNB_task.h>
 #include <openair3/NGAP/ngap_gNB.h>
diff --git a/doc/SW_archi.md b/doc/SW_archi.md
index 5186c60bfd6e5fd30499487c6c41c750887cbde5..3886b04099b201ae2e0bcc181ee834bf72a908e8 100644
--- a/doc/SW_archi.md
+++ b/doc/SW_archi.md
@@ -338,7 +338,7 @@ Also, incoming downlink sdu can comme from internal RRC: in this case, pdcp_run(
 
 At Rx side, pdcp_data_ind() is the entry point that receives the data from RLC.
 - Inside pdcp_data_ind(), the pdcp manager mutex protects the access to the PDU receiving function of PDCP (recv_pdu() callback corresponding to nr_pdcp_entity_drb_am_recv_pdu() for DRBs)
-- Then deliver_sdu_drb() function sends the received data to GTP thread through an ITTI message (GTPV1U_ENB_TUNNEL_DATA_REQ).
+- Then deliver_sdu_drb() function sends the received data to GTP thread through an ITTI message (GTPV1U_TUNNEL_DATA_REQ).
 
 pdcp_config_set_security(): not yet developped
 
diff --git a/openair2/COMMON/gtpv1_u_messages_def.h b/openair2/COMMON/gtpv1_u_messages_def.h
index e0e5db5b7f72bd0adf45c9175b1fe9f376c4664d..35af0c04e78fb39c0e2b24487cbf14904b3e2593 100644
--- a/openair2/COMMON/gtpv1_u_messages_def.h
+++ b/openair2/COMMON/gtpv1_u_messages_def.h
@@ -20,12 +20,10 @@
  */
 
 
-MESSAGE_DEF(GTPV1U_ENB_TUNNEL_DATA_REQ,     MESSAGE_PRIORITY_MED, gtpv1u_enb_tunnel_data_req_t,    Gtpv1uTunnelDataReq)
+MESSAGE_DEF(GTPV1U_TUNNEL_DATA_REQ,     MESSAGE_PRIORITY_MED, gtpv1u_tunnel_data_req_t,    Gtpv1uTunnelDataReq)
 MESSAGE_DEF(GTPV1U_ENB_DATA_FORWARDING_REQ, MESSAGE_PRIORITY_MED, gtpv1u_enb_data_forwarding_req_t,Gtpv1uDataForwardingReq)
 MESSAGE_DEF(GTPV1U_ENB_DATA_FORWARDING_IND, MESSAGE_PRIORITY_MED, gtpv1u_enb_data_forwarding_ind_t,Gtpv1uDataForwardingInd)
 MESSAGE_DEF(GTPV1U_ENB_END_MARKER_REQ,      MESSAGE_PRIORITY_MED, gtpv1u_enb_end_marker_req_t,    Gtpv1uEndMarkerReq)
 MESSAGE_DEF(GTPV1U_ENB_END_MARKER_IND,      MESSAGE_PRIORITY_MED, gtpv1u_enb_end_marker_ind_t,    Gtpv1uEndMarkerInd)
 MESSAGE_DEF(GTPV1U_REQ,                     MESSAGE_PRIORITY_MED, Gtpv1uReq,    gtpv1uReq)
-
-MESSAGE_DEF(GTPV1U_GNB_TUNNEL_DATA_REQ,          MESSAGE_PRIORITY_MED, gtpv1u_gnb_tunnel_data_req_t,    NRGtpv1uTunnelDataReq)
 MESSAGE_DEF(GTPV1U_DU_BUFFER_REPORT_REQ,     MESSAGE_PRIORITY_MED, gtpv1u_DU_buffer_report_req_t,    NRGtpv1uBufferReportReq)
diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h
index 84ae0f17dbe5ad700ed7be7f8c897ad33b627c4c..6367699bfd8a7efd92ce77eacc6e27dd1d05f446 100644
--- a/openair2/COMMON/gtpv1_u_messages_types.h
+++ b/openair2/COMMON/gtpv1_u_messages_types.h
@@ -29,7 +29,7 @@
 #define NR_GTPV1U_MAX_BEARERS_PER_UE max_val_NR_DRB_Identity
 
 #define GTPV1U_ENB_TUNNEL_DATA_IND(mSGpTR)    (mSGpTR)->ittiMsg.Gtpv1uTunnelDataInd
-#define GTPV1U_ENB_TUNNEL_DATA_REQ(mSGpTR)    (mSGpTR)->ittiMsg.Gtpv1uTunnelDataReq
+#define GTPV1U_TUNNEL_DATA_REQ(mSGpTR)    (mSGpTR)->ittiMsg.Gtpv1uTunnelDataReq
 #define GTPV1U_ENB_DATA_FORWARDING_REQ(mSGpTR)    (mSGpTR)->ittiMsg.Gtpv1uDataForwardingReq
 #define GTPV1U_ENB_DATA_FORWARDING_IND(mSGpTR)    (mSGpTR)->ittiMsg.Gtpv1uDataForwardingInd
 #define GTPV1U_ENB_END_MARKER_REQ(mSGpTR)     (mSGpTR)->ittiMsg.Gtpv1uEndMarkerReq
@@ -37,8 +37,6 @@
 
 #define GTPV1U_REQ(mSGpTR)    (mSGpTR)->ittiMsg.gtpv1uReq
 
-#define GTPV1U_GNB_TUNNEL_DATA_REQ(mSGpTR)    (mSGpTR)->ittiMsg.NRGtpv1uTunnelDataReq
-
 #define GTPV1U_DU_BUFFER_REPORT_REQ(mSGpTR)    (mSGpTR)->ittiMsg.NRGtpv1uBufferReportReq
 
 #define GTPV1U_ALL_TUNNELS_TEID (teid_t)0xFFFFFFFF
@@ -108,21 +106,14 @@ typedef struct gtpv1u_enb_delete_tunnel_resp_s {
   teid_t                 enb_S1u_teid;         ///< local S1U Tunnel Endpoint Identifier to be deleted
 } gtpv1u_enb_delete_tunnel_resp_t;
 
-typedef struct gtpv1u_enb_tunnel_data_ind_s {
-  rnti_t                 rnti;
-  uint8_t               *buffer;
-  uint32_t               length;
-  uint32_t               offset;               ///< start of message offset in buffer
-  teid_t                 enb_S1u_teid;         ///< Tunnel Endpoint Identifier
-} gtpv1u_enb_tunnel_data_ind_t;
 
-typedef struct gtpv1u_enb_tunnel_data_req_s {
+typedef struct gtpv1u_tunnel_data_req_s {
   uint8_t               *buffer;
   uint32_t               length;
   uint32_t               offset;               ///< start of message offset in buffer
-  rnti_t                 rnti;
-  rb_id_t                rab_id;
-} gtpv1u_enb_tunnel_data_req_t;
+  ue_id_t                ue_id;
+  rb_id_t                bearer_id;
+} gtpv1u_tunnel_data_req_t;
 
 typedef struct gtpv1u_enb_data_forwarding_req_s {
   uint8_t               *buffer;
@@ -208,13 +199,7 @@ typedef struct gtpv1u_gnb_delete_tunnel_resp_s {
   uint8_t                status;               ///< Status of NGU endpoint deleteion (Failed = 0xFF or Success = 0x0)
   teid_t                 gnb_NGu_teid;         ///< local NGU Tunnel Endpoint Identifier to be deleted
 } gtpv1u_gnb_delete_tunnel_resp_t;
-typedef struct gtpv1u_gnb_tunnel_data_req_s {
-  uint8_t               *buffer;
-  uint32_t               length;
-  uint32_t               offset;               ///< start of message offset in buffer
-  ue_id_t                ue_id;
-  pdusessionid_t         pdusession_id;
-} gtpv1u_gnb_tunnel_data_req_t;
+
 
 typedef struct gtpv1u_DU_buffer_report_req_s {
   uint32_t               buffer_availability;
diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c
index 2e6c94540d768a61ec6b0da881c993e4d5ec2cb6..daa2dd6da1987d3ecbd542692ba9513d6b50d3f2 100644
--- a/openair2/ENB_APP/enb_app.c
+++ b/openair2/ENB_APP/enb_app.c
@@ -41,7 +41,7 @@
 # include "intertask_interface.h"
 #   include "s1ap_eNB.h"
 #   include "sctp_eNB_task.h"
-#   include "gtpv1u_eNB_task.h"
+#   include "openair3/ocp-gtpu/gtp_itf.h"
 #   include "flexran_agent.h"
 
 #   include "x2ap_eNB.h"
diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c
index 62c72fd64be8d533e7c170c020383f3a55afb72b..469205a78109dfa5dc7e7d2f11f97fe85bc44a7e 100644
--- a/openair2/GNB_APP/gnb_app.c
+++ b/openair2/GNB_APP/gnb_app.c
@@ -45,7 +45,7 @@
 #include "intertask_interface.h"
 #include "ngap_gNB.h"
 #include "sctp_eNB_task.h"
-#include "gtpv1u_eNB_task.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
 #include "PHY/INIT/phy_init.h" 
 #include "f1ap_cu_task.h"
 #include "f1ap_du_task.h"
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 14a16f572b9ebf075719d2992df14c1d8cb7b4a1..5a2b08e6c3b13b7085fa6a11a8df41ec9f4cca44 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -58,7 +58,7 @@
 #include "openair3/S1AP/s1ap_eNB.h"
 #include <pthread.h>
 
-#  include "gtpv1u_eNB_task.h"
+#  include "openair3/ocp-gtpu/gtp_itf.h"
 #include <openair3/ocp-gtpu/gtp_itf.h>
 
 #include "ENB_APP/enb_config.h"
@@ -210,20 +210,19 @@ rlc_op_status_t cu_send_to_du(const protocol_ctxt_t *const ctxt,
 			       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) {
-  uint8_t *gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U,
-				       size  + GTPU_HEADER_OVERHEAD_MAX);
-  AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
-  memcpy(gtpu_buffer_p+GTPU_HEADER_OVERHEAD_MAX,
+  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 );
-  MessageDef  *message_p = itti_alloc_new_message(TASK_PDCP_ENB, 0, GTPV1U_ENB_TUNNEL_DATA_REQ);
-  AssertFatal(message_p != NULL, "OUT OF MEMORY");
-  gtpv1u_enb_tunnel_data_req_t *req=&GTPV1U_ENB_TUNNEL_DATA_REQ(message_p);
-  req->buffer        = gtpu_buffer_p;
   req->length        = size;
   req->offset        = GTPU_HEADER_OVERHEAD_MAX;
-  req->rnti          = ctxt->rnti;
-  req->rab_id = rb_id+4;
+  req->ue_id          = ctxt->rnti;
+  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;
@@ -643,7 +642,6 @@ pdcp_data_ind(
   uint16_t     pdcp_uid=0;
 
   MessageDef  *message_p        = NULL;
-  uint8_t     *gtpu_buffer_p    = NULL;
   uint32_t    rx_hfn_for_count;
   int         pdcp_sn_for_count;
   int         security_ok;
@@ -1050,22 +1048,23 @@ pdcp_data_ind(
 
   if (LINK_ENB_PDCP_TO_GTPV1U) {
     if ((true == ctxt_pP->enb_flag) && (false == srb_flagP)) {
-      LOG_D(PDCP, "Sending packet to GTP, Calling GTPV1U_ENB_TUNNEL_DATA_REQ  ue %x rab %ld len %u\n",
+      LOG_D(PDCP, "Sending packet to GTP, Calling GTPV1U_TUNNEL_DATA_REQ  ue %x rab %ld len %u\n",
             ctxt_pP->rnti,
             rb_id + 4,
             sdu_buffer_sizeP - payload_offset );
-      //LOG_T(PDCP,"Sending to GTPV1U %d bytes\n", sdu_buffer_sizeP - payload_offset);
-      gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U,
-                                  sdu_buffer_sizeP - payload_offset + GTPU_HEADER_OVERHEAD_MAX);
-      AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
-      memcpy(&gtpu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], &sdu_buffer_pP->data[payload_offset], sdu_buffer_sizeP - payload_offset);
-      message_p = itti_alloc_new_message(TASK_PDCP_ENB, 0, GTPV1U_ENB_TUNNEL_DATA_REQ);
+      message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB, 0, GTPV1U_TUNNEL_DATA_REQ,
+                                              sizeof(gtpv1u_tunnel_data_req_t) +
+                                              sdu_buffer_sizeP - payload_offset + GTPU_HEADER_OVERHEAD_MAX );
       AssertFatal(message_p != NULL, "OUT OF MEMORY");
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer       = gtpu_buffer_p;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).length       = sdu_buffer_sizeP - payload_offset;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).offset       = GTPU_HEADER_OVERHEAD_MAX;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rnti         = ctxt_pP->rnti;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rab_id       = rb_id + 4;
+      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_buffer_pP->data[payload_offset],
+             sdu_buffer_sizeP - payload_offset);
+      req->length       = sdu_buffer_sizeP - payload_offset;
+      req->offset       = GTPU_HEADER_OVERHEAD_MAX;
+      req->ue_id        = ctxt_pP->rnti;
+      req->bearer_id    = rb_id + 4;
       itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p);
       packet_forwarded = true;
     }
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
index f6a61330d068c5366a55478f9dbe0fb0d51a4d1e..3b791fe54f2cb494fd11e6d3a0df916d14fa4565 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
@@ -83,7 +83,7 @@ extern struct msghdr nas_msg_rx;
 
 
 
-#  include "gtpv1u_eNB_task.h"
+#  include "openair3/ocp-gtpu/gtp_itf.h"
 
 extern int gtpv1u_new_data_req( uint8_t  enb_module_idP, rnti_t   ue_rntiP, uint8_t  rab_idP, uint8_t *buffer_pP, uint32_t buf_lenP, uint32_t buf_offsetP);
 uint16_t ue_id_g; // Global variable to identify the ID for each UE. It is updated in main() of lte-uesoftmodem.c
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 357abd606999980c0d20bea58ddf8fdc17406cb0..883c9731febbc82e777a507ea49cbb3f235ff683 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -688,20 +688,20 @@ rb_found:
   ctxt.rnti = ue->ue_id;
   if (RC.nrrrc != NULL && NODE_IS_CU(RC.nrrrc[0]->node_type)) {
     MessageDef  *message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB, 0,
-							  GTPV1U_GNB_TUNNEL_DATA_REQ,
-							  sizeof(gtpv1u_gnb_tunnel_data_req_t)
+							  GTPV1U_TUNNEL_DATA_REQ,
+							  sizeof(gtpv1u_tunnel_data_req_t)
 							  + size
 							  + GTPU_HEADER_OVERHEAD_MAX);
     AssertFatal(message_p != NULL, "OUT OF MEMORY");
-    gtpv1u_gnb_tunnel_data_req_t *req=&GTPV1U_GNB_TUNNEL_DATA_REQ(message_p);
+    gtpv1u_tunnel_data_req_t *req=&GTPV1U_TUNNEL_DATA_REQ(message_p);
     uint8_t *gtpu_buffer_p = (uint8_t*)(req+1);
     memcpy(gtpu_buffer_p+GTPU_HEADER_OVERHEAD_MAX, 
 	   buf, size);
     req->buffer        = gtpu_buffer_p;
     req->length        = size;
     req->offset        = GTPU_HEADER_OVERHEAD_MAX;
-    req->rnti          = ue->ue_id;
-    req->pdusession_id = rb_id;
+    req->ue_id         = ue->ue_id;
+    req->bearer_id = rb_id;
     LOG_I(PDCP, "%s() (drb %d) sending message to gtp size %d\n",
 	  __func__, rb_id, size);
     extern instance_t CUuniqInstance;
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 71b7c3b3c45a288e11fff120ac174e89fc4eb190..07011d6b593a646faec77f107b391bf87140ec92 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -536,15 +536,15 @@ rb_found:
 	itti_send_msg_to_task(TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(0 /*ctxt_pP->module_id*/), msg);
 	return;
       } else {
-	MessageDef *msg = itti_alloc_new_message_sized(TASK_RLC_ENB, 0, GTPV1U_GNB_TUNNEL_DATA_REQ,
-						       sizeof(gtpv1u_gnb_tunnel_data_req_t) + size);
-	gtpv1u_gnb_tunnel_data_req_t *req=&GTPV1U_GNB_TUNNEL_DATA_REQ(msg);
+	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->rnti=ue->rnti;
-	req->pdusession_id=rb_id;
+	req->ue_id=ue->ue_id;
+	req->bearer_id=rb_id;
 	LOG_D(RLC, "Received uplink user-plane traffic at RLC-DU to be sent to the CU, size %d \n", size);
 	extern instance_t DUuniqInstance;
 	itti_send_msg_to_task(TASK_GTPV1_U, DUuniqInstance, msg);
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h b/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
index f578faaf380f4ae6712c04ceeee3a80de2ae476b..81538c6039f15626e8d31d90cb10bb562117bb54 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
@@ -21,13 +21,14 @@
 
 #ifndef _NR_RLC_UE_MANAGER_H_
 #define _NR_RLC_UE_MANAGER_H_
-
+#include "openair2/COMMON/platform_types.h"
 #include "nr_rlc_entity.h"
 
 typedef void nr_rlc_ue_manager_t;
 
 typedef struct nr_rlc_ue_t {
   int rnti;
+  ue_id_t ue_id;
   nr_rlc_entity_t *srb[3];
   nr_rlc_entity_t *drb[5];
 } nr_rlc_ue_t;
diff --git a/openair2/LAYER2/rlc_v2/rlc_oai_api.c b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
index 914484c1b612fa714616e01437ae0f96f1877d86..3290359495ec0531f9b05b2db113df638774d01a 100644
--- a/openair2/LAYER2/rlc_v2/rlc_oai_api.c
+++ b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
@@ -431,14 +431,14 @@ rb_found:
       }  else {
 	// Fixme: very dirty workaround of incomplete F1-U implementation
 	instance_t DUuniqInstance=0;
-	MessageDef *msg = itti_alloc_new_message(TASK_RLC_ENB, 0, GTPV1U_ENB_TUNNEL_DATA_REQ);
-	gtpv1u_enb_tunnel_data_req_t *req=&GTPV1U_ENB_TUNNEL_DATA_REQ(msg);
-	req->buffer=malloc(size);
+	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->rnti=ue->rnti;
-	req->rab_id=rb_id+4;
+	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;
diff --git a/openair2/MCE_APP/mce_app.c b/openair2/MCE_APP/mce_app.c
index 4ac12ab5b49388092bbf54eed08922e944a12aeb..169af76baae3908d4957960869b9b53f4936da72 100644
--- a/openair2/MCE_APP/mce_app.c
+++ b/openair2/MCE_APP/mce_app.c
@@ -41,7 +41,7 @@
 # include "intertask_interface.h"
 #   include "s1ap_eNB.h"
 #   include "sctp_eNB_task.h"
-#   include "gtpv1u_eNB_task.h"
+#   include "openair3/ocp-gtpu/gtp_itf.h"
 #   include "flexran_agent.h"
 
 #   include "x2ap_eNB.h"
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index e9b225d30d558bf31caeebece079b154fbfe0c3b..e2e482be3ee3984d08dae9b5e13eb9404d07e251 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -85,7 +85,7 @@
 #include "rrc_eNB_M2AP.h"
 
 #include "pdcp.h"
-#include "gtpv1u_eNB_task.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
 #include <openair3/ocp-gtpu/gtp_itf.h>
 
 #include "intertask_interface.h"
diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c
index 7154b34962e00a387e771c2964eccb032b6d9895..1e3d597f99c5366023259e683c0bddf3449fdbc5 100644
--- a/openair2/RRC/LTE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c
@@ -50,7 +50,7 @@
 
 #include "LTE_UERadioAccessCapabilityInformation.h"
 
-#include "gtpv1u_eNB_task.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
 #include <openair3/ocp-gtpu/gtp_itf.h>
 #include "RRC/LTE/rrc_eNB_GTPV1U.h"
 
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index e9d9766f41b5a7621acc97b1a8a6ffef372d05ce..e67df0e98ba85d390b7d06c4d5070def88789fa0 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -406,7 +406,7 @@ typedef struct rrc_gNB_ue_context_s {
   /* Uniquely identifies the UE between MME and eNB within the eNB.
    * This id is encoded on 24bits.
    */
-  rnti_t         ue_id_rnti;
+  ue_id_t         ue_id_rnti;
 
   // another key for protocol layers but should not be used as a key for RB tree
   uid_t          local_uid;
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index e8330c76339e8d791a3c2a72cc55d658943162f3..9e740dff2f56f1ce3d50e5e4eeb870b89288442d 100755
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -88,7 +88,7 @@
 
 #include "nr_pdcp/nr_pdcp_entity.h"
 #include "pdcp.h"
-#include "gtpv1u_eNB_task.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
 
 
 #include "intertask_interface.h"
@@ -1648,7 +1648,7 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
       }
     }
 
-    create_tunnel_req.rnti       = ctxt_pP->rnti; // warning put zero above
+    create_tunnel_req.ue_id         = ctxt_pP->rnti; // warning put zero above
     create_tunnel_req.num_tunnels    = j;
     ret = gtpv1u_update_ngu_tunnel(
             ctxt_pP->instance,
@@ -3406,10 +3406,10 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co
       int rlc_tx_buffer_space = nr_rlc_get_available_tx_space(rnti, drb_id);
       LOG_I(NR_RRC, "Reported in DDD drb_id:%d, rnti:%d\n", drb_id, rnti);
       MessageDef *msg = itti_alloc_new_message_sized(TASK_RRC_GNB, 0, GTPV1U_DU_BUFFER_REPORT_REQ,
-                                     sizeof(gtpv1u_gnb_tunnel_data_req_t));
+                                     sizeof(gtpv1u_tunnel_data_req_t));
       gtpv1u_DU_buffer_report_req_t *req=&GTPV1U_DU_BUFFER_REPORT_REQ(msg);
       req->pdusession_id = drb_id;
-      req->rnti = rnti;
+      req->ue_id = rnti;
       req->buffer_availability = rlc_tx_buffer_space; //10000000; //Hardcoding to be removed and read the actual RLC buffer availability instead
       extern instance_t DUuniqInstance;
       itti_send_msg_to_task(TASK_GTPV1_U, DUuniqInstance, msg);
@@ -3747,12 +3747,12 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
 
     if (fd) {
       if (ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence == true) {
-        fprintf(fd,"NR RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
+        fprintf(fd,"NR RRC UE rnti %lx: S-TMSI %x failure timer %d/8\n",
                 ue_context_p->ue_id_rnti,
                 ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi,
                 ue_context_p->ue_context.ul_failure_timer);
       } else {
-        fprintf(fd,"NR RRC UE rnti %x failure timer %d/8\n",
+        fprintf(fd,"NR RRC UE rnti %lx failure timer %d/8\n",
                 ue_context_p->ue_id_rnti,
                 ue_context_p->ue_context.ul_failure_timer);
       }
@@ -3878,7 +3878,7 @@ void fill_DRB_configList(NR_DRB_ToAddModList_t *DRB_configList, pdu_session_to_s
     ie->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
 
     // sdap_Config
-    NR_SDAP_Config_t *sdap_config = ie->cnAssociation->choice.sdap_config;
+    NR_SDAP_Config_t *sdap_config = ie->cnAssociation->choice.sdap_Config;
     sdap_config = CALLOC(1, sizeof(*sdap_config));
     memset(sdap_config, 0, sizeof(*sdap_config));
     sdap_config->pdu_Session = pdu->sessionId;
@@ -3887,15 +3887,15 @@ void fill_DRB_configList(NR_DRB_ToAddModList_t *DRB_configList, pdu_session_to_s
     sdap_config->defaultDRB = drb->defaultDRB;
 
     sdap_config->mappedQoS_FlowsToAdd = calloc(1, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd));
-    memset(sdap_config->mappedQoS_FlowsToAdd, 0, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd));
-
+    // LTSFIXME
+    int numQosFlow2Setup=0;
     for (int j=0; j < numQosFlow2Setup; j++) {
       NR_QFI_t *qfi = calloc(1, sizeof(NR_QFI_t));
       *qfi = drb->qosFlows[j].fiveQI;
       ASN_SEQUENCE_ADD(&sdap_config->mappedQoS_FlowsToAdd->list, qfi);
     }
     sdap_config->mappedQoS_FlowsToRelease = NULL;
-
+    /*
     // pdcp_Config
     ie->reestablishPDCP = NULL;
     ie->recoverPDCP = NULL;
@@ -3933,6 +3933,7 @@ void fill_DRB_configList(NR_DRB_ToAddModList_t *DRB_configList, pdu_session_to_s
       pdcp_config->ext1->cipheringDisabled = calloc(1, sizeof(*pdcp_config->ext1->cipheringDisabled));
       *pdcp_config->ext1->cipheringDisabled = NR_PDCP_Config__ext1__cipheringDisabled_true;
     }
+    */
   }
 }
 
@@ -3943,26 +3944,26 @@ int rrc_gNB_process_e1_bearer_context_setup_req(e1ap_bearer_setup_req_t *req, in
 
   NR_DRB_ToAddModList_t *DRB_configList;
   for (int i=0; i < req->numPDUSessions; i++) {
-    pdu_session_to_setup_t *pdu = req->pduSession[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(uint8_t)*20);
-    create_tunnel_req.outgoing_teid = pdu->teID;
+           &pdu->tlAddress,
+           sizeof(pdu->tlAddress));
+    create_tunnel_req.outgoing_teid[i] = pdu->teId;
     fill_DRB_configList(DRB_configList, pdu);
   }
   create_tunnel_req.num_tunnels = req->numPDUSessions;
-  create_tunnel_req.rnti        = (req->gNB_cu_cp_ue_id & 0xFFFF);
+  create_tunnel_req.ue_id        = (req->gNB_cu_cp_ue_id & 0xFFFF);
 
-  ret = gtpv1u_create_ngu_tunnel(
+  int ret = gtpv1u_create_ngu_tunnel(
                                  instance,
                                  &create_tunnel_req,
                                  &create_tunnel_resp);
 
   uint8_t *kRRCenc = NULL;
   uint8_t *kRRCint = NULL;
-
+  /*
   nr_derive_key_rrc_enc(cipheringAlgorithm,
                         encryptionKey,
                         &kRRCenc);
@@ -3970,7 +3971,7 @@ int rrc_gNB_process_e1_bearer_context_setup_req(e1ap_bearer_setup_req_t *req, in
   nr_derive_key_rrc_int(integrityProtectionAlgorithm,
                         integrityProtectionKey,
                         &kRRCint);
-
+  */
   return 0;
 }
 
diff --git a/openair2/RRC/NR/rrc_gNB_GTPV1U.c b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
index f7b491af14f0364bf2e0726213d3984781bf7734..79495ab5538b0e841d1b0ade9a83d785817c421c 100644
--- a/openair2/RRC/NR/rrc_gNB_GTPV1U.c
+++ b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
@@ -97,7 +97,7 @@ nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(
     LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" RX CREATE_TUNNEL_RESP num tunnels %u \n",
           PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
           create_tunnel_resp_pP->num_tunnels);
-    rnti = create_tunnel_resp_pP->rnti;
+    rnti = create_tunnel_resp_pP->ue_id;
     ue_context_p = rrc_gNB_get_ue_context(
                      RC.nrrrc[ctxt_pP->module_id],
                      ctxt_pP->rnti);
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index 21c335b1aeef3311ba18f6f03ef7b7e737516736..7fcf0a529cf18efe19fba611fbeced98d733d643 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -39,8 +39,7 @@
 #include "pdcp.h"
 #include "pdcp_primitives.h"
 
-#include "gtpv1u_eNB_task.h"
-#include "gtpv1u_gNB_task.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
 #include <openair3/ocp-gtpu/gtp_itf.h>
 #include "RRC/LTE/rrc_eNB_GTPV1U.h"
 #include "RRC/NR/rrc_gNB_GTPV1U.h"
@@ -60,6 +59,7 @@
 #include "f1ap_messages_types.h"
 #include "E1AP_SDAP-Configuration.h"
 #include "E1AP_PDCP-Configuration.h"
+#include "openair2/E1AP/e1ap.h"
 
 extern RAN_CONTEXT_t RC;
 
@@ -532,7 +532,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
         }
 
         ue_context_p->ue_context.nb_of_pdusessions = NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_pdusessions;
-        create_tunnel_req.rnti                     = ue_context_p->ue_context.rnti;
+        create_tunnel_req.ue_id                     = ue_context_p->ue_context.rnti;
         create_tunnel_req.num_tunnels              = pdu_sessions_done;
 
         ret = gtpv1u_create_ngu_tunnel(
@@ -997,9 +997,9 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
     
     bearer_req->gNB_cu_cp_ue_id = gNB_ue_ngap_id;
     bearer_req->cipheringAlgorithm = ue_context_p->ue_context.ciphering_algorithm;
-    memcpy(bearer_req->encryptionKey, ue_context_p->ue_context.kgnb, strlen(ue_context_p->ue_context.kgnb));
-    bearer_req->integrityProtectionAlgorithm = ue_context_pP->ue_context.integrity_algorithm;
-    memcpy(bearer_req->integrityProtectionKey, ue_context_pP->ue_context.kgnb, strlen(ue_context_p->ue_context.kgnb));
+    memcpy(bearer_req->encryptionKey, ue_context_p->ue_context.kgnb, sizeof(ue_context_p->ue_context.kgnb));
+    bearer_req->integrityProtectionAlgorithm = ue_context_p->ue_context.integrity_algorithm;
+    memcpy(bearer_req->integrityProtectionKey, ue_context_p->ue_context.kgnb, sizeof(ue_context_p->ue_context.kgnb));
     bearer_req->ueDlAggMaxBitRate = msg->ueAggMaxBitRateDownlink;
     
     bearer_req->numPDUSessions = msg->nb_pdusessions_tosetup;
@@ -1094,7 +1094,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
   ue_context_p->ue_context.nb_of_pdusessions = msg->nb_pdusessions_tosetup;
   ue_context_p->ue_context.gNB_ue_ngap_id    = msg->gNB_ue_ngap_id;
   ue_context_p->ue_context.amf_ue_ngap_id    = msg->amf_ue_ngap_id;
-  create_tunnel_req.rnti                     = ue_context_p->ue_context.rnti;
+  create_tunnel_req.ue_id                    = ue_context_p->ue_context.rnti;
   create_tunnel_req.num_tunnels              = pdu_sessions_done;
     
   ret = gtpv1u_create_ngu_tunnel(
@@ -1762,7 +1762,7 @@ rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(
       //gtp tunnel delete
       LOG_I(NR_RRC, "gtp tunnel delete \n");
       gtpv1u_gnb_delete_tunnel_req_t req={0};
-      req.rnti = ue_context_p->ue_context.rnti;
+      req.ue_id = ue_context_p->ue_context.rnti;
 
       for(i = 0; i < NB_RB_MAX; i++) {
         if(xid == ue_context_p->ue_context.pduSession[i].xid) {
diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
index 80057a34cc8b14ffe2335cd950842f94092eb6b3..63165bc768ea94727d06ead305d4c3973b11973f 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c
+++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
@@ -200,16 +200,16 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity,
     MessageDef *message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB,
                                                          0,
                                                          GTPV1U_GNB_TUNNEL_DATA_REQ,
-                                                         sizeof(gtpv1u_gnb_tunnel_data_req_t)
+                                                         sizeof(gtpv1u_tunnel_data_req_t)
                                                            + size + GTPU_HEADER_OVERHEAD_MAX - offset);
     AssertFatal(message_p != NULL, "OUT OF MEMORY");
-    gtpv1u_gnb_tunnel_data_req_t *req = &GTPV1U_TUNNEL_DATA_REQ(message_p);
+    gtpv1u_tunnel_data_req_t *req = &GTPV1U_TUNNEL_DATA_REQ(message_p);
     uint8_t *gtpu_buffer_p = (uint8_t *) (req + 1);
     memcpy(gtpu_buffer_p + GTPU_HEADER_OVERHEAD_MAX, buf + offset, size - offset);
     req->buffer        = gtpu_buffer_p;
     req->length        = size - offset;
     req->offset        = GTPU_HEADER_OVERHEAD_MAX;
-    req->rnti          = ur_id;
+    req->rnti          = ue_id;
     req->pdusession_id = pdusession_id;
     LOG_D(SDAP, "%s()  sending message to gtp size %d\n", __func__,  size-offset);
     itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p);
diff --git a/openair3/MME_APP/mme_app.c b/openair3/MME_APP/mme_app.c
index 57f1b4c9d239a8049effddd0dea6c671c8ed0735..4a96359153c47b71ba9c64e4c956d7460f720f92 100644
--- a/openair3/MME_APP/mme_app.c
+++ b/openair3/MME_APP/mme_app.c
@@ -41,7 +41,7 @@
 # include "intertask_interface.h"
 #   include "s1ap_eNB.h"
 #   include "sctp_eNB_task.h"
-#   include "gtpv1u_eNB_task.h"
+#   include "openair3/ocp-gtpu/gtp_itf.h"
 #   include "flexran_agent.h"
 
 #   include "x2ap_eNB.h"
diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp
index 978a86290deb1a91142980073338771e9b72c9f9..a13f2b4d0c23268758f4335c4f798a1236ce276c 100644
--- a/openair3/ocp-gtpu/gtp_itf.cpp
+++ b/openair3/ocp-gtpu/gtp_itf.cpp
@@ -108,7 +108,7 @@ typedef struct gtpv1u_bearer_s {
 } gtpv1u_bearer_t;
 
 typedef struct {
-  map<int, gtpv1u_bearer_t> bearers;
+  map<ue_id_t, gtpv1u_bearer_t> bearers;
   teid_t outgoing_teid;
 } teidData_t;
 
@@ -188,7 +188,7 @@ instance_t legacyInstanceMapping=0;
     auto ptrRnti=insT->ue2te_mapping.find(RnTi);                        \
                                                                         \
   if (  ptrRnti==insT->ue2te_mapping.end() ) {                          \
-    LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti); \
+    LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue id %x in hashtable ue_mapping\n", instance, rnti); \
     pthread_mutex_unlock(&globGtp.gtp_lock);                            \
     return;                                                             \
   }
@@ -197,7 +197,7 @@ instance_t legacyInstanceMapping=0;
     auto ptrRnti=insT->ue2te_mapping.find(RnTi);                        \
                                                                         \
   if (  ptrRnti==insT->ue2te_mapping.end() ) {                          \
-    LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti); \
+    LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue id %x in hashtable ue_mapping\n", instance, rnti); \
     pthread_mutex_unlock(&globGtp.gtp_lock);                            \
     return GTPNOK;                                                             \
   }
@@ -281,58 +281,25 @@ static int gtpv1uCreateAndSendMsg(int h,
   return  !GTPNOK;
 }
 
-static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
+static void gtpv1uSend(instance_t instance, gtpv1u_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
   uint8_t *buffer=req->buffer+req->offset;
   size_t length=req->length;
-  rnti_t rnti=req->rnti;
-  int  rab_id=req->rab_id;
-  pthread_mutex_lock(&globGtp.gtp_lock);
-  getInstRetVoid(compatInst(instance));
-  getRntiRetVoid(inst, rnti);
-
-  map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
-
-  if ( ptr2 == ptrRnti->second.bearers.end() ) {
-    LOG_E(GTPU,"[%ld] GTP-U instance: sending a packet to a non existant RNTI:RAB: %x/%x\n", instance, rnti, rab_id);
-    pthread_mutex_unlock(&globGtp.gtp_lock);
-    return;
-  }
-
-  LOG_D(GTPU,"[%ld] sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n",
-        instance, rnti, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum );
-
-  if(seqNumFlag)
-    ptr2->second.seqNum++;
-
-  if(npduNumFlag)
-    ptr2->second.npduNum++;
-
-  // copy to release the mutex
-  gtpv1u_bearer_t tmp=ptr2->second;
-  pthread_mutex_unlock(&globGtp.gtp_lock);
-  gtpv1uCreateAndSendMsg(
-      compatInst(instance), tmp.outgoing_ip_addr, tmp.outgoing_port, GTP_GPDU, tmp.teid_outgoing, buffer, length, seqNumFlag, npduNumFlag, tmp.seqNum, tmp.npduNum, NO_MORE_EXT_HDRS, NULL, 0);
-}
-
-static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
-  uint8_t *buffer=req->buffer+req->offset;
-  size_t length=req->length;
-  ue_id_t ue_id=req->ue_id;
-  int  rab_id=req->pdusession_id;
+  ue_id_t ueid=req->ue_id;
+  int  bearer_id=req->bearer_id;
   pthread_mutex_lock(&globGtp.gtp_lock);
   getInstRetVoid(compatInst(instance));
   getRntiRetVoid(inst, ue_id);
 
-  map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
+  auto ptr2=ptrUe->second.bearers.find(bearer_id);
 
-  if ( ptr2 == ptrRnti->second.bearers.end() ) {
-    LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant UE ID:RAB: %lu/%x\n", instance, ue_id, rab_id);
+  if ( ptr2 == ptrUe->second.bearers.end() ) {
+    LOG_E(GTPU,"[%ld] GTP-U instance: sending a packet to a non existant UE:RAB: %lx/%x\n", instance, ueid, bearer_id);
     pthread_mutex_unlock(&globGtp.gtp_lock);
     return;
   }
 
-  LOG_D(GTPU,"[%ld] GTP-U sending a packet to UE ID:RAB:teid %lu/%x/%x, len %lu, oldseq %d, oldnum %d\n",
-        instance, ue_id, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum );
+  LOG_D(GTPU,"[%ld] sending a packet to UE:RAB:teid %lx/%x/%x, len %lu, oldseq %d, oldnum %d\n",
+        instance, ueid, bearer_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum );
 
   if(seqNumFlag)
     ptr2->second.seqNum++;
@@ -405,15 +372,15 @@ static void fillDlDeliveryStatusReport(extensionHeader_t *extensionHeader, uint3
 
 static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_report_req_t *req){
   ue_id_t ue_id=req->ue_id;
-  int  rab_id=req->pdusession_id;
+  int  bearer_id=req->pdusession_id;
   pthread_mutex_lock(&globGtp.gtp_lock);
   getInstRetVoid(compatInst(instance));
   getRntiRetVoid(inst, ue_id);
 
-  map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
+  auto ptr2=ptrUe->second.bearers.find(bearer_id);
 
-  if ( ptr2 == ptrRnti->second.bearers.end() ) {
-    LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant UE ID:RAB: %lu/%x\n", instance, ue_id, rab_id);
+  if ( ptr2 == ptrUe->second.bearers.end() ) {
+    LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant UE ID:RAB: %lu/%x\n", instance, ue_id, bearer_id);
     pthread_mutex_unlock(&globGtp.gtp_lock);
     return;
   }
@@ -423,7 +390,7 @@ static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_rep
   fillDlDeliveryStatusReport(extensionHeader, req->buffer_availability,0);
 
   LOG_I(GTPU,"[%ld] GTP-U sending DL Data Delivery status to UE ID:RAB:teid %lu/%x/%x, oldseq %d, oldnum %d\n",
-        instance, ue_id, rab_id,ptr2->second.teid_outgoing, ptr2->second.seqNum,ptr2->second.npduNum );
+        instance, ue_id, bearer_id,ptr2->second.teid_outgoing, ptr2->second.seqNum,ptr2->second.npduNum );
   // copy to release the mutex
   gtpv1u_bearer_t tmp=ptr2->second;
   pthread_mutex_unlock(&globGtp.gtp_lock);
@@ -431,23 +398,23 @@ static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_rep
       compatInst(instance), tmp.outgoing_ip_addr, tmp.outgoing_port, GTP_GPDU, tmp.teid_outgoing, NULL, 0, false, false, 0, 0, NR_RAN_CONTAINER, extensionHeader->buffer, extensionHeader->length);
 }
 
-static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req) {
-  rnti_t rnti=req->rnti;
-  int  rab_id=req->rab_id;
+static void gtpv1uEndTunnel(instance_t instance, gtpv1u_tunnel_data_req_t *req) {
+  ue_id_t ueid=req->ue_id;
+  int  bearer_id=req->bearer_id;
   pthread_mutex_lock(&globGtp.gtp_lock);
   getInstRetVoid(compatInst(instance));
-  getRntiRetVoid(inst, rnti);
+  getRntiRetVoid(inst, ue_id);
 
-  map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
+  auto ptr2=ptrUe->second.bearers.find(bearer_id);
 
-  if ( ptr2 == ptrRnti->second.bearers.end() ) {
-    LOG_E(GTPU,"[%ld] GTP-U sending a packet to a non existant RNTI:RAB: %x/%x\n", instance, rnti, rab_id);
+  if ( ptr2 == ptrUe->second.bearers.end() ) {
+    LOG_E(GTPU,"[%ld] GTP-U sending a packet to a non existant UE:RAB: %lx/%x\n", instance, ueid, bearer_id);
     pthread_mutex_unlock(&globGtp.gtp_lock);
     return;
   }
 
-  LOG_D(GTPU,"[%ld] sending a end packet packet to RNTI:RAB:teid %x/%x/%x\n",
-        instance, rnti, rab_id,ptr2->second.teid_outgoing);
+  LOG_D(GTPU,"[%ld] sending a end packet packet to UE:RAB:teid %lx/%x/%x\n",
+        instance, ueid, bearer_id,ptr2->second.teid_outgoing);
   gtpv1u_bearer_t tmp=ptr2->second;
   pthread_mutex_unlock(&globGtp.gtp_lock);
   Gtpv1uMsgHeaderT  msgHdr;
@@ -584,9 +551,9 @@ void GtpuUpdateTunnelOutgoingTeid(instance_t instance, ue_id_t ue_id, ebi_t bear
   getInstRetVoid(compatInst(instance));
   getRntiRetVoid(inst, ue_id);
 
-  map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(bearer_id);
+  auto ptr2=ptrUe->second.bearers.find(bearer_id);
 
-  if ( ptr2 == ptrRnti->second.bearers.end() ) {
+  if ( ptr2 == ptrUe->second.bearers.end() ) {
     LOG_E(GTPU,"[%ld] Update tunnel for a existing ue id %lu, but wrong bearer_id %u\n", instance, ue_id, bearer_id);
     pthread_mutex_unlock(&globGtp.gtp_lock);
     return;
@@ -680,9 +647,9 @@ teid_t newGtpuCreateTunnel(instance_t instance,
 int gtpv1u_create_s1u_tunnel(instance_t instance,
                              const gtpv1u_enb_create_tunnel_req_t  *create_tunnel_req,
                              gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) {
-  LOG_D(GTPU, "[%ld] Start create tunnels for UE ID %lu, num_tunnels %d, sgw_S1u_teid %x\n",
+  LOG_D(GTPU, "[%ld] Start create tunnels for UE ID %u, num_tunnels %d, sgw_S1u_teid %x\n",
         instance,
-        create_tunnel_req->ue_id,
+        create_tunnel_req->rnti,
         create_tunnel_req->num_tunnels,
         create_tunnel_req->sgw_S1u_teid[0]);
   pthread_mutex_lock(&globGtp.gtp_lock);
@@ -699,7 +666,7 @@ int gtpv1u_create_s1u_tunnel(instance_t instance,
                 create_tunnel_req->eps_bearer_id[i]);
     int incoming_rb_id=create_tunnel_req->eps_bearer_id[i]-4;
     teid_t teid = newGtpuCreateTunnel(compatInst(instance),
-                                      create_tunnel_req->ue_id,
+                                      create_tunnel_req->rnti,
                                       incoming_rb_id,
                                       create_tunnel_req->eps_bearer_id[i],
                                       create_tunnel_req->sgw_S1u_teid[i],
@@ -709,7 +676,7 @@ int gtpv1u_create_s1u_tunnel(instance_t instance,
                                       pdcp_data_req,
                                       NULL);
     create_tunnel_resp->status=0;
-    create_tunnel_resp->ue_id=create_tunnel_req->ue_id;
+    create_tunnel_resp->rnti=create_tunnel_req->rnti;
     create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels;
     create_tunnel_resp->enb_S1u_teid[i]=teid;
     create_tunnel_resp->eps_bearer_id[i] = create_tunnel_req->eps_bearer_id[i];
@@ -723,7 +690,7 @@ int gtpv1u_create_s1u_tunnel(instance_t instance,
 int gtpv1u_update_s1u_tunnel(
   const instance_t                              instance,
   const gtpv1u_enb_create_tunnel_req_t *const   create_tunnel_req,
-  const rnti                                    prior_rnti
+  const rnti_t                                  prior_rnti
 ) {
   LOG_D(GTPU, "[%ld] Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %x, eps_bearer_id %x\n",
         instance,
@@ -743,7 +710,7 @@ int gtpv1u_update_s1u_tunnel(
   auto it=inst->ue2te_mapping.find(prior_rnti);
 
   if ( it != inst->ue2te_mapping.end() ) {
-    LOG_W(GTPU,"[%ld] Update a not existing tunnel, start create the new one (new ue id %lu, old ue id %lu)\n", instance, create_tunnel_req->rnti, prior_rnti);
+    LOG_W(GTPU,"[%ld] Update a not existing tunnel, start create the new one (new ue id %u, old ue id %u)\n", instance, create_tunnel_req->rnti, prior_rnti);
     pthread_mutex_unlock(&globGtp.gtp_lock);
     gtpv1u_enb_create_tunnel_resp_t tmp;
     (void)gtpv1u_create_s1u_tunnel(instance, create_tunnel_req, &tmp);
@@ -796,7 +763,7 @@ int gtpv1u_create_ngu_tunnel(  const instance_t instance,
 int gtpv1u_update_ngu_tunnel(
   const instance_t instanceP,
   const gtpv1u_gnb_create_tunnel_req_t *const  create_tunnel_req_pP,
-  const ue_id_t prior_ue_id;
+  const ue_id_t prior_ueid
 ) {
   AssertFatal( false, "to be developped\n");
   return GTPNOK;
@@ -827,7 +794,7 @@ int newGtpuDeleteAllTunnels(instance_t instance, ue_id_t ue_id) {
 
   inst->ue2te_mapping.erase(ptrRnti);
   pthread_mutex_unlock(&globGtp.gtp_lock);
-  LOG_I(GTPU, "[%ld] Deleted all tunnels for ue id %x (%d tunnels deleted)\n", instance, ue_id, nb);
+  LOG_I(GTPU, "[%ld] Deleted all tunnels for ue id %ld (%d tunnels deleted)\n", instance, ue_id, nb);
   return !GTPNOK;
 }
 
@@ -954,7 +921,7 @@ static int Gtpv1uHandleEndMarker(int h,
   ctxt.module_id = 0;
   ctxt.enb_flag = 1;
   ctxt.instance = inst->addr.originInstance;
-  ctxt.rnti = tunnel->second.rnti;
+  ctxt.rnti = tunnel->second.ue_id;
   ctxt.frame = 0;
   ctxt.subframe = 0;
   ctxt.eNB_index = 0;
@@ -1087,7 +1054,7 @@ static int Gtpv1uHandleGpdu(int h,
   ctxt.module_id = 0;
   ctxt.enb_flag = 1;
   ctxt.instance = inst->addr.originInstance;
-  ctxt.rnti = tunnel->second.rnti;
+  ctxt.rnti = tunnel->second.ue_id;
   ctxt.frame = 0;
   ctxt.subframe = 0;
   ctxt.eNB_index = 0;
@@ -1105,11 +1072,33 @@ static int Gtpv1uHandleGpdu(int h,
 
   if (sdu_buffer_size > 0) {
     if (qfi != -1 && tunnel->second.callBackSDAP) {
-      if (!tunnel->second.callBackSDAP(&ctxt, srb_flag, rb_id, mui, confirm, sdu_buffer_size, sdu_buffer, mode, &sourceL2Id, &destinationL2Id, qfi, rqi, tunnel->second.pdusession_id))
-        LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h);
+      if ( !tunnel->second.callBackSDAP(&ctxt,
+                                        tunnel->second.ue_id,
+                                        srb_flag,
+                                        rb_id,
+                                        mui,
+                                        confirm,
+                                        sdu_buffer_size,
+                                        sdu_buffer,
+                                        mode,
+                                        &sourceL2Id,
+                                        &destinationL2Id,
+                                        qfi,
+                                        rqi,
+                                        tunnel->second.pdusession_id) )
+        LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h);
     } else {
-      if (!tunnel->second.callBack(&ctxt, srb_flag, rb_id, mui, confirm, sdu_buffer_size, sdu_buffer, mode, &sourceL2Id, &destinationL2Id))
-        LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h);
+      if ( !tunnel->second.callBack(&ctxt,
+                                    srb_flag,
+                                    rb_id,
+                                    mui,
+                                    confirm,
+                                    sdu_buffer_size,
+                                    sdu_buffer,
+                                    mode,
+                                    &sourceL2Id,
+                                    &destinationL2Id) )
+        LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h);
     }
   }
 
@@ -1231,16 +1220,10 @@ void *gtpv1uTask(void *args)  {
 
       switch (ITTI_MSG_ID(message_p)) {
         // DATA TO BE SENT TO UDP
-        case GTPV1U_ENB_TUNNEL_DATA_REQ: {
-          gtpv1uSend(compatInst(ITTI_MSG_DESTINATION_INSTANCE(message_p)),
-                     &GTPV1U_ENB_TUNNEL_DATA_REQ(message_p), false, false);
-          itti_free(TASK_GTPV1_U, GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer);
-        }
-        break;
 
-        case GTPV1U_GNB_TUNNEL_DATA_REQ: {
-          gtpv1uSend2(compatInst(ITTI_MSG_DESTINATION_INSTANCE(message_p)),
-                      &GTPV1U_GNB_TUNNEL_DATA_REQ(message_p), false, false);
+        case GTPV1U_TUNNEL_DATA_REQ: {
+          gtpv1uSend(compatInst(ITTI_MSG_DESTINATION_INSTANCE(message_p)),
+                      &GTPV1U_TUNNEL_DATA_REQ(message_p), false, false);
         }
         break;
 
@@ -1259,8 +1242,8 @@ void *gtpv1uTask(void *args)  {
 
         case GTPV1U_ENB_END_MARKER_REQ:
           gtpv1uEndTunnel(compatInst(ITTI_MSG_DESTINATION_INSTANCE(message_p)),
-                          &GTPV1U_ENB_TUNNEL_DATA_REQ(message_p));
-          itti_free(TASK_GTPV1_U, GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer);
+                          &GTPV1U_TUNNEL_DATA_REQ(message_p));
+          itti_free(TASK_GTPV1_U, GTPV1U_TUNNEL_DATA_REQ(message_p).buffer);
           break;
 
         case GTPV1U_ENB_DATA_FORWARDING_REQ:
diff --git a/openair3/ocp-gtpu/gtp_itf.h b/openair3/ocp-gtpu/gtp_itf.h
index 6372712c71082c66b372f2db4c73027a1967fcaa..17ded407a9100f457223264936436be4759ea25f 100644
--- a/openair3/ocp-gtpu/gtp_itf.h
+++ b/openair3/ocp-gtpu/gtp_itf.h
@@ -58,17 +58,32 @@ int gtpv1u_update_s1u_tunnel(const instance_t instanceP,
                              const rnti_t prior_rnti
                             );
 int gtpv1u_delete_s1u_tunnel( const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP);
+  
 int gtpv1u_delete_s1u_tunnel( const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP);
 
-int gtpv1u_create_x2u_tunnel(
-  const instance_t instanceP,
-  const gtpv1u_enb_create_x2u_tunnel_req_t   *const create_tunnel_req_pP,
-  gtpv1u_enb_create_x2u_tunnel_resp_t *const create_tunnel_resp_pP);
+  int gtpv1u_create_x2u_tunnel(const instance_t instanceP,
+                               const gtpv1u_enb_create_x2u_tunnel_req_t   *const create_tunnel_req_pP,
+                               gtpv1u_enb_create_x2u_tunnel_resp_t *const create_tunnel_resp_pP);
 
+  int gtpv1u_delete_x2u_tunnel( const instance_t instanceP,
+                                const gtpv1u_enb_delete_tunnel_req_t *const req_pP);
+  int
+  gtpv1u_create_ngu_tunnel(
+                           const instance_t instanceP,
+                           const gtpv1u_gnb_create_tunnel_req_t   *const create_tunnel_req_pP,
+                           gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_pP);
+  
+  int gtpv1u_delete_ngu_tunnel( const instance_t instance,
+                                gtpv1u_gnb_delete_tunnel_req_t *req);
+  
+  int gtpv1u_update_ngu_tunnel( const instance_t                              instanceP,
+                               const gtpv1u_gnb_create_tunnel_req_t *const  create_tunnel_req_pP,
+                               const ue_id_t                                  prior_rnti
+                               );
 
 // New API
 teid_t newGtpuCreateTunnel(instance_t instance,
-                           rnti_t rnti,
+                           ue_id_t ue_id,
                            int incoming_bearer_id,
                            int outgoing_rb_id,
                            teid_t teid,
@@ -78,11 +93,58 @@ teid_t newGtpuCreateTunnel(instance_t instance,
                            gtpCallback callBack,
                            gtpCallbackSDAP callBackSDAP);
 void GtpuUpdateTunnelOutgoingTeid(instance_t instance, rnti_t rnti, ebi_t bearer_id, teid_t newOutgoingTeid);
-int newGtpuDeleteAllTunnels(instance_t instance, rnti_t rnti);
-int newGtpuDeleteTunnels(instance_t instance, rnti_t rnti, int nbTunnels, pdusessionid_t *pdusession_id);
+int newGtpuDeleteAllTunnels(instance_t instance, ue_id_t ue_id);
+int newGtpuDeleteTunnels(instance_t instance, ue_id_t ue_id, int nbTunnels, pdusessionid_t *pdusession_id);
 instance_t gtpv1Init(openAddr_t context);
 void *gtpv1uTask(void *args);
 
+  // Legacy to fix
+  typedef struct gtpv1u_data_s {
+    /* RB tree of UEs */
+    hash_table_t         *ue_mapping;
+  } gtpv1u_data_t;
+  #define GTPV1U_BEARER_OFFSET 3
+#define GTPV1U_MAX_BEARERS_ID     (max_val_LTE_DRB_Identity - GTPV1U_BEARER_OFFSET)
+typedef enum {
+  BEARER_DOWN = 0,
+  BEARER_IN_CONFIG,
+  BEARER_UP,
+  BEARER_DL_HANDOVER,
+  BEARER_UL_HANDOVER,
+  BEARER_MAX,
+} bearer_state_t;
+
+typedef struct fixMe_gtpv1u_bearer_s {
+  /* TEID used in dl and ul */
+  teid_t          teid_eNB;                ///< eNB TEID
+  uintptr_t       teid_eNB_stack_session;  ///< eNB TEID
+  teid_t          teid_sgw;                ///< Remote TEID
+  in_addr_t       sgw_ip_addr;
+  struct in6_addr sgw_ip6_addr;
+  teid_t          teid_teNB;
+  in_addr_t       tenb_ip_addr;       ///< target eNB ipv4
+  struct in6_addr tenb_ip6_addr;        ///< target eNB ipv6
+  tcp_udp_port_t  port;
+  //NwGtpv1uStackSessionHandleT stack_session;
+  bearer_state_t state;
+} fixMe_gtpv1u_bearer_t;
+
+typedef struct gtpv1u_ue_data_s {
+  /* UE identifier for oaisim stack */
+  rnti_t   ue_id;
+
+  /* Unique identifier used between PDCP and GTP-U to distinguish UEs */
+  uint32_t instance_id;
+  int      num_bearers;
+  /* Bearer related data.
+   * Note that the first LCID available for data is 3 and we fixed the maximum
+   * number of e-rab per UE to be (32 [id range]), max RB is 11. The real rb id will 3 + rab_id (3..32).
+   */
+  fixMe_gtpv1u_bearer_t bearers[GTPV1U_MAX_BEARERS_ID];
+
+  //RB_ENTRY(gtpv1u_ue_data_s) gtpv1u_ue_node;
+} gtpv1u_ue_data_t;
+  
 #ifdef __cplusplus
 }
 #endif
diff --git a/openair3/ocp-gtpu/gtpv1u_eNB_task.h b/openair3/ocp-gtpu/gtpv1u_eNB_task.h
deleted file mode 100644
index e764eb143b141b70c00f5b6ab5a32ae80fb84f8b..0000000000000000000000000000000000000000
--- a/openair3/ocp-gtpu/gtpv1u_eNB_task.h
+++ /dev/null
@@ -1,113 +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
- */
-
-/*! \file gtpv1u_eNB_task.h
-* \brief
-* \author Lionel Gauthier
-* \company Eurecom
-* \email: lionel.gauthier@eurecom.fr
-*/
-
-#ifndef GTPV1U_ENB_TASK_H_
-#define GTPV1U_ENB_TASK_H_
-
-typedef struct gtpv1u_data_s {
-  /* RB tree of UEs */
-  hash_table_t         *ue_mapping;
-} gtpv1u_data_t;
-
-#define GTPV1U_BEARER_OFFSET 3
-#define GTPV1U_MAX_BEARERS_ID     (max_val_LTE_DRB_Identity - GTPV1U_BEARER_OFFSET)
-typedef enum {
-  BEARER_DOWN = 0,
-  BEARER_IN_CONFIG,
-  BEARER_UP,
-  BEARER_DL_HANDOVER,
-  BEARER_UL_HANDOVER,
-  BEARER_MAX,
-} bearer_state_t;
-
-typedef struct fixMe_gtpv1u_bearer_s {
-  /* TEID used in dl and ul */
-  teid_t          teid_eNB;                ///< eNB TEID
-  uintptr_t       teid_eNB_stack_session;  ///< eNB TEID
-  teid_t          teid_sgw;                ///< Remote TEID
-  in_addr_t       sgw_ip_addr;
-  struct in6_addr sgw_ip6_addr;
-  teid_t          teid_teNB;
-  in_addr_t       tenb_ip_addr;       ///< target eNB ipv4
-  struct in6_addr tenb_ip6_addr;        ///< target eNB ipv6
-  tcp_udp_port_t  port;
-  //NwGtpv1uStackSessionHandleT stack_session;
-  bearer_state_t state;
-} fixMe_gtpv1u_bearer_t;
-
-typedef struct gtpv1u_ue_data_s {
-  /* UE identifier for oaisim stack */
-  rnti_t   ue_id;
-
-  /* Unique identifier used between PDCP and GTP-U to distinguish UEs */
-  uint32_t instance_id;
-  int      num_bearers;
-  /* Bearer related data.
-   * Note that the first LCID available for data is 3 and we fixed the maximum
-   * number of e-rab per UE to be (32 [id range]), max RB is 11. The real rb id will 3 + rab_id (3..32).
-   */
-  fixMe_gtpv1u_bearer_t bearers[GTPV1U_MAX_BEARERS_ID];
-
-  //RB_ENTRY(gtpv1u_ue_data_s) gtpv1u_ue_node;
-} gtpv1u_ue_data_t;
-/*
-int
-gtpv1u_new_data_req(
-  uint8_t enb_id,
-  uint8_t ue_id,
-  uint8_t rab_id,
-  uint8_t *buffer,
-  uint32_t buf_len,
-  uint32_t buf_offset);*/
-
-int   gtpv1u_eNB_init(void);
-void *gtpv1u_eNB_process_itti_msg(void *);
-void *gtpv1u_eNB_task(void *args);
-
-int
-gtpv1u_create_x2u_tunnel(
-  const instance_t instanceP,
-  const gtpv1u_enb_create_x2u_tunnel_req_t   *const create_tunnel_req_pP,
-  gtpv1u_enb_create_x2u_tunnel_resp_t *const create_tunnel_resp_pP);
-
-int
-gtpv1u_create_s1u_tunnel(
-  const instance_t instanceP,
-  const gtpv1u_enb_create_tunnel_req_t   *const create_tunnel_req_pP,
-  gtpv1u_enb_create_tunnel_resp_t *const create_tunnel_resp_pP);
-
-int
-gtpv1u_update_s1u_tunnel(
-  const instance_t                              instanceP,
-  const gtpv1u_enb_create_tunnel_req_t *const  create_tunnel_req_pP,
-  const rnti_t                                  prior_rnti);
-
-int gtpv1u_delete_x2u_tunnel(
-  const instance_t                             instanceP,
-  const gtpv1u_enb_delete_tunnel_req_t *const req_pP);
-#endif /* GTPV1U_ENB_TASK_H_ */
diff --git a/openair3/ocp-gtpu/gtpv1u_gNB_task.h b/openair3/ocp-gtpu/gtpv1u_gNB_task.h
deleted file mode 100644
index 817d0109ba6d7ebc399d7b27060a3f71be45810f..0000000000000000000000000000000000000000
--- a/openair3/ocp-gtpu/gtpv1u_gNB_task.h
+++ /dev/null
@@ -1,54 +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
- */
-
-/*! \file gtpv1u_gNB_task.h
-* \brief
-* \author Lionel Gauthier Panos Matzakos
-* \company Eurecom
-* \email: lionel.gauthier@eurecom.fr
-*/
-
-#ifndef GTPV1U_GNB_TASK_H_
-#define GTPV1U_GNB_TASK_H_
-
-int   gtpv1u_gNB_init(void);
-
-void *gtpv1u_gNB_task(void *args);
-
-void *nr_gtpv1u_gNB_task(void *args);
-
-int
-gtpv1u_create_ngu_tunnel(
-  const instance_t instanceP,
-  const gtpv1u_gnb_create_tunnel_req_t   *const create_tunnel_req_pP,
-  gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_pP);
-
-int
-gtpv1u_update_ngu_tunnel(
-  const instance_t                              instanceP,
-  const gtpv1u_gnb_create_tunnel_req_t *const  create_tunnel_req_pP,
-  const rnti_t                                  prior_rnti
-);
-
-int gtpv1u_delete_ngu_tunnel( const instance_t instance,
-                              gtpv1u_gnb_delete_tunnel_req_t *req);
-
-#endif /* GTPV1U_GNB_TASK_H_ */
-
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index a6ae906d9d950fdbf9f20e1551e78408704454e7..a0d4d7ab4cd33aa406aa5182823ef7ab2be60dbe 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -28,7 +28,7 @@
   #include "sctp_eNB_task.h"
   #include "x2ap_eNB.h"
   #include "s1ap_eNB.h"
-  #include "gtpv1u_eNB_task.h"
+  #include "openair3/ocp-gtpu/gtp_itf.h"
   #if ENABLE_RAL
     #include "lteRALue.h"
     #include "lteRALenb.h"
diff --git a/targets/COMMON/create_tasks_mbms.c b/targets/COMMON/create_tasks_mbms.c
index b82b4f158b18a4b1cf499a30018b91e203c2d68d..9853c1b6ec8069b98ed61cb2d24737778a41be04 100644
--- a/targets/COMMON/create_tasks_mbms.c
+++ b/targets/COMMON/create_tasks_mbms.c
@@ -28,7 +28,7 @@
     #include "sctp_eNB_task.h"
     #include "x2ap_eNB.h"
     #include "s1ap_eNB.h"
-    #include "gtpv1u_eNB_task.h"
+    #include "openair3/ocp-gtpu/gtp_itf.h"
     #include "m2ap_eNB.h"
     #include "m2ap_MCE.h"
     #include "m3ap_MME.h"
diff --git a/targets/COMMON/create_tasks_ue.c b/targets/COMMON/create_tasks_ue.c
index cdca62c39900a2eb63f13f3d3a9b1649f841c17a..2172827b03bca0a580abf975c3eade0e5cca8d19 100644
--- a/targets/COMMON/create_tasks_ue.c
+++ b/targets/COMMON/create_tasks_ue.c
@@ -27,7 +27,6 @@
   #include "sctp_eNB_task.h"
   #include "s1ap_eNB.h"
   #include "openair3/NAS/UE/nas_ue_task.h"
-  #include "gtpv1u_eNB_task.h"
   #if ENABLE_RAL
     #include "lteRALue.h"
     #include "lteRALenb.h"