diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 70bc926e3c0773aa38b70006268df36d181f4649..68515b5bc5fecbc9caaac40ecc046c10e2cc0f8a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -661,8 +661,13 @@ rx_sdu(const module_id_t enb_mod_idP,
 
 
 		    if(mac->common_channels[CC_idP].tdd_Config!=NULL){
-		      ra->Msg4_frame = frameP + ((subframeP > 2) ? 1 : 0);
-		      ra->Msg4_subframe = (subframeP + 7) % 10; // TODO need to be complete for other tdd configs.
+		        switch(mac->common_channels[CC_idP].tdd_Config->subframeAssignment){
+		          case 1:
+		            ra->Msg4_frame = frameP + ((subframeP > 2) ? 1 : 0);
+		            ra->Msg4_subframe = (subframeP + 7) % 10;
+		            break;
+		          // TODO need to be complete for other tdd configs.
+		        }
 		    }else{
 		    // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different
 		      ra->Msg4_frame = frameP + ((subframeP > 5) ? 1 : 0);