diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
index 587ac8c2631378ce2bab1e911c94ebf5b0cc8370..7a251be78bddd3c2c4d82fe1fe071586abfdb526 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
@@ -276,9 +276,11 @@ void flexran_trigger_rrc_measurements (mid_t mod_id, MeasResults_t*  measResults
 
   for (i = 0; i < num; i++){
     meas_stats[i].rnti = flexran_get_ue_crnti(mod_id, i);
-    meas_stats[i].meas_id = measResults->measId;
-    meas_stats[i].rsrp = measResults->measResultPCell.rsrpResult - 140;
-    meas_stats[i].rsrq = (measResults->measResultPCell.rsrqResult)/2 - 20;                          
+    meas_stats[i].meas_id = flexran_get_rrc_pcell_measid(mod_id,i);
+    meas_stats[i].rsrp =  flexran_get_rrc_pcell_rsrp(mod_id,i) - 140;
+    // measResults->measResultPCell.rsrpResult - 140;
+    meas_stats[i].rsrq =  flexran_get_rrc_pcell_rsrq(mod_id,i)/2 - 20;
+    // (measResults->measResultPCell.rsrqResult)/2 - 20;                          
     
   }
     // repl->neigh_meas = NULL;
@@ -505,23 +507,21 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id,
 	if (rrc_measurements == NULL)
 	  goto error;
 	protocol__flex_rrc_measurements__init(rrc_measurements);
-        
-	if (triggered_rrc){
-	  rrc_measurements->measid = meas_stats[i].meas_id;
-	  rrc_measurements->has_measid = 1;
-	  
-	  rrc_measurements->pcell_rsrp = meas_stats[i].rsrp;
-	  rrc_measurements->has_pcell_rsrp = 1;
-	  
-	  rrc_measurements->pcell_rsrq = meas_stats[i].rsrq;                          
-	  rrc_measurements->has_pcell_rsrq = 1 ;
-	  
-	  ue_report[i]->rrc_measurements = rrc_measurements;
-	  // triggered_rrc = false; // To be decided later
-	}
+	
+	rrc_measurements->measid = flexran_get_rrc_pcell_measid(mod_id,i);
+	rrc_measurements->has_measid = 1;
+	
+	rrc_measurements->pcell_rsrp = flexran_get_rrc_pcell_rsrp(mod_id,i) - 140;
+	rrc_measurements->has_pcell_rsrp = 1;
+	
+	rrc_measurements->pcell_rsrq = flexran_get_rrc_pcell_rsrq(mod_id,i)/2 - 20;
+	rrc_measurements->has_pcell_rsrq = 1 ;
+	
+	ue_report[i]->rrc_measurements = rrc_measurements;
+	
       }
     }       
-  } 
+  }
 
   /* To be extended for RRC layer */ 
   // if (report_config->nr_cc > 0) { 
diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c
index 7a4522e870472d004ce203023de6638e85112eb4..17d62ced868556097ec93363339e53613f05a934 100644
--- a/openair2/ENB_APP/flexran_agent_ran_api.c
+++ b/openair2/ENB_APP/flexran_agent_ran_api.c
@@ -1083,9 +1083,9 @@ void flexran_agent_set_operating_frame_type (mid_t mod_id, int cc_id, int frame_
 }
 
 /*********** PDCP  *************/
-/*PDCP num tx pdu status flexRAN*/
+/*PDCP super frame counter flexRAN*/
 uint32_t flexran_get_pdcp_sfn(const mid_t mod_id){
-  return Pdcp_sfn[mod_id];
+  return pdcp_enb[mod_id].sfn;
 }
 
 /*PDCP num tx pdu status flexRAN*/
@@ -1166,5 +1166,67 @@ uint32_t flexran_get_pdcp_rx_oo(const mid_t mod_id,  const mid_t ue_id, const lc
   return Pdcp_stats_rx_outoforder[mod_id][ue_id][lcid];
 }
 
+/******************** RRC *****************************/
 
-
+int flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id) {
+  struct rrc_eNB_ue_context_s* ue_context_p = NULL;
+  uint32_t rntiP = flexran_get_ue_crnti(mod_id,ue_id);
+  
+  ue_context_p = rrc_eNB_get_ue_context(&eNB_rrc_inst[mod_id],rntiP);
+  if(ue_context_p != NULL) {
+    if(ue_context_p->ue_context.measResults != NULL) {
+      return ue_context_p->ue_context.measResults->measId;
+    } else {
+      return -1;
+    }
+  } else {
+    return -1;
+  }
+}
+int flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id) {
+  struct rrc_eNB_ue_context_s* ue_context_p = NULL;
+  uint32_t rntiP = flexran_get_ue_crnti(mod_id,ue_id);
+  
+  ue_context_p = rrc_eNB_get_ue_context(&eNB_rrc_inst[mod_id],rntiP);
+  if(ue_context_p != NULL) {
+    if(ue_context_p->ue_context.measResults != NULL) {
+      return ue_context_p->ue_context.measResults->measResultPCell.rsrpResult;
+    } else {
+      return -1;
+    }
+  } else {
+    return -1;
+  }
+}
+int flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id) {
+  struct rrc_eNB_ue_context_s* ue_context_p = NULL;
+  uint32_t rntiP = flexran_get_ue_crnti(mod_id,ue_id);
+  
+  ue_context_p = rrc_eNB_get_ue_context(&eNB_rrc_inst[mod_id],rntiP);
+  if(ue_context_p != NULL) {
+    if(ue_context_p->ue_context.measResults != NULL) {
+      return ue_context_p->ue_context.measResults->measResultPCell.rsrqResult;
+    } else {
+      return -1;
+    }
+  } else {
+    return -1;
+  }
+}
+/*
+void* flexran_get_rrc_ncell_measresult_eutra(mid_t mod_id, mid_t ue_id) {
+  struct rrc_eNB_ue_context_s* ue_context_p = NULL;
+  uint32_t rntiP = flexran_get_ue_crnti(mod_id,ue_id);
+  
+  ue_context_p = rrc_eNB_get_ue_context(&eNB_rrc_inst[mod_id],rntiP);
+  if(ue_context_p != NULL) {
+    if(ue_context_p->ue_context.measResults != NULL) {
+      return &ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA;
+    } else {
+      return -1;
+    }
+  } else {
+    return -1;
+  }
+}
+*/
diff --git a/openair2/ENB_APP/flexran_agent_ran_api.h b/openair2/ENB_APP/flexran_agent_ran_api.h
index bb9592399e1c9cd07e7f0b03e05a35016b172d83..84723be0052d73da8c2876cdbb5e4693084a8c4d 100644
--- a/openair2/ENB_APP/flexran_agent_ran_api.h
+++ b/openair2/ENB_APP/flexran_agent_ran_api.h
@@ -391,4 +391,12 @@ uint32_t flexran_get_pdcp_rx_aiat_s(const mid_t mod_id,  const mid_t ue_id, cons
 /*PDCP num of received outoforder pdu status flexRAN*/
 uint32_t flexran_get_pdcp_rx_oo(const mid_t mod_id,  const mid_t ue_id, const lcid_t lcid);
 
+/*********************RRC**********************/
+/*Get primary cell measuremeant id flexRAN*/
+int flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id);
 
+/*Get primary cell RSRP measurement flexRAN*/  
+int flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id);
+
+/*Get primary cell RSRQ measurement flexRAN*/
+int flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id);
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 6118ddc745d77624278f9b183942cd19cfc19f4f..baba5fa39ecc0e305eafd73f71648c31eac5cb4c 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -69,7 +69,6 @@ extern int otg_enabled;
 #endif
 
 
-
 //-----------------------------------------------------------------------------
 /*
  * If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
@@ -403,7 +402,7 @@ boolean_t pdcp_data_req(
    */
   
   for (pdcp_uid=0; pdcp_uid< NUMBER_OF_UE_MAX;pdcp_uid++){
-    if (pdcp_p->rnti[pdcp_uid] == ctxt_pP->rnti ) 
+    if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti ) 
       break;
   }
 
@@ -414,9 +413,9 @@ boolean_t pdcp_data_req(
   Pdcp_stats_tx_bytes_s[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=sdu_buffer_sizeP;
   Pdcp_stats_tx_sn[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=current_sn;
 
-  Pdcp_stats_tx_aiat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (Pdcp_sfn[ctxt_pP->module_id] - Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
-  Pdcp_stats_tx_aiat_tmp_s[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (Pdcp_sfn[ctxt_pP->module_id] - Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]); 
-  Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=Pdcp_sfn[ctxt_pP->module_id];
+  Pdcp_stats_tx_aiat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
+  Pdcp_stats_tx_aiat_tmp_s[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]); 
+  Pdcp_stats_tx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=pdcp_enb[ctxt_pP->module_id].sfn;
     
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_REQ,VCD_FUNCTION_OUT);
   return ret;
@@ -875,8 +874,9 @@ pdcp_data_ind(
    */
   
   for (pdcp_uid=0; pdcp_uid< NUMBER_OF_UE_MAX;pdcp_uid++){
-    if (pdcp_p->rnti[pdcp_uid] == ctxt_pP->rnti )
+    if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti ){
       break;
+    }
   }	
   
   Pdcp_stats_rx[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
@@ -889,9 +889,9 @@ pdcp_data_ind(
   if (oo_flag == 1 )
     Pdcp_stats_rx_outoforder[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
   
-  Pdcp_stats_rx_aiat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (Pdcp_sfn[ctxt_pP->module_id] - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
-  Pdcp_stats_rx_aiat_tmp_s[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=(Pdcp_sfn[ctxt_pP->module_id] - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
-  Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=Pdcp_sfn[ctxt_pP->module_id];
+  Pdcp_stats_rx_aiat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
+  Pdcp_stats_rx_aiat_tmp_s[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=(pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
+  Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=pdcp_enb[ctxt_pP->module_id].sfn;
 
   
 #if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
@@ -920,10 +920,10 @@ void pdcp_update_stats(const protocol_ctxt_t* const  ctxt_pP){
   uint8_t            rb_id     = 0;
   
  // these stats are measured for both eNB and UE on per seond basis 
-  if (Pdcp_sfn[ctxt_pP->module_id] % 1000 == 0){
+  if (pdcp_enb[ctxt_pP->module_id].sfn % 1000 == 0){
     for (rb_id =0; rb_id < NB_RB_MAX; rb_id ++){
       for (pdcp_uid=0; pdcp_uid< NUMBER_OF_UE_MAX;pdcp_uid++){
-	//printf("frame %d and subframe %d \n", Pdcp_frame[ctxt_pP->module_id], Pdcp_subframe[ctxt_pP->module_id]);
+	//printf("frame %d and subframe %d \n", pdcp_enb[ctxt_pP->module_id].frame, pdcp_enb[ctxt_pP->module_id].subframe);
 	// tx stats 
 	Pdcp_stats_tx_rate_s[ctxt_pP->module_id][pdcp_uid][rb_id]= Pdcp_stats_tx_s[ctxt_pP->module_id][pdcp_uid][rb_id];
 	// unit: bit/s
@@ -975,9 +975,9 @@ pdcp_run (
     start_meas(&UE_pdcp_stats[ctxt_pP->module_id].pdcp_run);
   }
 
-  Pdcp_sfn[ctxt_pP->module_id]++; // range: 0 to 18,446,744,073,709,551,615
-  Pdcp_frame[ctxt_pP->module_id]=ctxt_pP->frame; // 1023 
-  Pdcp_subframe[ctxt_pP->module_id]= ctxt_pP->subframe;
+  pdcp_enb[ctxt_pP->module_id].sfn++; // range: 0 to 18,446,744,073,709,551,615
+  pdcp_enb[ctxt_pP->module_id].frame=ctxt_pP->frame; // 1023 
+  pdcp_enb[ctxt_pP->module_id].subframe= ctxt_pP->subframe;
   pdcp_update_stats(ctxt_pP);
    
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_IN);
@@ -1102,6 +1102,28 @@ pdcp_run (
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT);
 }
 
+void pdcp_add_UE(const protocol_ctxt_t* const  ctxt_pP){
+  int i, ue_flag=1, ret=-1;; 
+  for (i=0; i < NUMBER_OF_UE_MAX; i++){
+    if (pdcp_enb[ctxt_pP->module_id].rnti[i] == ctxt_pP->rnti) {
+      ue_flag=-1;
+      break;
+    }
+  }
+  if (ue_flag == 1 ){
+    for (i=0; i < NUMBER_OF_UE_MAX ; i++){
+      if (pdcp_enb[ctxt_pP->module_id].rnti[i] == 0 ){
+	pdcp_enb[ctxt_pP->module_id].rnti[i]=ctxt_pP->rnti;
+	pdcp_enb[ctxt_pP->module_id].uid[i]=i;
+	pdcp_enb[ctxt_pP->module_id].num_ues++;
+	printf("add new uid is %d %x\n\n", i, ctxt_pP->rnti);
+	ret=1;
+	break;
+      }
+    }
+  }
+  //return ret;
+}
 
 //-----------------------------------------------------------------------------
 boolean_t
@@ -1115,7 +1137,7 @@ pdcp_remove_UE(
   hash_key_t      key            = HASHTABLE_NOT_A_KEY_VALUE;
   hashtable_rc_t  h_rc;
 
-  // check and remove SRBs first
+   // check and remove SRBs first
 
   for (srb_id=0; srb_id<2; srb_id++) {
     key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, srb_id, SRB_FLAG_YES);
@@ -1130,6 +1152,19 @@ pdcp_remove_UE(
 
   (void)h_rc; /* remove gcc warning "set but not used" */
 
+  // remove ue for pdcp enb inst
+   for (i=0; i < NUMBER_OF_UE_MAX; i++) {
+    if (pdcp_enb[ctxt_pP->module_id].rnti[i] == ctxt_pP->rnti ) {
+      LOG_I(PDCP, "remove uid is %d/%d %x\n", i,
+	    pdcp_enb[ctxt_pP->module_id].uid[i],
+	    pdcp_enb[ctxt_pP->module_id].rnti[i]);
+      pdcp_enb[ctxt_pP->module_id].uid[i]=0;
+      pdcp_enb[ctxt_pP->module_id].rnti[i]=0;
+      pdcp_enb[ctxt_pP->module_id].num_ues--;
+      break;
+    }
+  }
+   
   return 1;
 }
 
@@ -1524,7 +1559,6 @@ rrc_pdcp_config_asn1_req (
   return 0;
 }
 
-
 //-----------------------------------------------------------------------------
 boolean_t
 pdcp_config_req_asn1 (
@@ -1545,19 +1579,14 @@ pdcp_config_req_asn1 (
   uint8_t         *const        kUPenc_pP)
 //-----------------------------------------------------------------------------
 {
-  int i; 
+  
   switch (actionP) {
   case CONFIG_ACTION_ADD:
     DevAssert(pdcp_pP != NULL);
     if (ctxt_pP->enb_flag == ENB_FLAG_YES) {
       pdcp_pP->is_ue = FALSE;
-      for (i=0; i < NUMBER_OF_UE_MAX; i++) {
-	if (pdcp_pP->rnti[i] != 0 ) continue ; // skip active ues
-        pdcp_pP->rnti[i]=ctxt_pP->rnti;
-	pdcp_pP->uid[i]=i;
-        Pdcp_num_ues[ctxt_pP->module_id]++;
-        break;
-      }
+      pdcp_add_ue(ctxt_pP);
+      
       //pdcp_eNB_UE_instance_to_rnti[ctxtP->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;
@@ -1658,15 +1687,7 @@ pdcp_config_req_asn1 (
           rb_idP);
 
    if (ctxt_pP->enb_flag == ENB_FLAG_YES) {
-	
-	for (i=0; i < NUMBER_OF_UE_MAX; i++) {
-	  if (pdcp_pP->rnti[i] == ctxt_pP->rnti ) {
-	    pdcp_pP->rnti[i]=0;
-	    pdcp_pP->uid[i]=0;
-	    Pdcp_num_ues[ctxt_pP->module_id]--;
-	    break;
-	  }
-	}
+     // pdcp_remove_UE(ctxt_pP);
    }
 
     /* Security keys */
@@ -2046,10 +2067,8 @@ void pdcp_layer_init(void)
   pdcp_output_header_bytes_to_write=0;
   pdcp_input_sdu_remaining_size_to_read=0;
 
-  memset(Pdcp_sfn, 0, sizeof(Pdcp_sfn));
-  memset(Pdcp_frame, 0, sizeof(Pdcp_frame));
-  memset(Pdcp_subframe, 0, sizeof(Pdcp_subframe));
-  memset(Pdcp_num_ues, 0, sizeof(Pdcp_num_ues));
+  memset(pdcp_enb, 0, sizeof(pdcp_enb_t));
+
   
   memset(Pdcp_stats_tx, 0, sizeof(Pdcp_stats_tx));
   memset(Pdcp_stats_tx_s, 0, sizeof(Pdcp_stats_tx_s));
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index e9f20e0a94677ce52d1a4b55c7893cdff292d2ea..cf3d927051800e803c651ec39082206d9dc752b0 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -94,11 +94,12 @@ extern int             pdcp_instance_cnt;
 int init_pdcp_thread(void);
 void cleanup_pdcp_thread(void);
 
+/*
 public_pdcp(uint64_t Pdcp_sfn[MAX_NUM_CCs]);
 public_pdcp(frame_t Pdcp_frame[MAX_NUM_CCs]);
 public_pdcp(sub_frame_t Pdcp_subframe[MAX_NUM_CCs]);
 public_pdcp(uint16_t Pdcp_num_ues[MAX_NUM_CCs]);
-
+*/
 
 public_pdcp(uint32_t Pdcp_stats_tx_bytes[MAX_NUM_CCs][NUMBER_OF_UE_MAX][NB_RB_MAX]);
 public_pdcp(uint32_t Pdcp_stats_tx_bytes_s[MAX_NUM_CCs][NUMBER_OF_UE_MAX][NB_RB_MAX]);
@@ -131,7 +132,19 @@ public_pdcp(void pdcp_update_perioidical_stats(const protocol_ctxt_t* const  ctx
 /*Packet Probing for agent PDCP*/
 //public_pdcp(uint64_t *pdcp_packet_counter);
 //public_pdcp(uint64_t *pdcp_size_packet);
+typedef struct pdcp_enb_s {
+  // used for eNB stats generation
+  uint16_t uid[NUMBER_OF_UE_MAX];
+  rnti_t rnti[NUMBER_OF_UE_MAX];
+  uint16_t num_ues;
+  
+  uint64_t sfn;
+  frame_t  frame;
+  sub_frame_t subframe;
+  
+} pdcp_enb_t; 
 
+public_pdcp(pdcp_enb_t pdcp_enb[MAX_NUM_CCs]);
 
 typedef struct pdcp_stats_s {
   time_stats_t pdcp_run;
@@ -154,11 +167,7 @@ typedef struct pdcp_s {
   boolean_t is_ue;
   boolean_t is_srb;
 
- // used for eNB stats generation
-  uint16_t uid[NUMBER_OF_UE_MAX]; // local to pdcp
-  rnti_t rnti[NUMBER_OF_UE_MAX];
-
-  /* Configured security algorithms */
+   /* Configured security algorithms */
   uint8_t cipheringAlgorithm;
   uint8_t integrityProtAlgorithm;
 
@@ -360,9 +369,15 @@ public_pdcp(boolean_t pdcp_config_req_asn1 (
               uint8_t         *const kRRCint,
               uint8_t         *const kUPenc));
 
-
+/*! \fn void pdcp_add_UE(const protocol_ctxt_t* const  ctxt_pP)
+* \brief  Function (for RRC) to add a new UE in PDCP module
+* \param[in]  ctxt_pP           Running context.
+* \return     A status about the processing, OK or error code.
+*/
+public_pdcp(void pdcp_add_UE(const protocol_ctxt_t* const  ctxt_pP));
+  
 /*! \fn boolean_t pdcp_remove_UE(const protocol_ctxt_t* const  ctxt_pP)
-* \brief  Function for RRC to configure a Radio Bearer clear all PDCP resources for a particular UE
+* \brief  Function for RRC to remove UE from PDCP module hashtable 
 * \param[in]  ctxt_pP           Running context.
 * \return     A status about the processing, OK or error code.
 */
diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c
index 6a64d7811e7d554d483827ad20d63dd9cc63dff5..71616ffd9183eec05bfa1cf0b5af0a708c26f97c 100644
--- a/openair2/RRC/LITE/L2_interface.c
+++ b/openair2/RRC/LITE/L2_interface.c
@@ -597,10 +597,10 @@ rrc_data_ind(
   rb_id_t    DCCH_index = Srb_id;
 
   if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
-    LOG_N(RRC, "[UE %x] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d\n",
+    LOG_D(RRC, "[UE %x] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d\n",
           ctxt_pP->module_id, ctxt_pP->frame, DCCH_index,Srb_id,sdu_sizeP,  ctxt_pP->eNB_index);
   } else {
-    LOG_N(RRC, "[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %x\n",
+    LOG_D(RRC, "[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %x\n",
           ctxt_pP->module_id,
           ctxt_pP->frame,
           DCCH_index,
diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h
index 0a2043fd4e145eb1f716083936bba7ac44a4cfc1..29bc3e3997b61199d20a2f27f2bcccd640a9db85 100644
--- a/openair2/RRC/LITE/defs.h
+++ b/openair2/RRC/LITE/defs.h
@@ -374,7 +374,8 @@ typedef struct eNB_RRC_UE_s {
   SRB_INFO_TABLE_ENTRY               Srb2;
   MeasConfig_t*                      measConfig;
   HANDOVER_INFO*                     handover_info;
-
+  MeasResults_t*                     measResults;
+  
 #if defined(ENABLE_SECURITY)
   /* KeNB as derived from KASME received from EPC */
   uint8_t kenb[32];
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index 20bc99ab79572b6cad983d08f3131cb33c279b54..3b64d2a45cd6bd7f94195f9d30a8b4265f0bd27e 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -425,7 +425,7 @@ rrc_eNB_generate_SecurityModeCommand(
 void
 rrc_eNB_process_MeasurementReport(
   const protocol_ctxt_t* const ctxt_pP,
-  rrc_eNB_ue_context_t*          const ue_context_pP,
+  rrc_eNB_ue_context_t*        ue_context_pP,
   const MeasResults_t*   const measResults2
 );
 
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 05e59755c26449f686ae7b25c59df83e596a3973..aaf12da1755f4f62eca1cae7e481b03628356d7e 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -2840,32 +2840,56 @@ rrc_eNB_generate_RRCConnectionReconfiguration_SCell(
 void
 rrc_eNB_process_MeasurementReport(
   const protocol_ctxt_t* const ctxt_pP,
-  rrc_eNB_ue_context_t*          const ue_context_pP,
+  rrc_eNB_ue_context_t*         ue_context_pP,
   const MeasResults_t*   const measResults2
 )
 //-----------------------------------------------------------------------------
 {
-  // T(T_ENB_RRC_MEASUREMENT_REPORT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
-  //   T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-
-
-  // LOG_I(RRC, "[eNB %d] Frame %d: Process Measurement Report From UE %x (Measurement Id %d)\n",
-  //       ctxt_pP->module_id, ctxt_pP->frame, ctxt_pP->rnti, (int)measResults2->measId);
-
-  // if (measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count > 0) {
-  //   LOG_I(RRC, "Physical Cell Id %d\n",
-  //         (int)measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId);
-  //   LOG_I(RRC, "RSRP of Target %d\n",
-  //         (int)*(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->
-  //                measResult.rsrpResult));
-  //   LOG_I(RRC, "RSRQ of Target %d\n",
-  //         (int)*(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->
-  //                measResult.rsrqResult));
-  // }
+  int i=0;
+  int neighboring_cells=-1;
+  
+  T(T_ENB_RRC_MEASUREMENT_REPORT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
+    T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
+
+  if (measResults2 == NULL )
+    return;
+  
+  if (measResults2->measId > 0 ){
+     if (ue_context_pP->ue_context.measResults == NULL) {
+       ue_context_pP->ue_context.measResults = CALLOC(1, sizeof(MeasResults_t));
+     }
+     ue_context_pP->ue_context.measResults->measId=measResults2->measId; 
+     ue_context_pP->ue_context.measResults->measResultPCell.rsrpResult=measResults2->measResultPCell.rsrpResult;
+     ue_context_pP->ue_context.measResults->measResultPCell.rsrqResult=measResults2->measResultPCell.rsrqResult;
+     LOG_D(RRC, "[eNB %d]Frame %d: UE %x (Measurement Id %d): RSRP of Source %ld\n", ctxt_pP->module_id, ctxt_pP->frame, ctxt_pP->rnti, (int)measResults2->measId, ue_context_pP->ue_context.measResults->measResultPCell.rsrpResult-140);
+     LOG_D(RRC, "[eNB %d]Frame %d: UE %x (Measurement Id %d): RSRQ of Source %ld\n", ctxt_pP->module_id, ctxt_pP->frame, ctxt_pP->rnti, (int)measResults2->measId, ue_context_pP->ue_context.measResults->measResultPCell.rsrqResult/2 - 20);
+   }
+   if (measResults2->measResultNeighCells == NULL)
+     return;
+
+   if (measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count > 0) {
+     neighboring_cells=measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count;
+     
+     if (ue_context_pP->ue_context.measResults->measResultNeighCells == NULL) {
+       
+       ue_context_pP->ue_context.measResults->measResultNeighCells = CALLOC(1, sizeof(*measResults2->measResultNeighCells)*neighboring_cells);
+     }
+     ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.count=neighboring_cells;
+     for (i=0; i < neighboring_cells; i++){
+       memcpy (ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i],
+	       measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[i],
+	       sizeof(MeasResultListEUTRA_t));
+       
+       LOG_D(RRC, "Physical Cell Id %d\n",
+	     (int)ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->physCellId);
+       LOG_D(RRC, "RSRP of Target %d\n",
+	     (int)*(ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->measResult.rsrpResult));
+       LOG_D(RRC, "RSRQ of Target %d\n",
+	     (int)*(ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->measResult.rsrqResult));
+     }
+   }
 
 // #if defined(Rel10) || defined(Rel14)
-  LOG_I(RRC, "RSRP of Source %ld\n", measResults2->measResultPCell.rsrpResult);
-  LOG_I(RRC, "RSRQ of Source %ld\n", measResults2->measResultPCell.rsrqResult);
 
   
 // #else
@@ -5109,13 +5133,6 @@ rrc_eNB_decode_dcch(
         ue_context_p,
         &ul_dcch_msg->message.choice.c1.choice.measurementReport.
         criticalExtensions.choice.c1.choice.measurementReport_r8.measResults);
- #if defined(FLEXRAN_AGENT_SB_IF)
-                        
-      if (rrc_agent_registered[ctxt_pP->module_id]) {
-        agent_rrc_xface[ctxt_pP->eNB_index]->flexran_trigger_rrc_measurements (ctxt_pP->module_id, &ul_dcch_msg->message.choice.c1.choice.measurementReport.criticalExtensions.choice.c1.choice.measurementReport_r8.measResults);
-            }
-#endif
-
       break;
 
     case UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: