diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h
index 3831164e6065640c7dc3e9cc955382c77eec5013..d7f35ab5684a866930c04154eb9e9748b4c3fdd9 100644
--- a/openair2/COMMON/as_message.h
+++ b/openair2/COMMON/as_message.h
@@ -175,7 +175,7 @@ typedef struct as_stmsi_s {
 /* Dedicated NAS information */
 typedef struct as_nas_info_s {
   UInt32_t length;    /* Length of the NAS information data       */
-  Byte_t *data;   /* Dedicated NAS information data container */
+  Byte_t* data;   /* Dedicated NAS information data container */
 } as_nas_info_t;
 
 /* Radio Access Bearer identity */
@@ -567,11 +567,11 @@ typedef struct as_message_s {
 /******************  E X P O R T E D    F U N C T I O N S  ******************/
 /****************************************************************************/
 
-int as_message_decode(const char *buffer, as_message_t *msg, int length);
+int as_message_decode(const char* buffer, as_message_t* msg, int length);
 
-int as_message_encode(char *buffer, as_message_t *msg, int length);
+int as_message_encode(char* buffer, as_message_t* msg, int length);
 
 /* Implemented in the network_api.c body file */
-int as_message_send(as_message_t *as_msg);
+int as_message_send(as_message_t* as_msg);
 
 #endif /* __AS_MESSAGE_H__*/
diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h
index a4e2b2595d0e9d39df9880f3662f52665c4a723f..d3efb9bb07ea93587ae307fd0e55c31d0d98b336 100644
--- a/openair2/COMMON/commonDef.h
+++ b/openair2/COMMON/commonDef.h
@@ -263,7 +263,7 @@ typedef struct {
  * EPS Mobility Management sublayer
  */
 typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t,
-    const char *, size_t);
+    const char*, size_t);
 
 typedef enum eps_protocol_discriminator_e {
   /* Protocol discriminator identifier for EPS Mobility Management */
diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h
index 652c4c797acd67b342acbe18097a7c557bdcbd59..d1c473da14a4366906d951f7baf68d4dc1b8d195 100755
--- a/openair2/COMMON/gtpv1_u_messages_types.h
+++ b/openair2/COMMON/gtpv1_u_messages_types.h
@@ -44,7 +44,7 @@
 #define GTPV1U_ALL_TUNNELS_TEID (teid_t)0xFFFFFFFF
 
 typedef struct gtpv1u_enb_create_tunnel_req_s {
-  module_id_t            ue_index;
+  rnti_t                 rnti;
   int                    num_tunnels;
   teid_t                 sgw_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE];  ///< Tunnel Endpoint Identifier
   ebi_t                  eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
@@ -53,7 +53,7 @@ typedef struct gtpv1u_enb_create_tunnel_req_s {
 
 typedef struct gtpv1u_enb_create_tunnel_resp_s {
   uint8_t                status;               ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0)
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   int                    num_tunnels;
   teid_t                 enb_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE];  ///< Tunnel Endpoint Identifier
   ebi_t                  eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
@@ -61,7 +61,7 @@ typedef struct gtpv1u_enb_create_tunnel_resp_s {
 } gtpv1u_enb_create_tunnel_resp_t;
 
 typedef struct gtpv1u_enb_update_tunnel_req_s {
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   teid_t                 enb_S1u_teid;         ///< eNB S1U Tunnel Endpoint Identifier
   teid_t                 sgw_S1u_teid;         ///< SGW S1U local Tunnel Endpoint Identifier
   transport_layer_addr_t sgw_addr;
@@ -69,7 +69,7 @@ typedef struct gtpv1u_enb_update_tunnel_req_s {
 } gtpv1u_enb_update_tunnel_req_t;
 
 typedef struct gtpv1u_enb_update_tunnel_resp_s {
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   uint8_t                status;               ///< Status (Failed = 0xFF or Success = 0x0)
   teid_t                 enb_S1u_teid;         ///< eNB S1U Tunnel Endpoint Identifier
   teid_t                 sgw_S1u_teid;         ///< SGW S1U local Tunnel Endpoint Identifier
@@ -77,20 +77,20 @@ typedef struct gtpv1u_enb_update_tunnel_resp_s {
 } gtpv1u_enb_update_tunnel_resp_t;
 
 typedef struct gtpv1u_enb_delete_tunnel_req_s {
-  module_id_t            ue_index;
+  rnti_t                 rnti;
   uint8_t                num_erab;
   ebi_t                  eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE];
   //teid_t                 enb_S1u_teid;         ///< local SGW S11 Tunnel Endpoint Identifier
 } gtpv1u_enb_delete_tunnel_req_t;
 
 typedef struct gtpv1u_enb_delete_tunnel_resp_s {
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   uint8_t                status;               ///< Status of S1U endpoint deleteion (Failed = 0xFF or Success = 0x0)
   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 {
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   uint8_t               *buffer;
   uint32_t               length;
   uint32_t               offset;               ///< start of message offset in buffer
@@ -101,7 +101,7 @@ typedef struct gtpv1u_enb_tunnel_data_req_s {
   uint8_t               *buffer;
   uint32_t               length;
   uint32_t               offset;               ///< start of message offset in buffer
-  uint8_t                ue_index;
+  rnti_t                 rnti;
   rb_id_t                rab_id;
 } gtpv1u_enb_tunnel_data_req_t;
 
diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h
index dfce6baaf1e51360a8d335b5e117d3329d0e543a..cd9108f277efe573d89523681d8e1ccd78c299a7 100644
--- a/openair2/COMMON/mac_messages_types.h
+++ b/openair2/COMMON/mac_messages_types.h
@@ -95,6 +95,7 @@ typedef struct RrcMacCcchDataCnf_s {
 
 typedef struct RrcMacCcchDataInd_s {
   uint32_t  frame;
+  uint16_t  rnti;
   uint32_t  sdu_size;
   uint8_t   sdu[CCCH_SDU_SIZE];
   uint8_t   enb_index;
diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h
index 9c720a8d77e1640b658c166f352316086d48c96b..72c77b34343fb5b541b9194a8cb354fa6b5d47b3 100644
--- a/openair2/COMMON/mac_rrc_primitives.h
+++ b/openair2/COMMON/mac_rrc_primitives.h
@@ -399,8 +399,8 @@ typedef struct {
                            );
   unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, char*);
   void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* );
-  mac_rlc_status_resp_t (*mac_rlc_status_ind)     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, logical_chan_id_t channel_idP,
-      tb_size_t tb_sizeP);
+  mac_rlc_status_resp_t (*mac_rlc_status_ind)     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP,
+      logical_chan_id_t channel_idP, tb_size_t tb_sizeP);
   signed int (*rrc_rlc_data_req)(module_id_t, rb_id_t, mui_t, confirm_t, sdu_size_t, char *);
   void (*rrc_rlc_register_rrc) (void (*rrc_data_indP)(module_id_t , rb_id_t , sdu_size_t , char* ),
                                 void  (*rrc_data_confP) (module_id_t , rb_id_t , mui_t ) ) ;
diff --git a/openair2/COMMON/networkDef.h b/openair2/COMMON/networkDef.h
index a19e1ce11daa01fbbc712bcdb9b3eccc0fa3d75c..2eb376a9c7b8be9e242b93f26ac0a23ce124bd8c 100644
--- a/openair2/COMMON/networkDef.h
+++ b/openair2/COMMON/networkDef.h
@@ -257,7 +257,7 @@ typedef struct {
 typedef struct {
   int n_pkfs;
 #define NET_PACKET_FILTER_MAX   16
-  network_pkf_t *pkf[NET_PACKET_FILTER_MAX];
+  network_pkf_t* pkf[NET_PACKET_FILTER_MAX];
 } network_tft_t;
 
 /*
diff --git a/openair2/COMMON/pdcp_messages_types.h b/openair2/COMMON/pdcp_messages_types.h
index 6c2d5e601c3d79c7611ca1be16d14a135276ccea..4eb6063a5e70b9b86db95c6695ee3d643c431811 100644
--- a/openair2/COMMON/pdcp_messages_types.h
+++ b/openair2/COMMON/pdcp_messages_types.h
@@ -53,7 +53,8 @@ typedef struct RrcDcchDataReq_s {
   uint32_t sdu_size;
   uint8_t *sdu_p;
   uint8_t mode;
-  uint8_t ue_index;
+  uint16_t     rnti;
+  uint8_t      module_id;
   uint8_t eNB_index;
 } RrcDcchDataReq;
 
@@ -62,8 +63,9 @@ typedef struct RrcDcchDataInd_s {
   uint8_t dcch_index;
   uint32_t sdu_size;
   uint8_t *sdu_p;
-  uint8_t ue_index;
-  uint8_t eNB_index;
+  uint16_t     rnti;
+  uint8_t      module_id;
+  uint8_t      eNB_index; // LG: needed in UE
 } RrcDcchDataInd;
 
 #endif /* PDCP_MESSAGES_TYPES_H_ */
diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h
index c1d8e5263a86d056730760a6f1b77b5b93ad2f51..52089fe6c2f046ac476eb8b17468c49a6a5967f6 100755
--- a/openair2/COMMON/platform_types.h
+++ b/openair2/COMMON/platform_types.h
@@ -42,6 +42,9 @@
 #include <stdint.h>
 #endif
 
+#if defined(ENABLE_ITTI)
+#include "itti_types.h"
+#endif
 //-----------------------------------------------------------------------------
 // GENERIC TYPES
 //-----------------------------------------------------------------------------
@@ -109,6 +112,7 @@ typedef sdu_size_t         tbs_size_t;
 typedef sdu_size_t         tb_size_t;
 typedef unsigned int       logical_chan_id_t;
 typedef unsigned int       num_tb_t;
+typedef uint8_t            mac_enb_index_t;
 
 //-----------------------------------------------------------------------------
 // RLC TYPES
@@ -121,6 +125,8 @@ typedef uint16_t           rlc_usn_t;
 typedef int32_t            rlc_buffer_occupancy_t;
 typedef signed int         rlc_op_status_t;
 
+#define  SDU_CONFIRM_NO          FALSE
+#define  SDU_CONFIRM_YES         TRUE
 //-----------------------------------------------------------------------------
 // PDCP TYPES
 //-----------------------------------------------------------------------------
@@ -155,6 +161,20 @@ typedef enum  ip_traffic_type_e {
 typedef uint32_t           mbms_session_id_t;
 typedef uint16_t           mbms_service_id_t;
 typedef uint16_t           rnti_t;
+typedef uint8_t            rrc_enb_index_t;
+
+#if ! defined(NOT_A_RNTI)
+#define NOT_A_RNTI (rnti_t)0
+#endif
+#if ! defined(M_RNTI)
+#define M_RNTI     (rnti_t)0xFFFD
+#endif
+#if ! defined(P_RNTI)
+#define P_RNTI     (rnti_t)0xFFFE
+#endif
+#if ! defined(SI_RNTI)
+#define SI_RNTI    (rnti_t)0xFFFF
+#endif
 typedef enum config_action_e {
   CONFIG_ACTION_NULL              = 0,
   CONFIG_ACTION_ADD               = 1,
@@ -176,16 +196,93 @@ typedef uint8_t            ebi_t;  // eps bearer id
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
+// may be ITTI not enabled, but type instance is useful also for OTG,
+#if !defined(instance_t)
+typedef uint16_t instance_t;
+#endif
 typedef struct protocol_ctxt_s {
-  module_id_t enb_module_id; /*!< \brief  Virtualized enb module identifier, Not used if eNB_flagP = 0. */
-  module_id_t ue_module_id;  /*!< \brief  Virtualized ue module identifier */
-  frame_t     frame;         /*!< \brief  LTE Frame number.*/
+  module_id_t module_id;     /*!< \brief  Virtualized module identifier      */
   eNB_flag_t  enb_flag;      /*!< \brief  Flag to indicate eNB (1) or UE (0) */
+  instance_t  instance;      /*!< \brief  ITTI or OTG module identifier      */
+  rnti_t      rnti;
+  frame_t     frame;         /*!< \brief  LTE frame number.*/
+  sub_frame_t subframe;      /*!< \brief  LTE sub frame number.*/
 } protocol_ctxt_t;
-#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u/%02u]"
+// warning time hardcoded
+#define PROTOCOL_CTXT_TIME_MILLI_SECONDS(CtXt_h) ((CtXt_h)->frame*10+(CtXt_h)->subframe)
+
+#define UE_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD + NB_eNB_INST
+#define ENB_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD
+#define UE_INSTANCE_TO_MODULE_ID( iNSTANCE ) iNSTANCE - NB_eNB_INST
+#define ENB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE
+
+
+#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \
+    if(eNB_fLAG == ENB_FLAG_YES) \
+        iNSTANCE = ENB_MODULE_ID_TO_INSTANCE(mODULE_iD); \
+    else \
+        iNSTANCE = UE_MODULE_ID_TO_INSTANCE(mODULE_iD)
+
+#define INSTANCE_TO_MODULE_ID(iNSTANCE, mODULE_iD, eNB_fLAG) \
+    if(eNB_fLAG == ENB_FLAG_YES) \
+        mODULE_iD = ENB_INSTANCE_TO_MODULE_ID(iNSTANCE); \
+    else \
+        mODULE_iD = UE_INSTANCE_TO_MODULE_ID(iNSTANCE)
+
+#define PROTOCOL_CTXT_COMPUTE_MODULE_ID(CtXt_h) \
+    INSTANCE_TO_MODULE_ID( (CtXt_h)->instance , (CtXt_h)->module_id , (CtXt_h)->enb_flag )
+
+
+#define PROTOCOL_CTXT_COMPUTE_INSTANCE(CtXt_h) \
+    MODULE_ID_TO_INSTANCE( (CtXt_h)->module_id , (CtXt_h)->instance , (CtXt_h)->enb_flag )
+
+
+#define PROTOCOL_CTXT_SET_BY_MODULE_ID(Ctxt_Pp, mODULE_iD, eNB_fLAG, rNTI, fRAME, sUBfRAME) \
+    (Ctxt_Pp)->module_id = mODULE_iD; \
+    (Ctxt_Pp)->enb_flag  = eNB_fLAG; \
+    (Ctxt_Pp)->rnti      = rNTI; \
+    (Ctxt_Pp)->frame     = fRAME; \
+    (Ctxt_Pp)->subframe  = sUBfRAME; \
+    PROTOCOL_CTXT_COMPUTE_INSTANCE(Ctxt_Pp)
+
+#define PROTOCOL_CTXT_SET_BY_INSTANCE(Ctxt_Pp, iNSTANCE, eNB_fLAG, rNTI, fRAME, sUBfRAME) \
+    (Ctxt_Pp)->instance  = iNSTANCE; \
+    (Ctxt_Pp)->enb_flag  = eNB_fLAG; \
+    (Ctxt_Pp)->rnti      = rNTI; \
+    (Ctxt_Pp)->frame     = fRAME; \
+    (Ctxt_Pp)->subframe  = sUBfRAME; \
+    PROTOCOL_CTXT_COMPUTE_MODULE_ID(Ctxt_Pp)
+
+#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u][RNTI %"PRIx16"]"
 #define PROTOCOL_CTXT_ARGS(CTXT_Pp) \
-        CTXT_Pp->frame, \
-        (CTXT_Pp->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \
-        CTXT_Pp->enb_module_id, \
-        CTXT_Pp->ue_module_id
+    (CTXT_Pp)->frame, \
+    ((CTXT_Pp)->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \
+    (CTXT_Pp)->module_id, \
+    (CTXT_Pp)->rnti
+
+#ifdef OAI_EMU
+#define CHECK_CTXT_ARGS(CTXT_Pp) \
+    if ((CTXT_Pp)->enb_flag) {\
+        AssertFatal (((CTXT_Pp)->module_id >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0),\
+                     "eNB module id is too low (%u/%d/%d)!\n",\
+                     (CTXT_Pp)->module_id,\
+                     oai_emulation.info.first_enb_local,\
+                     oai_emulation.info.nb_enb_local);\
+        AssertFatal (((CTXT_Pp)->module_id < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)) && (oai_emulation.info.nb_enb_local > 0),\
+                     "eNB module id is too high (%u/%d)!\n",\
+                     (CTXT_Pp)->module_id,\
+                     oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local);\
+    } else {\
+        AssertFatal ((CTXT_Pp)->module_id  < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local),\
+                     "UE module id is too high (%u/%d)!\n",\
+                     (CTXT_Pp)->module_id,\
+                     oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local);\
+        AssertFatal ((CTXT_Pp)->module_id  >= oai_emulation.info.first_ue_local,\
+                     "UE module id is too low (%u/%d)!\n",\
+                     (CTXT_Pp)->module_id,\
+                     oai_emulation.info.first_ue_local);\
+    }
+#else
+#define CHECK_CTXT_ARGS(CTXT_Pp)
+#endif
 #endif