diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c
index be7c578267367630b552cb3e6fd3de8cd54a0c25..21c4efa06c63fe4ab9e622c41283e2879fbcf135 100644
--- a/openair2/PHY_INTERFACE/phy_stub_UE.c
+++ b/openair2/PHY_INTERFACE/phy_stub_UE.c
@@ -828,6 +828,40 @@ void dl_config_req_UE_MAC_bch(int sfn,
   }
 }
 
+void dl_config_req_UE_MAC_mch(int sfn,
+                              int sf,
+                              nfapi_dl_config_request_pdu_t *mch,
+                              int num_ue) {
+  DevAssert(mch->pdu_type == NFAPI_DL_CONFIG_MCH_PDU_TYPE);
+
+  for (int ue_id = 0; ue_id < num_ue; ue_id++) {
+    if (UE_mac_inst[ue_id].UE_mode[0] == NOT_SYNCHED){
+	 LOG_D(MAC,
+            "%s(): Received MCH in NOT_SYNCHED: UE_mode: %d, sfn/sf: %d.%d\n",
+            __func__,
+            UE_mac_inst[ue_id].UE_mode[0],
+            sfn,
+            sf);
+	return;
+
+    } else {
+	 const int pdu_index = mch->mch_pdu.mch_pdu_rel8.pdu_index;
+  	if (pdu_index < 0 || pdu_index >= tx_req_num_elems) {
+    	LOG_E(MAC,
+          "%s(): Problem with receiving data: "
+          "sfn/sf:%d.%d PDU size:%d, TX_PDU index: %d\n",
+          __func__,
+          sfn, sf, mch->pdu_size, mch->mch_pdu.mch_pdu_rel8.pdu_index);
+    	return;
+  	}
+        ue_send_mch_sdu(ue_id, 0, sfn,
+            tx_request_pdu_list[pdu_index].segments[0].segment_data,
+            tx_request_pdu_list[pdu_index].segments[0].segment_length,
+            0,0);
+    }
+  }
+}
+
 void hi_dci0_req_UE_MAC(int sfn,
                         int sf,
                         nfapi_hi_dci0_request_pdu_t* hi_dci0,
@@ -1052,6 +1086,11 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,
                          uint8_t subframe,
                          uint8_t srs_present) {
 }
+void handle_nfapi_mch_pdu(PHY_VARS_eNB *eNB,
+                          L1_rxtx_proc_t *proc,
+                          nfapi_dl_config_request_pdu_t *dl_config_pdu,
+                          uint8_t *sdu) {
+}
 
 void phy_config_request(PHY_Config_t *phy_config) {
 }
diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.h b/openair2/PHY_INTERFACE/phy_stub_UE.h
index 034da51d6f6e943419b76904cd8b53cbbf497440..15496f8ba15572b205ef26fd059f77f5a082543d 100644
--- a/openair2/PHY_INTERFACE/phy_stub_UE.h
+++ b/openair2/PHY_INTERFACE/phy_stub_UE.h
@@ -102,6 +102,10 @@ void dl_config_req_UE_MAC_bch(int sfn,
                               int sf,
                               nfapi_dl_config_request_pdu_t *bch,
                               int num_ue);
+void dl_config_req_UE_MAC_mch(int sfn,
+                              int sf,
+                              nfapi_dl_config_request_pdu_t *bch,
+                              int num_ue);
 
 int tx_req_UE_MAC(nfapi_tx_request_t* req);
 
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 4bad369791cd9b27951094087654b1bf4f3d6727..67120c5a2d1fc6f26147e306fdb7fd48025e40ca 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -1132,6 +1132,11 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg)
                                    NFAPI_SFNSF2SF(dl_config_req->sfn_sf),
                                    pdu,
                                    ue_num);
+        } else if (pdu->pdu_type == NFAPI_DL_CONFIG_MCH_PDU_TYPE) {
+          dl_config_req_UE_MAC_mch(NFAPI_SFNSF2SFN(dl_config_req->sfn_sf),
+                                   NFAPI_SFNSF2SF(dl_config_req->sfn_sf),
+                                   pdu,
+                                   ue_num);
         }
       }
     }