diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 1d0983f2887fec06fcb0cdbc52bee94bb3a1a670..9f46939d2e8fd77b716573477a1931fa8a9ca0ea 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -1394,10 +1394,9 @@ pdcp_config_req_asn1 (
   case CONFIG_ACTION_ADD:
     DevAssert(pdcp_pP != NULL);
     if (ctxt_pP->enb_flag == ENB_FLAG_YES) {
-#warning "TODO pdcp_module_id_to_rnti"
       pdcp_pP->is_ue = FALSE;
-      //pdcp_eNB_module_id_to_rnti[ctxt_pP.module_id][] = ctxt_pP->rnti;
-
+      pdcp_eNB_UE_instance_to_rnti[pdcp_eNB_UE_instance_to_rnti_index] = ctxt_pP->rnti;
+      pdcp_eNB_UE_instance_to_rnti_index = (pdcp_eNB_UE_instance_to_rnti_index + 1) % NUMBER_OF_UE_MAX;
     } else {
       pdcp_pP->is_ue = TRUE;
       pdcp_UE_UE_module_id_to_rnti[ctxt_pP->module_id] = ctxt_pP->rnti;
@@ -1845,10 +1844,12 @@ void pdcp_layer_init(void)
         memset(&pdcp_mbms_array_ue[instance][service_id][session_id], 0, sizeof(pdcp_mbms_t));
       }
     }
-
 #endif
+    pdcp_eNB_UE_instance_to_rnti[instance] = NOT_A_RNTI;
   }
+  pdcp_eNB_UE_instance_to_rnti_index = 0; 
 
+    
   for (instance = 0; instance < NUMBER_OF_eNB_MAX; instance++) {
 #if defined(Rel10)
 
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index 98f1062501cd9cf34120823ff72725e81d1d78b2..7b3febfd3bddadc65d40b8e70e85736404b6ed39 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -447,6 +447,8 @@ public_pdcp(pdcp_stats_t              eNB_pdcp_stats[NUMBER_OF_eNB_MAX];)
 
 // for UE code conly
 protected_pdcp(rnti_t                 pdcp_UE_UE_module_id_to_rnti[NUMBER_OF_UE_MAX];)
+protected_pdcp(rnti_t                 pdcp_eNB_UE_instance_to_rnti[NUMBER_OF_UE_MAX];) // for noS1 mode
+protected_pdcp(unsigned int           pdcp_eNB_UE_instance_to_rnti_index;)
 #if defined(Rel10)
 public_pdcp(pdcp_mbms_t               pdcp_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];)   // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
 public_pdcp(pdcp_mbms_t               pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
index ef18798dce9bcdcb12917274f7be12a4ee4a64ad..d09111e2f44357239c815813be729f1528fe158d 100755
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
@@ -308,7 +308,7 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const  ctxt_pP)
 int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const  ctxt_pP)
 {
 #ifdef PDCP_USE_NETLINK
-  protocol_ctxt_t                ctxt_cpy;
+  protocol_ctxt_t                ctxt_cpy = *ctxt_pP;
   protocol_ctxt_t                ctxt;
   hash_key_t                     key       = HASHTABLE_NOT_A_KEY_VALUE;
   hashtable_rc_t                 h_rc;
@@ -321,8 +321,6 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const  ctxt_pP)
   pdcp_transmission_mode_t       pdcp_mode = PDCP_TRANSMISSION_MODE_UNKNOWN;
 
 
-  ctxt_cpy = *ctxt_pP;
-
   while (pdcp_netlink_dequeue_element(ctxt_pP, &data_p) != 0) {
     DevAssert(data_p != NULL);
     rab_id = data_p->pdcp_read_header.rb_id % maxDRB;
@@ -505,6 +503,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const  ctxt_pP)
             ctxt.module_id = 0;
             rab_id      = pdcp_read_header_g.rb_id % maxDRB;
           }
+          ctxt.rnti          = pdcp_eNB_UE_instance_to_rnti[ctxt.module_id];
 
 #endif