diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 25e7952..696a10e 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2899,6 +2899,46 @@
 	}
 }
 
+/* verify BTS power down to rx_level 0 without ramping */
+private function f_verify_power_down(integer max_rx_lvl) runs on ConnHdlr {
+	var L1ctlDlMessage l1_dl;
+	var boolean first_data_ind := true;
+
+	timer Tdown := 5.0;
+	Tdown.start;
+	alt {
+	[first_data_ind == true] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_BCCH(0), ?)) -> value l1_dl {
+		first_data_ind := false;
+		var GsmRxLev rx_lvl := l1_dl.dl_info.rx_level;
+		log("Received rx_level=", rx_lvl);
+
+		/* The first data indication could still have the original power level */
+		if (rx_lvl != 0 and rx_lvl != max_rx_lvl) {
+			Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+						log2str("Detected Tx power: ",
+							rx_lvl , " should be 0 or ", max_rx_lvl));
+		}
+		repeat;
+	}
+	[first_data_ind == false] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_BCCH(0), ?)) -> value l1_dl {
+		var GsmRxLev rx_lvl := l1_dl.dl_info.rx_level;
+		log("Received rx_level=", rx_lvl);
+
+		/* Expect immediate power off so either rx_level == 0 or no report at all
+		   because TRX was shut down already */
+		if (rx_lvl != 0) {
+			Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+						log2str("Detected Tx power: ",
+							rx_lvl , " should be 0"));
+		}
+
+		repeat;
+		}
+	[] L1CTL.receive { repeat; }
+	[] Tdown.timeout { }
+	}
+}
+
 /* Verify Tx power reduction and ramping up during BTS bring up */
 private function f_TC_tx_power_start_ramp_up_bcch(charstring id) runs on ConnHdlr {
 	f_l1_tune(L1CTL);
@@ -2919,8 +2959,8 @@
 	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 }
 
-/* Verify Tx power reduction and ramping downd uring BTS bring shutdown due to Abis link failure */
-private function f_TC_tx_power_start_ramp_down_bcch(charstring id) runs on ConnHdlr {
+/* Verify Tx power reduction without ramping down during BTS shutdown due to Abis link failure */
+private function f_TC_tx_power_down_bcch(charstring id) runs on ConnHdlr {
 	f_connhdlr_init_vty_bsc();
 
 	f_l1_tune(L1CTL);
@@ -2931,16 +2971,16 @@
 	log("Reached nominal level ", max_rx_lvl, ", shutting down OML link");
 
 	f_vty_transceive(BSCVTY, "drop bts connection 0 oml");
-	f_verify_ramp_down(max_rx_lvl);
+	f_verify_power_down(max_rx_lvl);
 
 	setverdict(pass);
 }
-testcase TC_tx_power_start_ramp_down_bcch() runs on test_CT {
+testcase TC_tx_power_down_bcch() runs on test_CT {
 	var ConnHdlr vc_conn;
 	var ConnHdlrPars pars;
 	f_init();
 	pars := valueof(t_Pars(t_RslChanNr_Bm(0), ts_RSL_ChanMode_SIGN));
-	vc_conn := f_start_handler(refers(f_TC_tx_power_start_ramp_down_bcch), pars,
+	vc_conn := f_start_handler(refers(f_TC_tx_power_down_bcch), pars,
 				   pcu_comp := false, trxc_comp := true);
 	vc_conn.done;
 	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
@@ -8871,7 +8911,7 @@
 	execute( TC_meas_res_speech_tchf_sapi3() );
 	execute( TC_meas_res_speech_tchh_sapi3() );
 	execute( TC_tx_power_start_ramp_up_bcch() );
-	execute( TC_tx_power_start_ramp_down_bcch() );
+	execute( TC_tx_power_down_bcch() );
 	execute( TC_tx_power_ramp_adm_state_change() );
 	execute( TC_rsl_bs_pwr_static_ass() );
 	execute( TC_rsl_bs_pwr_static_power_control() );
