diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 057f33501ac1c11d24d8bcd12d67457970a689fd..9aa37c988a0cb7aae37b0d6ff39f05e5c8ca8db4 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -112,7 +112,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
   for (i=UE_list->head;i>0;i=UE_list->next[i]) {
     LOG_I(MAC,"UE %d: rnti %x (%p)\n",i,UE_RNTI(module_idP,i),mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i)));
     if (mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i))==NULL)
-      mac_remove_ue(module_idP,i);
+      mac_remove_ue(module_idP,i,frameP);
   }
 #if defined(ENABLE_ITTI)
   do {
@@ -206,7 +206,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     next_i = UE_list->next[i];
     LOG_D(MAC,"UE %d : rnti %x, stats %p\n",i,UE_RNTI(module_idP,i),mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i)));
     if (mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i))==NULL) {
-      mac_remove_ue(module_idP,i);
+      mac_remove_ue(module_idP,i,frameP);
     }
     i=next_i;
   }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index a8848ca568a277e477f82b6803317827ac5382a1..9a65a7400557513263723d12c07847011dd67a19 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -249,7 +249,7 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP) {
   return(-1);
 }
 
-int mac_remove_ue(module_id_t mod_idP, int ue_idP) {
+int mac_remove_ue(module_id_t mod_idP, int ue_idP, int frameP) {
 
   int prev,i, ret=-1;
 
@@ -273,7 +273,7 @@ int mac_remove_ue(module_id_t mod_idP, int ue_idP) {
   eNB_dlsch_info[mod_idP][pCC_id][ue_idP].rnti                        = 0;
   eNB_dlsch_info[mod_idP][pCC_id][ue_idP].status                      = S_DL_NONE;
 
-  rrc_eNB_free_UE_index(mod_idP,ue_idP);
+  rrc_eNB_free_UE_index(mod_idP,ue_idP,frameP);
 
   prev = UE_list->head;
   for (i=UE_list->head;i>=0;i=UE_list->next[i]) {
diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h
index 916c938958bf9b8dc39d4a70bc1eec1abbf749d9..dc0d1ea0b608d7250d9a4057196facb767d9ae0b 100644
--- a/openair2/LAYER2/MAC/proto.h
+++ b/openair2/LAYER2/MAC/proto.h
@@ -472,7 +472,7 @@ uint8_t *parse_ulsch_header(uint8_t *mac_header,
 int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active);
 int mac_init(void);
 int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti,int harq_pid);
-int mac_remove_ue(module_id_t Mod_id, int UE_id);
+int mac_remove_ue(module_id_t Mod_id, int UE_id,int frameP);
 
 
 int maxround(module_id_t Mod_id,uint16_t rnti,int frame,sub_frame_t subframe,uint8_t ul_flag);
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index 8bf332eeb83aa44ff15185bd843e8f3e48c9c9c7..d32e5b82fc771f6f9cfe46240ebd45ad7924687f 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -263,7 +263,7 @@ uint8_t check_trigger_meas_event(uint8_t module_idP,frame_t frameP, uint8_t eNB_
 //void rrc_ue_process_ueCapabilityEnquiry(uint8_t module_idP,uint32_t frame,UECapabilityEnquiry_t *UECapabilityEnquiry,uint8_t eNB_index);
 //void rrc_ue_process_securityModeCommand(uint8_t module_idP,uint32_t frame,SecurityModeCommand_t *securityModeCommand,uint8_t eNB_index);
 
-void rrc_eNB_free_UE_index (module_id_t enb_mod_idP, module_id_t ue_mod_idP);
+void rrc_eNB_free_UE_index (module_id_t enb_mod_idP, module_id_t ue_mod_idP,int frameP);
 
 long binary_search_int(int elements[], long numElem, int value);
 
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 2f41904b7983d2e2cd7774a0c19288d3441fcf7d..b6cdce2f42a089aee3a315afbec5c49a45ea9f81 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -527,17 +527,25 @@ static module_id_t rrc_eNB_get_next_free_UE_index(
 }
 
 void rrc_eNB_free_UE_index(
-    module_id_t enb_mod_idP,
-    module_id_t ue_mod_idP) {
-    AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %d!", enb_mod_idP, NB_eNB_INST, ue_mod_idP);
-    AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE inst invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX,
-                enb_mod_idP);
+			   module_id_t enb_mod_idP,
+			   module_id_t ue_mod_idP,
+			   int frameP) {
 
-    LOG_W(RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP,
-          eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]);
-    eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE;
-    eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0;
-    free(eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP]);
+  DRB_ToAddModList_t                 *DRB_configList = eNB_rrc_inst[enb_mod_idP].DRB_configList[ue_mod_idP];
+  SRB_ToAddModList_t                 *SRB_configList = eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP];
+
+  AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %d!", enb_mod_idP, NB_eNB_INST, ue_mod_idP);
+  AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE inst invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX,
+	      enb_mod_idP);
+  
+  LOG_W(RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP,
+	eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]);
+  eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE;
+  eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0;
+
+  rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, ENB_FLAG_YES, SRB_FLAG_YES, MBMS_FLAG_NO, CONFIG_ACTION_REMOVE,
+		       1);
+  free(eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP]);
 }
 
 /*------------------------------------------------------------------------------*/