diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 2e43375..d1f5c3d 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -492,79 +492,6 @@
 	f_assignment_exp(ass_cmd, exp_compl, "BSC failed SIGNALLING assignment");
 }
 
-testcase TC_assignment_fr_a5_0() runs on test_CT {
-	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));
-	const OCT8 kc := '0001020304050607'O;
-
-	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
-	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
-	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
-							valueof(ts_BSSMAP_IE_EncrInfo(kc, '01'O));
-	f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/0 assignment");
-}
-
-testcase TC_assignment_fr_a5_1() runs on test_CT {
-	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));
-	const OCT8 kc := '0001020304050607'O;
-
-	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
-	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
-	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
-							valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
-	f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/1 assignment");
-}
-
-/* Exxpet ASSIGNMENT FAIL if mandatory IE is missing */
-testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
-	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);
-	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
-							valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
-	f_assignment_exp(ass_cmd, exp_fail, "BSC didn't reject missing mandatory speech codec IE");
-}
-
-
-
-testcase TC_assignment_fr_a5_3() runs on test_CT {
-	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));
-	const OCT8 kc := '0001020304050607'O;
-
-	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
-	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
-	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
-							valueof(ts_BSSMAP_IE_EncrInfo(kc, '08'O));
-	f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/3 assignment");
-}
-
-testcase TC_assignment_fr_a5_4() runs on test_CT {
-	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;
-	const OCT16 kc128 := kc & kc;
-
-	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
-	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
-	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
-							valueof(ts_BSSMAP_IE_EncrInfo(kc, '10'O));
-	ass_cmd.pdu.bssmap.assignmentRequest.kC128 := valueof(ts_BSSMAP_IE_Kc128(kc128));
-	/* TODO: expect GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED cause value */
-	f_assignment_exp(ass_cmd, exp_fail, "BSC accepted TCH/F FR A5/4 assignment");
-}
-
-
-
-
 type record DchanTuple {
 	integer sccp_conn_id,
 	RslChannelNr rsl_chan_nr
@@ -1276,8 +1203,33 @@
 	return vc_conn;
 }
 
+private function f_tc_assignment_fr_a5_0(charstring id) runs on MSC_ConnHdlr {
+	var TestHdlrParams 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));
+	const OCT8 kc := '0001020304050607'O;
 
-private function f_ass(charstring id) runs on MSC_ConnHdlr {
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '01'O));
+	f_establish_fully(pars, ass_cmd, exp_compl);
+}
+
+testcase TC_assignment_fr_a5_0() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_0), testcasename());
+	vc_conn.done;
+}
+
+
+
+private function f_tc_assignment_fr_a5_1(charstring id) runs on MSC_ConnHdlr {
 	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
 
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
@@ -1293,16 +1245,96 @@
 	f_establish_fully(pars, ass_cmd, exp_compl);
 }
 
-testcase TC_hdlr() runs on test_CT {
+testcase TC_assignment_fr_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
 	f_init(true);
 	f_sleep(1.0);
 
-	vc_conn := f_start_handler(refers(f_ass), "foo");
+	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1), testcasename());
 	vc_conn.done;
 }
 
+/* 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);
+	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);
+	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
+	f_establish_fully(pars, ass_cmd, exp_fail);
+}
+
+testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1_codec_missing), testcasename());
+	vc_conn.done;
+}
+
+
+private function f_tc_assignment_fr_a5_3(charstring id ) runs on MSC_ConnHdlr {
+	var TestHdlrParams 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));
+	const OCT8 kc := '0001020304050607'O;
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '08'O));
+	f_establish_fully(pars, ass_cmd, exp_compl);
+}
+
+testcase TC_assignment_fr_a5_3() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_3), testcasename());
+	vc_conn.done;
+}
+
+
+private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {
+	var TestHdlrParams 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;
+	const OCT16 kc128 := kc & kc;
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '10'O));
+	ass_cmd.pdu.bssmap.assignmentRequest.kC128 := valueof(ts_BSSMAP_IE_Kc128(kc128));
+	/* TODO: expect GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED cause value */
+	f_establish_fully(pars, ass_cmd, exp_fail);
+}
+
+testcase TC_assignment_fr_a5_4() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_4), testcasename());
+	vc_conn.done;
+}
+
+
+
+
 control {
 	execute( TC_ctrl_msc_connection_status() );
 	execute( TC_ctrl() );
