diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 78d6f6a3d76574d1b8ab70d96184b5e5297095c0..b75ab774c69549afa817d727b02dfb3a410c10d6 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -2131,33 +2131,36 @@ dump_ue_list(UE_list_t *listP) {
  * Add a UE to UE_list listP
  */
 inline void add_ue_list(UE_list_t *listP, int UE_id) {
-  if (listP->head == -1) {
-    listP->head = UE_id;
-    listP->next[UE_id] = -1;
-  } else {
-    int i = listP->head;
-    while (listP->next[i] >= 0)
-      i = listP->next[i];
-    listP->next[i] = UE_id;
-    listP->next[UE_id] = -1;
-  }
+  int *cur = &listP->head;
+  while (*cur >= 0)
+    cur = &listP->next[*cur];
+  *cur = UE_id;
 }
 
 //------------------------------------------------------------------------------
 /*
- * Remove a UE from the UE_list listP, return the previous element
+ * Remove a UE from the UE_list listP
  */
 inline int remove_ue_list(UE_list_t *listP, int UE_id) {
-  listP->next[UE_id] = -1;
-  if (listP->head == UE_id) {
-    listP->head = listP->next[UE_id];
-    return -1;
-  }
+  int *cur = &listP->head;
+  while (*cur != -1 && *cur != UE_id)
+    cur = &listP->next[*cur];
+  if (*cur == -1)
+    return 0;
+  int *next = &listP->next[*cur];
+  *cur = listP->next[*cur];
+  *next = -1;
+  return 1;
+}
 
-  int previous = prev(listP, UE_id);
-  if (previous != -1)
-    listP->next[previous] = listP->next[UE_id];
-  return previous;
+//------------------------------------------------------------------------------
+/*
+ * Initialize the UE_list listP
+ */
+inline void init_ue_list(UE_list_t *listP) {
+  listP->head = -1;
+  for (int i = 0; i < MAX_MOBILES_PER_ENB; ++i)
+    listP->next[i] = -1;
 }
 
 //------------------------------------------------------------------------------
diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h
index 61251ef088e6679dba534c9425a591a22d7e5441..818eb834fbc6288bc051347d55a0a912bda401b2 100644
--- a/openair2/LAYER2/MAC/mac_proto.h
+++ b/openair2/LAYER2/MAC/mac_proto.h
@@ -659,6 +659,7 @@ int prev(UE_list_t *listP, int nodeP);
 void add_ue_list(UE_list_t *listP, int UE_id);
 int remove_ue_list(UE_list_t *listP, int UE_id);
 void dump_ue_list(UE_list_t *listP);
+void init_ue_list(UE_list_t *listP);
 int UE_num_active_CC(UE_info_t *listP, int ue_idP);
 int UE_PCCID(module_id_t mod_idP, int ue_idP);
 rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP);
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 35b5136889aa8c39022b0ed35ccfe93cfe532f85..659c7250e85002af0a8e1c3908fea8350f5b9d22 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -45,11 +45,8 @@ extern RAN_CONTEXT_t RC;
 
 void init_UE_info(UE_info_t *UE_info)
 {
-  int list_el;
   UE_info->num_UEs = 0;
-  UE_info->list.head = -1;
-  for (list_el = 0; list_el < MAX_MOBILES_PER_ENB; list_el++)
-    UE_info->list.next[list_el] = -1;
+  init_ue_list(&UE_info->list);
   memset(UE_info->DLSCH_pdu, 0, sizeof(UE_info->DLSCH_pdu));
   memset(UE_info->UE_template, 0, sizeof(UE_info->UE_template));
   memset(UE_info->eNB_UE_stats, 0, sizeof(UE_info->eNB_UE_stats));