diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
index 68900cda354cc4e71275ba181d82e7e1a1847c81..e1d8c47544cdc14a3174caa5c9198769762a0152 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
@@ -909,21 +909,26 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
       handle_dl_harq(UE, pid, harq_value == 0 && harq_confidence == 0, RC.nrmac[mod_id]->dl_bler.harq_round_max);
       if (harq_confidence == 1)  UE->mac_stats.pucch0_DTX++;
     }
-  }
 
-  // check scheduling request result, confidence_level == 0 is good
-  if (uci_01->pduBitmap & 0x1 && uci_01->sr->sr_indication && uci_01->sr->sr_confidence_level == 0 && uci_01->ul_cqi >= 148) {
-    // SR detected with SNR >= 10dB
-    sched_ctrl->SR |= true;
-    LOG_D(NR_MAC, "SR UE %04x ul_cqi %d\n", uci_01->rnti, uci_01->ul_cqi);
+    // tpc (power control) only if we received AckNack
+    if (uci_01->harq->harq_confidence_level==0)
+      sched_ctrl->tpc1 = nr_get_tpc(RC.nrmac[mod_id]->pucch_target_snrx10, uci_01->ul_cqi, 30);
+    else
+      sched_ctrl->tpc1 = 3;
+    sched_ctrl->pucch_snrx10 = uci_01->ul_cqi * 5 - 640;
+
+    free(uci_01->harq->harq_list);
+    free(uci_01->harq);
   }
 
-  // tpc (power control) only if we received AckNack or positive SR. For a
-  // negative SR, the UE won't have sent anything, and the SNR is not valid
-  if (((uci_01->pduBitmap >> 1) & 0x1) ) {
-    if ((uci_01->harq) && (uci_01->harq->harq_confidence_level==0)) sched_ctrl->tpc1 = nr_get_tpc(RC.nrmac[mod_id]->pucch_target_snrx10, uci_01->ul_cqi, 30);
-    else                                        sched_ctrl->tpc1 = 3;
-    sched_ctrl->pucch_snrx10 = uci_01->ul_cqi * 5 - 640;
+  // check scheduling request result, confidence_level == 0 is good
+  if (uci_01->pduBitmap & 0x1) {
+    if (uci_01->sr->sr_indication && uci_01->sr->sr_confidence_level == 0 && uci_01->ul_cqi >= 148) {
+      // SR detected with SNR >= 10dB
+      sched_ctrl->SR |= true;
+      LOG_D(NR_MAC, "SR UE %04x ul_cqi %d\n", uci_01->rnti, uci_01->ul_cqi);
+    }
+    free(uci_01->sr);
   }
 }
 
@@ -950,6 +955,11 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
   //                              30);
   //sched_ctrl->pucch_snrx10 = uci_234->ul_cqi * 5 - 640;
 
+  // TODO: handle SR
+  if (uci_234->pduBitmap & 0x1) {
+    free(uci_234->sr.sr_payload);
+  }
+
   if ((uci_234->pduBitmap >> 1) & 0x01) {
     // iterate over received harq bits
     for (int harq_bit = 0; harq_bit < uci_234->harq.harq_bit_len; harq_bit++) {
@@ -962,15 +972,18 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
       remove_front_nr_list(&sched_ctrl->feedback_dl_harq);
       handle_dl_harq(UE, pid, uci_234->harq.harq_crc != 1 && acknack, RC.nrmac[mod_id]->dl_bler.harq_round_max);
     }
+    free(uci_234->harq.harq_payload);
   }
   if ((uci_234->pduBitmap >> 2) & 0x01) {
     //API to parse the csi report and store it into sched_ctrl
     extract_pucch_csi_report(csi_MeasConfig, uci_234, frame, slot, UE, RC.nrmac[mod_id]->common_channels->ServingCellConfigCommon);
     //TCI handling function
     tci_handling(UE,frame, slot);
+    free(uci_234->csi_part1.csi_part1_payload);
   }
   if ((uci_234->pduBitmap >> 3) & 0x01) {
     //@TODO:Handle CSI Report 2
+    // nothing to free (yet)
   }
 }
 
diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
index 47705082d1c0b12fdd28a2321c401c9a8d43e322..f295d95184b84f8dcecfbe2c8a4897e8277f0505 100644
--- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
@@ -265,23 +265,8 @@ static void free_unqueued_nfapi_indications(nfapi_nr_rach_indication_t *rach_ind
   }
   if (uci_ind && uci_ind->num_ucis > 0)
   {
-    for (int i = 0; i < uci_ind->num_ucis; i++) {
-      switch (uci_ind->uci_list[i].pdu_type) {
-        case NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE:
-          if (uci_ind->uci_list[i].pucch_pdu_format_0_1.harq) {
-            free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_0_1.harq->harq_list);
-          }
-          free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_0_1.harq);
-          free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_0_1.sr);
-          break;
-
-        case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE:
-          free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.harq.harq_payload);
-          free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part1.csi_part1_payload);
-          free_and_zero(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part2.csi_part2_payload);
-          break;
-      }
-    }
+    /* PUCCH fields (HARQ, SR) are freed in handle_nr_uci_pucch_0_1() and
+     * handle_nr_uci_pucch_2_3_4() */
     free_and_zero(uci_ind->uci_list);
     free_and_zero(uci_ind);
   }