diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index cd13688..888abf5 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2607,9 +2607,8 @@
 }
 
 /* Initialize and start the RTP emulation component for a ConnHdlr */
-friend function f_rtpem_activate(inout octetstring payload,
-				 RtpemConfig cfg := c_RtpemDefaultCfg,
-				 RtpemMode mode := RTPEM_MODE_BIDIR,
+friend function f_rtpem_activate(RtpemConfig cfg := c_RtpemDefaultCfg,
+				 RtpemMode mode := RTPEM_MODE_LOOPBACK,
 				 uint7_t rtp_pt := 0)
 runs on ConnHdlr {
 	/* Step 0: initialize, connect and start the emulation component */
@@ -2621,38 +2620,6 @@
 	vc_RTPEM.start(RTP_Emulation.f_main());
 
 	/* Step 1: configure the RTP parameters */
-	var integer payload_len := 0;
-	var octetstring hdr := ''O;
-	var OCT1 pad := '00'O;
-
-	select (g_pars.chan_mode) {
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
-		{ payload_len := 33; hdr := 'D0'O; pad := 'FF'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
-		{ payload_len := 15; hdr := '00'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
-		{ payload_len := 31; hdr := 'C0'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
-		{
-			var integer amr_ft := get_start_amr_ft();
-			payload_len := f_amrft_payload_len(amr_ft) + 2;
-			hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
-		}
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
-		{
-			var integer amr_ft := get_start_amr_ft();
-			payload_len := f_amrft_payload_len(amr_ft) + 2;
-			hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
-		}
-	case else {
-		setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
-		}
-	}
-
-	/* Pad the payload to conform the expected length */
-	payload := f_pad_oct(hdr & payload, payload_len, pad);
-	cfg.tx_payloads[0].fixed_payload := payload;
 	f_rtpem_configure(RTPEM_CTRL, cfg);
 
 	/* Step 2: bind the RTP emulation to the configured address */
@@ -8351,9 +8318,9 @@
 
 /* Verify handling of Downlink and Uplink speech frames */
 private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
+	var octetstring payload;
 	var L1ctlMessage l1_dl;
 	var PDU_RTP rtp_pdu;
-	var octetstring pl;
 	timer Td, Tu;
 
 	log("Testing channel mode ", g_pars.chan_mode);
@@ -8361,9 +8328,37 @@
 	f_l1_tune(L1CTL);
 	f_est_dchan();
 
+	select (g_pars.chan_mode) {
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
+		{ payload := f_pad_oct('D0'O & f_rnd_octstring(6), 33, 'FF'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
+		{ payload := f_pad_oct('00'O & f_rnd_octstring(6), 15, '00'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
+		{ payload := f_pad_oct('C0'O & f_rnd_octstring(6), 31, '00'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
+		{
+			var integer amr_ft := get_start_amr_ft();
+			var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+			payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+			payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+		}
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
+		{
+			var integer amr_ft := get_start_amr_ft();
+			var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+			payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+			payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+		}
+	case else {
+		setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+		}
+	}
+
 	/* Activate the RTP emulation */
-	pl := f_rnd_octstring(6);
-	f_rtpem_activate(pl);
+	var RtpemConfig cfg := c_RtpemDefaultCfg;
+	cfg.tx_payloads[0].fixed_payload := payload;
+	f_rtpem_activate(cfg, RTPEM_MODE_BIDIR);
 
 	/* Give the scheduler some time to fill up the buffers */
 	f_sleep(2.0);
@@ -8373,7 +8368,7 @@
 	/* Make sure that Downlink frames are received at the UE */
 	Td.start(2.0);
 	alt {
-	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := pl)) -> value l1_dl {
+	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := payload)) -> value l1_dl {
 		var octetstring data := l1_dl.payload.traffic_ind.data;
 		log("TCH received (len=", lengthof(data), "): ", data);
 		L1CTL.send(ts_L1CTL_TRAFFIC_REQ(g_chan_nr, l1_dl.dl_info.link_id,
@@ -8383,7 +8378,7 @@
 	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := ?)) -> value l1_dl {
 		setverdict(fail, "Rx unexpected Downlink speech frame ",
 			   "(", l1_dl.payload.traffic_ind.data, ") ",
-			   "expected (", pl, ")");
+			   "expected (", payload, ")");
 		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 		}
 	[] as_l1_sacch();
@@ -8401,7 +8396,7 @@
 	[] as_l1_tch_loop();
 	[] as_l1_sacch();
 	[] RTPEM_DATA.receive(PDU_RTP:?) -> value rtp_pdu {
-		if (rtp_pdu.data != pl)
+		if (rtp_pdu.data != payload)
 			{ repeat; }
 		}
 	[] RTPEM_DATA.receive { repeat; }
