diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 46a368e..221123b 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -5764,8 +5764,22 @@
 	 * from now on this here is the new BSS. */
 	f_create_bssmap_exp_handoverRequest(193);
 
+	var template BSSMAP_IE_EncryptionInformation encryptionInformation;
+	var template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm;
+	var template BSSMAP_IE_KC128 kC128;
+	var OCT1 a5_perm_alg;
+	f_get_expected_encryption(encryptionInformation, chosenEncryptionAlgorithm, kC128, a5_perm_alg);
+	var template PDU_BSSAP expect_ho_request := tr_BSSMAP_HandoverRequest(encryptionInformation, chosenEncryptionAlgorithm, kC128);
 	var PDU_BSSAP ho_request;
-	BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request;
+	alt {
+	[] BSSAP.receive(expect_ho_request);
+	[] BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request {
+		log("Error: Wrong handoverRequest received. Expected: ", expect_ho_request,
+		    " got ", ho_request);
+		setverdict(fail, "Wrong handoverRequest received");
+		mtc.stop;
+		}
+	}
 
 	/* new BSS composes a RR Handover Command */
 	var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);
@@ -5812,9 +5826,22 @@
 	f_init_handler(pars);
 	f_create_bssmap_exp_handoverRequest(194);
 
+	var template BSSMAP_IE_EncryptionInformation encryptionInformation;
+	var template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm;
+	var template BSSMAP_IE_KC128 kC128;
+	var OCT1 a5_perm_alg;
+	f_get_expected_encryption(encryptionInformation, chosenEncryptionAlgorithm, kC128, a5_perm_alg);
+	var template PDU_BSSAP expect_ho_request := tr_BSSMAP_HandoverRequest(encryptionInformation, chosenEncryptionAlgorithm, kC128);
 	var PDU_BSSAP ho_request;
-	BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request;
-
+	alt {
+	[] BSSAP.receive(expect_ho_request);
+	[] BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request {
+		log("Error: Wrong handoverRequest received. Expected: ", expect_ho_request,
+		    " got ", ho_request);
+		setverdict(fail, "Wrong handoverRequest received");
+		mtc.stop;
+		}
+	}
 	/* new BSS composes a RR Handover Command */
 	var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);
 	var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);
@@ -5861,15 +5888,42 @@
 	f_expect_clear();
 	setverdict(pass);
 }
-function f_tc_ho_inter_bsc_main(boolean use_ipv6 := false) runs on MTC_CT {
+function f_tc_ho_inter_bsc_main(boolean use_ipv6 := false, integer a5_n := 0) runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn0;
 	var BSC_ConnHdlr vc_conn1;
 	f_init(2);
 
 	var BSC_ConnHdlrPars pars0 := f_init_pars(53);
 	pars0.use_ipv6 := use_ipv6;
+	pars0.net.expect_ciph := a5_n > 0;
+	pars0.net.expect_auth := pars0.net.expect_ciph;
+	pars0.net.kc_support := bit2oct('00000001'B << a5_n);
+	pars0.cm2.classmarkInformationType2_oct5.a5_3 := '1'B;
+	pars0.cm2.classmarkInformationType2_oct5.a5_2 := '0'B;
+	pars0.cm2.classmarkInformationType2_oct5.cm3 := '1'B;
+	pars0.cm3 := valueof(ts_CM3_default);
+	pars0.use_umts_aka := true;
+	pars0.vec := f_gen_auth_vec_3g();
+	pars0.vec_keep := true;
+
 	var BSC_ConnHdlrPars pars1 := f_init_pars(53);
 	pars1.use_ipv6 := use_ipv6;
+	pars1.net.expect_ciph := pars0.net.expect_ciph;
+	pars1.net.expect_auth := pars0.net.expect_ciph;
+	pars1.net.kc_support := bit2oct('00000001'B << a5_n);
+	pars1.cm2 := pars0.cm2;
+	pars1.cm3 := pars0.cm3;
+	pars1.use_umts_aka := true;
+	/* Both components need the same auth vector info because we expect f_tc_ho_inter_bsc0's ciphering key to be
+	 * identical to the one that shows up in f_tc_ho_inter_bsc1. Can only do that by feeding in a vector to both
+	 * components and then not overwriting it in BSC_ConnectionHandler. */
+	pars1.vec := pars0.vec;
+	pars1.vec_keep := true;
+
+	if (a5_n > 0) {
+		f_vty_config(MSCVTY, "network", "authentication required");
+	}
+	f_vty_config(MSCVTY, "network", "encryption a5 " & int2str(a5_n));
 
 	vc_conn0 := f_start_handler_with_pars(refers(f_tc_ho_inter_bsc0), pars0, 0);
 	vc_conn1 := f_start_handler_with_pars(refers(f_tc_ho_inter_bsc1), pars1, 1);
@@ -5877,7 +5931,16 @@
 	vc_conn1.done;
 }
 testcase TC_ho_inter_bsc() runs on MTC_CT {
-	f_tc_ho_inter_bsc_main(false);
+	f_tc_ho_inter_bsc_main(false, a5_n := 0);
+}
+testcase TC_ho_inter_bsc_a5_1() runs on MTC_CT {
+	f_tc_ho_inter_bsc_main(false, a5_n := 1);
+}
+testcase TC_ho_inter_bsc_a5_3() runs on MTC_CT {
+	f_tc_ho_inter_bsc_main(false, a5_n := 3);
+}
+testcase TC_ho_inter_bsc_a5_4() runs on MTC_CT {
+	f_tc_ho_inter_bsc_main(false, a5_n := 4);
 }
 testcase TC_ho_inter_bsc_ipv6() runs on MTC_CT {
 	f_tc_ho_inter_bsc_main(true);
@@ -6614,6 +6677,9 @@
 
 	execute( TC_ho_inter_bsc_unknown_cell() );
 	execute( TC_ho_inter_bsc() );
+	execute( TC_ho_inter_bsc_a5_1() );
+	execute( TC_ho_inter_bsc_a5_3() );
+	execute( TC_ho_inter_bsc_a5_4() );
 	execute( TC_ho_inter_bsc_ipv6() );
 
 	execute( TC_ho_inter_msc_out() );
