diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 9a85a1f..754f7b3 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -119,6 +119,18 @@
 	};
 }
 
+private function f_gen_test_hdlr_pars() return TestHdlrParams {
+
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {
+		pars.aoip := true;
+	} else {
+		pars.aoip := false;
+	}
+
+	return pars;
+}
+
 private function f_shutdown_helper() runs on test_CT {
 	all component.stop;
 	setverdict(pass);
@@ -1571,7 +1583,7 @@
 }
 testcase TC_ciph_mode_a5_0() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('01'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1581,7 +1593,7 @@
 }
 testcase TC_ciph_mode_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('02'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1591,7 +1603,7 @@
 }
 testcase TC_ciph_mode_a5_3() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('08'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1613,7 +1625,7 @@
 }
 testcase TC_assignment_fr_a5_0() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('01'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1623,7 +1635,7 @@
 }
 testcase TC_assignment_fr_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('02'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1633,7 +1645,7 @@
 }
 testcase TC_assignment_fr_a5_3() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.encr := valueof(t_EncrParams('08'O, f_rnd_octstring(8)));
 
 	f_init(1, true);
@@ -1644,7 +1656,7 @@
 
 /* Expect ASSIGNMENT FAIL if mandatory IE is missing */
 private function f_tc_assignment_fr_a5_1_codec_missing(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;
 	var PDU_BSSAP ass_cmd := f_gen_ass_req();
 	const OCT8 kc := '0001020304050607'O;
@@ -1665,7 +1677,7 @@
 }
 
 private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	var template PDU_BSSAP exp_compl := f_gen_exp_compl();
 	var PDU_BSSAP ass_cmd := f_gen_ass_req();
 	const OCT8 kc := '0001020304050607'O;
@@ -1689,10 +1701,9 @@
 
 
 private function f_tc_assignment_sign(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, omit);
-	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, omit));
-
+	var PDU_BSSAP ass_cmd := f_gen_ass_req();
 	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeSIGNAL);
 	f_establish_fully(ass_cmd, exp_compl);
 }
@@ -1886,7 +1897,7 @@
 }
 
 testcase TC_assignment_codec_fr() runs on test_CT {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	var MSC_ConnHdlr vc_conn;
 
 	f_init(1, true);
@@ -1898,7 +1909,7 @@
 }
 
 testcase TC_assignment_codec_hr() runs on test_CT {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	var MSC_ConnHdlr vc_conn;
 
 	f_init(1, true);
@@ -1910,7 +1921,7 @@
 }
 
 testcase TC_assignment_codec_efr() runs on test_CT {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	var MSC_ConnHdlr vc_conn;
 
 	f_init(1, true);
@@ -1922,7 +1933,7 @@
 }
 
 testcase TC_assignment_codec_amr_f() runs on test_CT {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	var MSC_ConnHdlr vc_conn;
 
 	/* Note: This setups the codec configuration. The parameter payload in
@@ -1948,7 +1959,7 @@
 }
 
 testcase TC_assignment_codec_amr_h() runs on test_CT {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	var MSC_ConnHdlr vc_conn;
 
 	/* See note above */
@@ -1975,7 +1986,8 @@
  * a) BSSMAP Classmark Request should result in RR CLASSMARK ENQUIRY,
  * b) L3 RR CLASSMARK CHANGE should result in BSSMAP CLASSMARK UPDATE */
 private function f_tc_classmark(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
+
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
@@ -1996,7 +2008,7 @@
 }
 
 private function f_est_single_l3(template PDU_ML3_MS_NW l3) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
@@ -2064,7 +2076,7 @@
 
 /* short message from MS should be ignored */
 private function f_tc_err_82_short_msg(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
@@ -2146,7 +2158,7 @@
 
 /* intra-BSC hand-over between BTS0 and BTS1 */
 private function f_tc_ho_int(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 	var template PDU_BSSAP exp_compl := f_gen_exp_compl();
 	var PDU_BSSAP ass_cmd := f_gen_ass_req();
 	const OCT8 kc := '0001020304050607'O;
@@ -2189,7 +2201,7 @@
 }
 
 private function f_tc_ho_out_of_this_bsc(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
+	g_pars := f_gen_test_hdlr_pars();
 
 	var PDU_BSSAP ass_req := f_gen_ass_req();
 	ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
@@ -2327,7 +2339,7 @@
 }
 testcase TC_ho_into_this_bsc() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 
 	f_init(1, true);
 	f_sleep(1.0);
