diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 1a6cca3..376a7d5 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -3010,7 +3010,7 @@
 	var ConnHdlrPars pars;
 	f_init();
 	for (var integer tn := 1; tn <= 4; tn := tn+1) {
-		pars := valueof(t_Pars(t_RslChanNr_Bm(tn), ts_RSL_ChanMode_SIGN(false, RSL_CHRT_TCH_F)));
+		pars := valueof(t_Pars(t_RslChanNr_Bm(tn), ts_RSL_ChanMode_SIGN(RSL_CHRT_TCH_F)));
 		vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars,
 					   pcu_comp := false, trxc_comp := true);
 		vc_conn.done;
@@ -3022,7 +3022,7 @@
 	var ConnHdlrPars pars;
 	f_init();
 	for (var integer ss := 0; ss <= 1; ss := ss+1) {
-		pars := valueof(t_Pars(t_RslChanNr_Lm(5, ss), ts_RSL_ChanMode_SIGN(false, RSL_CHRT_TCH_H)));
+		pars := valueof(t_Pars(t_RslChanNr_Lm(5, ss), ts_RSL_ChanMode_SIGN(RSL_CHRT_TCH_H)));
 		vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars,
 					   pcu_comp := false, trxc_comp := true);
 		vc_conn.done;
@@ -3059,7 +3059,7 @@
 	f_init();
 	f_vty_config(BTSVTY, "bts 0", "supp-meas-info toa256");
 	for (var integer ss := 0; ss <= 1; ss := ss+1) {
-		pars := valueof(t_Pars(t_RslChanNr_Lm(5, ss), ts_RSL_ChanMode_SIGN(false, RSL_CHRT_TCH_H)));
+		pars := valueof(t_Pars(t_RslChanNr_Lm(5, ss), ts_RSL_ChanMode_SIGN(RSL_CHRT_TCH_H)));
 		pars.l1_pars.toa256_enabled := true;
 		vc_conn := f_start_handler(refers(f_TC_meas_res_periodic), pars);
 		vc_conn.done;
@@ -6514,7 +6514,7 @@
 	f_unitdata_mo(link_id, l3);
 
 	var RSL_Message rsl;
-	rsl := valueof(ts_RSL_MODE_MODIFY_REQ(g_chan_nr, valueof(ts_RSL_ChanMode_SIGN(false))));
+	rsl := valueof(ts_RSL_MODE_MODIFY_REQ(g_chan_nr, ts_RSL_ChanMode_SIGN));
 
 	/* modify key to break proper encryption */
 	g_pars.encr.key :=  f_rnd_octstring(8);
@@ -6833,12 +6833,14 @@
 }
 
 private function f_tch_sign_l2_fill_frame(boolean dtxd) runs on test_CT {
+	var template RSL_IE_ChannelMode ch_mode;
 	var ConnHdlr vc_conn;
 	var ConnHdlrPars pars;
 	pars.t_guard := 60.0;
 	f_init();
+	ch_mode := ts_RSL_ChanMode_SIGN(dtx_downlink := dtxd);
 	for (var integer i := 0; i < sizeof(g_AllChannels); i := i + 1) {
-		pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN(dtxd)));
+		pars := valueof(t_Pars(g_AllChannels[i], ch_mode));
 		if (dtxd) {
 			if (i >= 4) { /* DTX is only allowed on TCH/F */
 				break;
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index ff60a37..2bbbd3b 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -397,8 +397,8 @@
 		RSL_SpeechAlgo	coding_alg_rate
 	} with { variant (len) "LENGTHTO(reserved,dtx_d,dtx_u,spd_ind,ch_rate_type,coding_alg_rate)" }
 
-	template (value) RSL_IE_ChannelMode ts_RSL_ChanMode_SIGN(boolean dtx_downlink := false,
-								 RSL_ChanRateType t := RSL_CHRT_SDCCH) := {
+	template (value) RSL_IE_ChannelMode ts_RSL_ChanMode_SIGN(RSL_ChanRateType t := RSL_CHRT_SDCCH,
+								 boolean dtx_downlink := false) := {
 		len := 0,	/* overwritten */
 		reserved := '000000'B,
 		dtx_d := dtx_downlink,
