diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 9d5bdf90ef9e9ca2280c14c4c5928994a013abcf..7b86a405e7447f2fccdc2c3ad6b89e6c94378268 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -3432,9 +3432,12 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
            sched_ctl->tbcnt[CC_idP][harq_pid] = 0;
            LOG_D(MAC,"frame %d subframe %d Acking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
          }else{ //nack
-         if( sched_ctl->round[CC_idP][harq_pid]<8)
-           sched_ctl->round[CC_idP][harq_pid]++;
-       LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
+           sched_ctl->round[CC_idP][harq_pid]++; // increment round
+           if (sched_ctl->round[CC_idP][harq_pid] == 4) {
+             sched_ctl->round[CC_idP][harq_pid] = 8;     // release HARQ process
+             sched_ctl->tbcnt[CC_idP][harq_pid] = 0;
+           }
+           LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
       if(sched_ctl->round[CC_idP][harq_pid] == 8){
        for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) {
         if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){