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);
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index 079cc74..dfdf10c 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -426,9 +426,13 @@
 	RSL_IE_Body	expect_mr_conf_ie optional, /* typically present for AMR codecs */
 	TestHdlrEncrParams encr optional,
 	TestHdlrParamsLcls lcls,
-	TestHdlrParamsHandover handover optional
+	TestHdlrParamsHandover handover optional,
+	boolean		aoip
 };
 
+/* Note: Do not use valueof() to get a value of this template, use
+ * f_gen_test_hdlr_pars() instead in order to get a configuration that is
+ * matched to the current test sitation (aoio vs. sccplite) */
 template (value) TestHdlrParams t_def_TestHdlrPars := {
 	ra := '23'O,
 	fn := 23,
@@ -444,7 +448,8 @@
 		csc := omit,
 		exp_sts := omit
 	},
-	handover := omit
+	handover := omit,
+	aoip := true
 }
 
 function f_create_chan_and_exp() runs on MSC_ConnHdlr {
@@ -828,15 +833,8 @@
 runs on MSC_ConnHdlr {
 
 	var BSSMAP_FIELD_CodecType codecType;
-	var boolean sccplite := false;
 	timer T := 10.0;
 
-	/* Check if we run on SCCPLITE instead of SCCP by looking if a CIC is
-	 * present or not. */
-	if (isvalue(ass_tpl.pdu.bssmap.assignmentRequest.circuitIdentityCode)) {
-		sccplite := true;
-	}
-
 	if (isvalue(ass_tpl.pdu.bssmap.assignmentRequest.codecList)) {
 		codecType := valueof(ass_tpl.pdu.bssmap.assignmentRequest.codecList.codecElements[0].codecType);
 	} else {
@@ -855,7 +853,7 @@
 
 	var template PDU_BSSAP exp_l3_compl;
 	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (sccplite) {
+	if (g_pars.aoip == false) {
 		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
 	} else {
 		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
@@ -930,7 +928,7 @@
 		g_media.mgcp_conn[1].mdcx_seen_exp := 0;
 	} else if (st.voice_call) {
 		/* For voice calls we expect the following MGCP activity */
-		if (sccplite) {
+		if (g_pars.aoip == false) {
 			g_media.mgcp_conn[0].crcx_seen_exp := 1;
 			g_media.mgcp_conn[0].mdcx_seen_exp := 1;
 			g_media.mgcp_conn[1].crcx_seen_exp := 0;
