diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 646e5bf..68e5cf1 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -47,6 +47,8 @@
 import from RSL_Emulation all;
 import from RTP_Emulation all;
 
+import from AMR_Types all;
+
 import from IPL4asp_Types all;
 import from TRXC_Types all;
 import from TRXC_CodecPort all;
@@ -2542,6 +2544,28 @@
 	g_first_meas_res := true;
 }
 
+private function get_start_amr_ft() runs on ConnHdlr return integer {
+	var integer start_nth;
+	if (g_pars.mr_conf.icmi) {
+		start_nth := 0; /* FIXME: implement 3GPP TS 45.009 3.4.3 */
+	} else {
+		start_nth := g_pars.mr_conf.start_mode;
+	}
+
+	var integer n := 0;
+	for (var integer i:= 7; i >= 0; i := i - 1) {
+		if (g_pars.mr_conf.amr_codec_modes[i] == '1'B) {
+			if (n == start_nth) {
+				return 7 - i;
+			}
+			n := n + 1;
+		}
+	}
+	Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+			        log2str("mr_conf is wrong! ", g_pars.mr_conf));
+	return 0;
+}
+
 /* Initialize and start the RTP emulation component for a ConnHdlr */
 friend function f_rtpem_activate(inout octetstring payload,
 				 RtpemConfig cfg := c_RtpemDefaultCfg,
@@ -2566,7 +2590,19 @@
 		{ 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 else { /* FIXME: also handle TCH/AFS and TCH/AHS */
+	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__);
 		}
@@ -8147,7 +8183,11 @@
 	vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
 	vc_conn.done;
 
-	/* TODO: also test V3 (AMR codec) */
+	/* TS1, TCH/F, V3 (AMR codec) */
+	pars := valueof(t_Pars(ts_RslChanNr_Bm(1), ts_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)));
+	pars.mr_conf := valueof(ts_RSL_MultirateCfg(false, 0, '00000100'B /* 5,90k */));
+	vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
+	vc_conn.done;
 
 	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 }
@@ -8162,7 +8202,11 @@
 	vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
 	vc_conn.done;
 
-	/* TODO: also test V3 (AMR codec) */
+	/* TS1, TCH/H0, V3 (AMR codec) */
+	pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)));
+	pars.mr_conf := valueof(ts_RSL_MultirateCfg(false, 0, '00000100'B /* 5,90k */));
+	vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
+	vc_conn.done;
 
 	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 }
