diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 834498a..67a811d 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -868,14 +868,25 @@
 }
 
 /* Verify scheduling of multiple Downlink data blocks, enough to reach CS4 */
-function f_dl_data_exp_cs(template CodingScheme exp_cs := ?) runs on RAW_PCU_Test_CT {
-	var octetstring data := f_rnd_octstring(1000);
+function f_dl_data_exp_cs(template CodingScheme exp_final_cs := ?, template MSRadioAccessCapabilityV_BSSGP ms_racap := omit) runs on RAW_PCU_Test_CT {
+	var octetstring data := f_rnd_octstring(1400);
 	var RlcmacDlBlock prev_dl_block, dl_block;
 	var uint32_t ack_fn;
 	var uint32_t fn;
 	var GprsMS ms;
-	var integer tx_data_remain := 5;
+	var integer tx_data_remain := 10;
 	var integer bsn := 0;
+	var boolean using_egprs := f_rlcmac_cs_mcs_is_mcs(valueof(exp_final_cs));
+	var integer bsn_mod;
+	var template CodingScheme exp_tmp_csmcs;
+
+	if (using_egprs) {
+		exp_tmp_csmcs := mcs_egprs_any;
+		bsn_mod := 2048;
+	} else {
+		exp_tmp_csmcs := cs_gprs_any;
+		bsn_mod := 128;
+	}
 
 	/* Establish BSSGP connection to the PCU */
 	f_bssgp_establish();
@@ -884,14 +895,14 @@
 	f_bssgp_client_llgmm_assign(TLLI_UNUSED, ms.tlli);
 
 	/* SGSN sends some DL data, PCU will page on CCCH (PCH) */
-	BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data));
+	BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data, ms_racap));
 	f_ms_exp_dl_tbf_ass_ccch(ms, PCU_IF_SAPI_PCH);
 
 	/* Wait timer X2002 and DL block is available after CCCH IMM ASS */
 	f_sleep(X2002);
 
-	for (var integer i := 0; i < 250; i := i + 1) {
-		bsn := i mod 128;
+	for (var integer i := 0; i < 800; i := i + 1) {
+		bsn := i mod bsn_mod;
 		f_rx_rlcmac_dl_block(dl_block, fn);
 
 		if (match(dl_block, tr_RLCMAC_DUMMY_CTRL)) {
@@ -899,15 +910,15 @@
 			break;
 		}
 
-		f_rlcmac_dl_block_exp_data(dl_block, ?, bsn, cs_gprs_any);
+		f_rlcmac_dl_block_exp_data(dl_block, ?, bsn, exp_tmp_csmcs);
 
 		/* Keep Ack/Nack description updated */
-		f_acknackdesc_ack_block(ms.dl_tbf.acknack_desc, dl_block);
+		f_dltbf_ack_block(ms.dl_tbf, dl_block);
 
 		/* TDMA frame number on which we are supposed to send the ACK */
-		if (dl_block.data.mac_hdr.mac_hdr.rrbp_valid) {
+		if (f_dl_block_rrbp_valid(dl_block)) {
 			ack_fn := f_dl_block_ack_fn(dl_block, fn);
-			f_ms_tx_ul_block(ms, ts_RLCMAC_DL_ACK_NACK(ms.dl_tbf.tfi, ms.dl_tbf.acknack_desc), ack_fn);
+			f_ms_tx_ul_block(ms, f_dltbf_ts_RLCMAC_DL_ACK_NACK(ms.dl_tbf, using_egprs), ack_fn);
 			if (tx_data_remain != 0) {
 				/* Submit more data from time to time to keep the TBF ongoing */
 				BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data));
@@ -917,8 +928,8 @@
 		prev_dl_block := dl_block;
 	}
 
-	bsn := (bsn + 127) mod 128; /* previous bsn: bsn -1 */
-	f_rlcmac_dl_block_exp_data(prev_dl_block, ?, bsn, exp_cs);
+	bsn := (bsn + (bsn_mod-1)) mod bsn_mod; /* previous bsn: bsn -1 */
+	f_rlcmac_dl_block_exp_data(prev_dl_block, ?, bsn, exp_final_cs);
 
 
 	f_shutdown(__BFILE__, __LINE__, final := true);
@@ -1150,6 +1161,35 @@
 	f_shutdown(__BFILE__, __LINE__, final := true);
 }
 
+/* Verify DL MCS above "mcs max" set by VTY is never used */
+testcase TC_mcs_max_dl() runs on RAW_PCU_Test_CT {
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+	/* Initialize GPRS MS side */
+	f_init_gprs_ms();
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename());
+
+	/* Set maximum allowed DL CS to 3 */
+	g_mcs_initial_dl := 1;
+	g_mcs_max_dl := 3;
+	f_pcuvty_set_allowed_cs_mcs();
+	f_pcuvty_set_link_quality_ranges();
+
+	var MultislotCap_GPRS_BSSGP mscap_gprs := {
+		gprsmultislotclass := '00011'B,
+		gprsextendeddynalloccap := '0'B
+	};
+	var MultislotCap_EGPRS_BSSGP mscap_egprs := {
+		egprsmultislotclass := '00011'B,
+		egprsextendeddynalloccap := '0'B
+	};
+	var MSRadioAccessCapabilityV_BSSGP ms_racap := { valueof(ts_RaCapRec_BSSGP('0001'B /* E-GSM */, mscap_gprs, mscap_egprs)) };
+
+	f_dl_data_exp_cs(f_rlcmac_block_int2cs_mcs(g_mcs_max_dl, true), ms_racap);
+}
+
 /* Verify PCU drops TBF after some time of inactivity. */
 testcase TC_t3169() runs on RAW_PCU_Test_CT {
 	var PCUIF_info_ind info_ind;
@@ -3392,6 +3432,7 @@
 	execute( TC_mcs_initial_ul() );
 	execute( TC_mcs_max_ul() );
 	execute( TC_mcs_initial_dl() );
+	execute( TC_mcs_max_dl() );
 	execute( TC_t3169() );
 	execute( TC_t3193() );
 	execute( TC_countdown_procedure() );
