diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 4a418d0d80304de84d8aba75af6460c9a142c5cb..d5aa6aebf6ce6f88c8197341385513a8a80a5788 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -1651,6 +1651,12 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP, NR_CellGroupConfig_t *secon
       add_tail_nr_list(&sched_ctrl->available_dl_harq, harq);
     create_nr_list(&sched_ctrl->feedback_dl_harq, nrofHARQ);
     create_nr_list(&sched_ctrl->retrans_dl_harq, nrofHARQ);
+    create_nr_list(&sched_ctrl->available_ul_harq, 16);
+    // add all available HARQ processes for this UE
+    for (int harq = 0; harq < 16; harq++)
+      add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
+    create_nr_list(&sched_ctrl->feedback_ul_harq, 16);
+    create_nr_list(&sched_ctrl->retrans_ul_harq, 16);
     LOG_I(MAC, "gNB %d] Add NR UE_id %d : rnti %x\n",
           mod_idP,
           UE_id,
@@ -1694,6 +1700,9 @@ void mac_remove_nr_ue(module_id_t mod_id, rnti_t rnti)
     destroy_nr_list(&sched_ctrl->available_dl_harq);
     destroy_nr_list(&sched_ctrl->feedback_dl_harq);
     destroy_nr_list(&sched_ctrl->retrans_dl_harq);
+    destroy_nr_list(&sched_ctrl->available_ul_harq);
+    destroy_nr_list(&sched_ctrl->feedback_ul_harq);
+    destroy_nr_list(&sched_ctrl->retrans_ul_harq);
     LOG_I(MAC, "[gNB %d] Remove NR UE_id %d : rnti %x\n",
           mod_id,
           UE_id,
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index 000263a99314d3cfdcce14a4676159e4bbdc1c91..98b2638ad59c58a62ed8f7a1bd024e4fd28d517c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -441,7 +441,14 @@ typedef struct {
   NR_list_t feedback_dl_harq;
   /// HARQ processes that await retransmission
   NR_list_t retrans_dl_harq;
+  /// information about every UL HARQ process
   NR_UE_ul_harq_t ul_harq_processes[NR_MAX_NB_HARQ_PROCESSES];
+  /// UL HARQ processes that are free
+  NR_list_t available_ul_harq;
+  /// UL HARQ processes that await feedback
+  NR_list_t feedback_ul_harq;
+  /// UL HARQ processes that await retransmission
+  NR_list_t retrans_ul_harq;
   int dummy;
   NR_UE_mac_ce_ctrl_t UE_mac_ce_ctrl;// MAC CE related information
 } NR_UE_sched_ctrl_t;