diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 1dd3a26053a34c2fa39f7b009d8203b67eaa70ef..255f21ba4de360438e6137e4625666da9705cb28 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -7467,6 +7467,29 @@ void rrc_enb_init(void) {
   memset(&rrc_release_info,0,sizeof(RRC_release_list_t));
 }
 
+//-----------------------------------------------------------------------------
+int add_ue_to_remove(struct rrc_eNB_ue_context_s **ue_to_be_removed,
+                     int removed_ue_count,
+                     struct rrc_eNB_ue_context_s *ue_context_p)
+{
+  int i;
+
+  /* is it already here? */
+  for (i = 0; i < removed_ue_count; i++)
+    if (ue_to_be_removed[i] == ue_context_p)
+      return removed_ue_count;
+
+  if (removed_ue_count == NUMBER_OF_UE_MAX) {
+    LOG_E(RRC, "fatal: ue_to_be_removed is full\n");
+    exit(1);
+  }
+
+  ue_to_be_removed[removed_ue_count] = ue_context_p;
+  removed_ue_count++;
+
+  return removed_ue_count;
+}
+
 //-----------------------------------------------------------------------------
 void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
 {
@@ -7474,7 +7497,9 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
   int32_t ref_timestamp_ms = 0;
   struct timeval ts;
   struct rrc_eNB_ue_context_s *ue_context_p = NULL;
-  struct rrc_eNB_ue_context_s *ue_to_be_removed = NULL;
+  struct rrc_eNB_ue_context_s *ue_to_be_removed[NUMBER_OF_UE_MAX];
+  int removed_ue_count = 0;
+  int cur_ue;
 #ifdef LOCALIZATION
   double estimated_distance = 0;
   protocol_ctxt_t                     ctxt;
@@ -7515,7 +7540,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
         // remove UE after 20 seconds after MAC (or else) has indicated UL failure
         LOG_I(RRC, "Removing UE %x instance, because of uplink failure timer timeout\n",
               ue_context_p->ue_context.rnti);
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         break; // break RB_FOREACH
       }
     }
@@ -7531,7 +7556,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
         if (EPC_MODE_ENABLED && !NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type))
           rrc_eNB_generate_RRCConnectionRelease(ctxt_pP, ue_context_p);
         else
-          ue_to_be_removed = ue_context_p;
+          removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
 
         ue_context_p->ue_context.ue_release_timer_s1 = 0;
         break; // break RB_FOREACH
@@ -7545,14 +7570,14 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
         LOG_I(RRC, "Removing UE %x instance after UE_CONTEXT_RELEASE_Complete (ue_release_timer_rrc timeout)\n",
               ue_context_p->ue_context.rnti);
         ue_context_p->ue_context.ue_release_timer_rrc = 0;
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         break; // break RB_FOREACH
       }
     }
 
     if (ue_context_p->ue_context.handover_info != NULL) {
       if (ue_context_p->ue_context.handover_info->state == HO_RELEASE) {
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         rrc_eNB_handover_ue_context_release(ctxt_pP, ue_context_p);
         break; //break RB_FOREACH (why to break ?)
       }
@@ -7625,7 +7650,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
       if (ue_context_p->ue_context.ue_rrc_inactivity_timer >= RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres) {
         LOG_I(RRC, "Removing UE %x instance because of rrc_inactivity_timer timeout\n",
               ue_context_p->ue_context.rnti);
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         break; // break RB_FOREACH
       }
     }
@@ -7637,7 +7662,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
         LOG_I(RRC, "Removing UE %x instance because of reestablishment_timer timeout\n",
               ue_context_p->ue_context.rnti);
         ue_context_p->ue_context.ul_failure_timer = 20000; // lead to send S1 UE_CONTEXT_RELEASE_REQ
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         ue_context_p->ue_context.ue_reestablishment_timer = 0;
         break; // break RB_FOREACH
       }
@@ -7654,32 +7679,32 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
         * It is no more the case.
         * The timer should be renamed.
         */
-        ue_to_be_removed = ue_context_p;
+        removed_ue_count = add_ue_to_remove(ue_to_be_removed, removed_ue_count, ue_context_p);
         ue_context_p->ue_context.ue_release_timer = 0;
         break; // break RB_FOREACH
       }
     }
   } // end RB_FOREACH
 
-  if (ue_to_be_removed) {
-    if ((ue_to_be_removed->ue_context.ul_failure_timer >= 20000) ||
-        ((ue_to_be_removed->ue_context.ue_rrc_inactivity_timer >= RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres) &&
+  for (cur_ue = 0; cur_ue < removed_ue_count; cur_ue++) {
+    if ((ue_to_be_removed[cur_ue]->ue_context.ul_failure_timer >= 20000) ||
+        ((ue_to_be_removed[cur_ue]->ue_context.ue_rrc_inactivity_timer >= RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres) &&
          (RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres > 0))) {
-      ue_to_be_removed->ue_context.ue_release_timer_s1 = 1;
-      ue_to_be_removed->ue_context.ue_release_timer_thres_s1 = 100;
-      ue_to_be_removed->ue_context.ue_release_timer = 0;
-      ue_to_be_removed->ue_context.ue_reestablishment_timer = 0;
+      ue_to_be_removed[cur_ue]->ue_context.ue_release_timer_s1 = 1;
+      ue_to_be_removed[cur_ue]->ue_context.ue_release_timer_thres_s1 = 100;
+      ue_to_be_removed[cur_ue]->ue_context.ue_release_timer = 0;
+      ue_to_be_removed[cur_ue]->ue_context.ue_reestablishment_timer = 0;
     }
 
-    rrc_eNB_free_UE(ctxt_pP->module_id, ue_to_be_removed);
+    rrc_eNB_free_UE(ctxt_pP->module_id, ue_to_be_removed[cur_ue]);
 
-    if (ue_to_be_removed->ue_context.ul_failure_timer >= 20000) {
-      ue_to_be_removed->ue_context.ul_failure_timer = 0;
+    if (ue_to_be_removed[cur_ue]->ue_context.ul_failure_timer >= 20000) {
+      ue_to_be_removed[cur_ue]->ue_context.ul_failure_timer = 0;
     }
 
-    if ((ue_to_be_removed->ue_context.ue_rrc_inactivity_timer >= RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres) &&
+    if ((ue_to_be_removed[cur_ue]->ue_context.ue_rrc_inactivity_timer >= RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres) &&
         (RC.rrc[ctxt_pP->module_id]->configuration.rrc_inactivity_timer_thres > 0)) {
-      ue_to_be_removed->ue_context.ue_rrc_inactivity_timer = 0; //reset timer after S1 command UE context release request is sent
+      ue_to_be_removed[cur_ue]->ue_context.ue_rrc_inactivity_timer = 0; //reset timer after S1 command UE context release request is sent
     }
   }