diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index ea90f06..94f38fd 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1,7 +1,7 @@
 module BSC_Tests {
 
 /* Integration Tests for OsmoBSC
- * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2017-2018 by Harald Welte <laforge@gnumonks.org>
  * All rights reserved.
  *
  * Released under the terms of GNU General Public License, Version 2 or
@@ -1397,7 +1397,8 @@
 type function void_fn(charstring id) runs on MSC_ConnHdlr;
 
 /* helper function to create, connect and start a MSC_ConnHdlr component */
-function f_start_handler(void_fn fn, charstring id) runs on test_CT return MSC_ConnHdlr {
+function f_start_handler(void_fn fn, charstring id, template (omit) TestHdlrParams pars := omit)
+runs on test_CT return MSC_ConnHdlr {
 	var MSC_ConnHdlr vc_conn;
 
 	vc_conn := MSC_ConnHdlr.create(id);
@@ -1411,12 +1412,21 @@
 	}
 	connect(vc_conn:BSSAP, g_bssap.vc_BSSMAP:CLIENT);
 	connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
-	vc_conn.start(derefers(fn)(id));
+	vc_conn.start(f_handler_init(fn, id, pars));
 	return vc_conn;
 }
 
+/* first function inside ConnHdlr component; sets g_pars + starts function */
+private function f_handler_init(void_fn fn, charstring id, template (omit) TestHdlrParams pars := omit)
+runs on MSC_ConnHdlr {
+	if (isvalue(pars)) {
+		g_pars := valueof(pars);
+	}
+	fn.apply(id);
+}
+
 private function f_tc_assignment_fr_a5_0(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
@@ -1425,7 +1435,7 @@
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
 	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
 
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 	f_cipher_mode('01'O, kc);
 }
 
@@ -1442,7 +1452,7 @@
 
 
 private function f_tc_assignment_fr_a5_1(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
@@ -1452,7 +1462,7 @@
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
 	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
 
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 	f_cipher_mode('02'O, kc);
 }
 
@@ -1468,14 +1478,14 @@
 
 /* Expect ASSIGNMENT FAIL if mandatory IE is missing */
 private function f_tc_assignment_fr_a5_1_codec_missing(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 	var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
 	const OCT8 kc := '0001020304050607'O;
 
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
-	f_establish_fully(pars, ass_cmd, exp_fail);
+	f_establish_fully(ass_cmd, exp_fail);
 }
 
 testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
@@ -1490,7 +1500,7 @@
 
 
 private function f_tc_assignment_fr_a5_3(charstring id ) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
@@ -1499,7 +1509,7 @@
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
 	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
 
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 	f_cipher_mode('08'O, kc);
 }
 
@@ -1515,7 +1525,7 @@
 
 
 private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
@@ -1524,7 +1534,7 @@
 
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
 	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 	f_cipher_mode('10'O, kc, kc128, true);
 	/* TODO: expect GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED cause value */
 }
@@ -1546,7 +1556,7 @@
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, omit));
 
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeSIGNAL);
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 }
 
 testcase TC_assignment_sign() runs on test_CT {
@@ -1561,8 +1571,8 @@
 
 /* test if L3 RR CLASSMARK CHANGE is translated to BSSMAP CLASSMARK UPDATE */
 private function f_tc_classmark(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
-	f_create_chan_and_exp(pars);
+	g_pars := valueof(t_def_TestHdlrPars);
+	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
 
@@ -1579,8 +1589,8 @@
 }
 
 private function f_est_single_l3(template PDU_ML3_MS_NW l3) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
-	f_create_chan_and_exp(pars);
+	g_pars := valueof(t_def_TestHdlrPars);
+	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
 
@@ -1647,8 +1657,8 @@
 
 /* short message from MS should be ignored */
 private function f_tc_err_82_short_msg(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
-	f_create_chan_and_exp(pars);
+	g_pars := valueof(t_def_TestHdlrPars);
+	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
 
@@ -1717,7 +1727,7 @@
 
 /* intra-BSC hand-over between BTS0 and BTS1 */
 private function f_tc_ho_int(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	g_pars := valueof(t_def_TestHdlrPars);
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
 	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
@@ -1726,7 +1736,7 @@
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
 	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
 
-	f_establish_fully(pars, ass_cmd, exp_compl);
+	f_establish_fully(ass_cmd, exp_compl);
 
 	var HandoverState hs := {
 		rr_ho_cmpl_seen := false,
