diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 41e3a84..77f3ef8 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -411,6 +411,7 @@
 	[] BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_AssignmentComplete)) {
 		setverdict(fail, "AoIP BSC cannot accept ASSIGNMENT without AoIP Transport IE");
 		}
+	/* TODO: Actually expect GSM0808_CAUSE_REQ_A_IF_TYPE_NOT_SUPP */
 	[] BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_AssignmentFail)) {
 		setverdict(pass);
 		}
@@ -418,6 +419,118 @@
 	}
 }
 
+/* Run everything required up to sending a caller-specified assignment command and expect response */
+function f_assignment_exp(PDU_BSSAP ass_cmd, template PDU_BSSAP exp, charstring fail_text)
+runs on test_CT {
+	var BSSAP_N_CONNECT_ind rx_c_ind;
+	var RSL_Message rx_rsl;
+	var DchanTuple dt;
+
+	f_init();
+	f_bssap_reset();
+
+	dt := f_est_dchan('23'O, 23, '00000000'O);
+	/* send assignment without AoIP IEs */
+	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ass_cmd));
+	alt {
+	[] BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_AssignmentComplete)) {
+		if (ischosen(exp.pdu.bssmap.assignmentComplete)) {
+			setverdict(pass);
+		} else {
+			setverdict(fail, fail_text);
+		}
+		}
+	[] BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_AssignmentFail)) {
+		if (ischosen(exp.pdu.bssmap.assignmentFailure)) {
+			setverdict(pass);
+		} else {
+			setverdict(fail, fail_text);
+		}
+		}
+	[] BSSAP.receive { repeat; }
+	}
+}
+testcase TC_assignment_csd() 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));
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeCSD);
+	//exp_fail.pdu.bssmap.assignmentFailure.cause.causeValue := int2bit(enum2int(GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL), 7);
+	f_assignment_exp(ass_cmd, exp_fail, "BSC accepted Assignment for CSD");
+}
+
+testcase TC_assignment_ctm() 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));
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeCTM);
+	//exp_fail.pdu.bssmap.assignmentFailure.cause.causeValue := int2bit(enum2int(GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL), 7);
+	f_assignment_exp(ass_cmd, exp_fail, "BSC accepted Assignment for Speech+CTM");
+}
+
+testcase TC_assignment_sign() runs on test_CT {
+	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, 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));
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeSIGNAL);
+	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.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.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
+	f_assignment_exp(ass_cmd, exp_compl, "BSC failed TCH/F FR A5/1 assignment");
+}
+
+
+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.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.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,
@@ -1013,7 +1126,7 @@
 	}
 }
 
-/* Verify PCH load */
+/* Verify Paging Counter */
 testcase TC_paging_counter() runs on test_CT {
 	var BSSMAP_FIELD_CellIdentificationList cid_list;
 	timer T := 4.0;
@@ -1126,6 +1239,13 @@
 
 	execute( TC_outbound_connect() );
 	execute( TC_assignment_cic_only() );
+	execute( TC_assignment_csd() );
+	execute( TC_assignment_ctm() );
+	execute( TC_assignment_sign() );
+	execute( TC_assignment_fr_a5_0() );
+	execute( TC_assignment_fr_a5_1() );
+	execute( TC_assignment_fr_a5_3() );
+	execute( TC_assignment_fr_a5_4() );
 
 	execute( TC_rll_est_ind_inact_lchan() );
 	execute( TC_rll_est_ind_inval_sapi1() );
