diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index dce9ae9..4560957 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -93,6 +93,56 @@
 	{ "mscpool:subscr:paged", 0 }
 };
 
+/* Default list of counters for 'bsc' and 'bts' entities. */
+const CounterNameVals counternames_bsc_bts_handover := {
+	{ "assignment:attempted", 0 },
+	{ "assignment:completed", 0 },
+	{ "assignment:stopped", 0 },
+	{ "assignment:no_channel", 0 },
+	{ "assignment:timeout", 0 },
+	{ "assignment:failed", 0 },
+	{ "assignment:error", 0 },
+
+	{ "handover:attempted", 0 },
+	{ "handover:completed", 0 },
+	{ "handover:stopped", 0 },
+	{ "handover:no_channel", 0 },
+	{ "handover:timeout", 0 },
+	{ "handover:failed", 0 },
+	{ "handover:error", 0 },
+
+	{ "intra_cell_ho:attempted", 0 },
+	{ "intra_cell_ho:completed", 0 },
+	{ "intra_cell_ho:stopped", 0 },
+	{ "intra_cell_ho:no_channel", 0 },
+	{ "intra_cell_ho:timeout", 0 },
+	{ "intra_cell_ho:failed", 0 },
+	{ "intra_cell_ho:error", 0 },
+
+	{ "intra_bsc_ho:attempted", 0 },
+	{ "intra_bsc_ho:completed", 0 },
+	{ "intra_bsc_ho:stopped", 0 },
+	{ "intra_bsc_ho:no_channel", 0 },
+	{ "intra_bsc_ho:timeout", 0 },
+	{ "intra_bsc_ho:failed", 0 },
+	{ "intra_bsc_ho:error", 0 },
+
+	{ "interbsc_ho_out:attempted", 0 },
+	{ "interbsc_ho_out:completed", 0 },
+	{ "interbsc_ho_out:stopped", 0 },
+	{ "interbsc_ho_out:timeout", 0 },
+	{ "interbsc_ho_out:failed", 0 },
+	{ "interbsc_ho_out:error", 0 },
+
+	{ "interbsc_ho_in:attempted", 0 },
+	{ "interbsc_ho_in:completed", 0 },
+	{ "interbsc_ho_in:stopped", 0 },
+	{ "interbsc_ho_in:no_channel", 0 },
+	{ "interbsc_ho_in:timeout", 0 },
+	{ "interbsc_ho_in:failed", 0 },
+	{ "interbsc_ho_in:error", 0 }
+};
+
 /* Set of all System Information received during one RSL port's startup.
  * Note that some System Information may be sent on RSL, but lacking actual SI data, to indicate that the BTS should not
  * broadcast that SI type. That will be reflected as 'omit' here.
@@ -498,6 +548,8 @@
 	timer T_guard := 30.0;
 
 	var CounterNameValsList g_ctr_msc;
+	var CounterNameValsList g_ctr_bsc;
+	var CounterNameValsList g_ctr_bts;
 
 	/* System Information bytes as received during RSL startup, for each RSL[idx]. */
 	var SystemInformationConfig_list g_system_information := {};
@@ -611,6 +663,78 @@
 	f_ctrs_msc_verify();
 }
 
+/* Convenience functions for rate counters using g_ctr_bts, always also including g_ctr_bsc. */
+
+private function f_ctrs_bsc_and_bts_init(integer bts_count := NUM_BTS, CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT {
+	g_ctr_bts := f_counter_name_vals_get_n(IPA_CTRL, "bts", bts_count, counternames);
+	log("initial bts rate counters: ", g_ctr_bts);
+	f_ctrs_bsc_init(counternames);
+}
+
+private function f_ctrs_bsc_and_bts_add(integer bts_nr, charstring countername, integer val := 1) runs on test_CT {
+	f_counter_name_vals_list_add(g_ctr_bts, bts_nr, countername, val);
+	f_ctrs_bsc_add(countername, val);
+}
+
+/*  f_ctrs_bsc_and_bts_init();
+ *  f_do_thing(on_bts := 0);
+ *  f_do_thing(on_bts := 0);
+ *  f_do_other(on_bts := 1);
+ *  f_ctrs_bsc_and_bts_add(0, "thing", 2);
+ *  f_ctrs_bsc_and_bts_add(1, "other");
+ *  f_ctrs_bsc_and_bts_verify();
+ */
+private function f_ctrs_bsc_and_bts_verify() runs on test_CT {
+	f_counter_name_vals_expect_n(IPA_CTRL, "bts", g_ctr_bts);
+	f_ctrs_bsc_verify();
+}
+
+/* convenience: f_ctrs_bsc_and_bts_add() and f_ctrs_bsc_and_bts_verify() in one call.
+ *  f_ctrs_bsc_and_bts_init();
+ *  f_do_thing(on_bts := 0);
+ *  f_do_thing(on_bts := 0);
+ *  f_do_thing(on_bts := 0);
+ *  f_ctrs_bsc_and_bts_expect(0, "thing", 3);
+ */
+private function f_ctrs_bsc_and_bts_expect(integer bts_nr, charstring countername, integer val := 1) runs on test_CT {
+	f_ctrs_bsc_and_bts_add(bts_nr, countername, val);
+	f_ctrs_bsc_and_bts_verify();
+}
+
+
+/* Convenience functions for rate counters using g_ctr_bsc. */
+
+private function f_ctrs_bsc_init(CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT {
+	g_ctr_bsc := f_counter_name_vals_get_n(IPA_CTRL, "bsc", 1, counternames);
+	log("initial bsc rate counters: ", g_ctr_bsc);
+}
+
+private function f_ctrs_bsc_add(charstring countername, integer val := 1) runs on test_CT {
+	f_counter_name_vals_list_add(g_ctr_bsc, 0, countername, val);
+}
+
+/*  f_ctrs_bsc_init();
+ *  f_do_thing();
+ *  f_do_thing();
+ *  f_do_other();
+ *  f_ctrs_bsc_add("thing", 2);
+ *  f_ctrs_bsc_add("other");
+ *  f_ctrs_bsc_verify();
+ */
+private function f_ctrs_bsc_verify() runs on test_CT {
+	f_counter_name_vals_expect_n(IPA_CTRL, "bsc", g_ctr_bsc);
+}
+
+/* convenience: f_ctrs_bsc_add() and f_ctrs_bsc_verify() in one call.
+ *  f_ctrs_bsc_init();
+ *  f_do_thing();
+ *  f_ctrs_bsc_expect("thing", 1);
+ */
+private function f_ctrs_bsc_expect(charstring countername, integer val := 1) runs on test_CT {
+	f_ctrs_bsc_add(countername, val);
+	f_ctrs_bsc_verify();
+}
+
 
 private function f_shutdown_helper() runs on test_CT {
 	all component.stop;
@@ -4112,8 +4236,21 @@
 	var MSC_ConnHdlr vc_conn;
 	f_init(2, true);
 	f_sleep(1.0);
+
+	f_ctrs_bsc_and_bts_init();
+
 	vc_conn := f_start_handler(refers(f_tc_ho_int));
 	vc_conn.done;
+
+	/* from f_establish_fully() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+	/* from handover */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:completed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:completed");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */
@@ -4211,8 +4348,18 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	vc_conn := f_start_handler(refers(f_tc_ho_out_of_this_bsc));
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:completed");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and
@@ -4258,8 +4405,18 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_msc_response));
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:timeout");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports
@@ -4342,8 +4499,18 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	vc_conn := f_start_handler(refers(f_tc_ho_out_fail_rr_ho_failure));
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:failed");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* BSC asks for inter-BSC-out HO, receives BSSMAP Handover Command, but then no reply is received about HO outcome
@@ -4429,8 +4596,18 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_result_after_ho_cmd));
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:timeout");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
@@ -4503,11 +4680,19 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
 	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
 
 	vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars);
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:completed");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {
@@ -4576,11 +4761,19 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
 	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
 
 	vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars);
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:stopped");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs on MSC_ConnHdlr {
@@ -4656,11 +4849,19 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
 	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
 
 	vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars);
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:stopped");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* The new BSS's lchan times out before the MSC decides that handover failed. */
@@ -4737,11 +4938,19 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
 	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
 
 	vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars);
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* Same as f_tc_ho_in_fail_no_detect, but MSC fails to send a Clear Command */
@@ -4808,11 +5017,19 @@
 	f_init(1, true);
 	f_sleep(1.0);
 
+	f_ctrs_bsc_and_bts_init();
+
 	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
 	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
 
 	vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars);
 	vc_conn.done;
+
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");
+	f_ctrs_bsc_and_bts_verify();
 }
 
 type record of charstring Commands;
@@ -4994,6 +5211,43 @@
 			"handover any to arfcn 871 bsic 11",
 			true);
 }
+testcase TC_ho_neighbor_config_1() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true, guard_timeout := 60.0);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 1.a */
+	/* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by sending a Handover Failure message. */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
+
+	/* 1.b */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	/* 1.c */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	/* 1.d */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5016,6 +5270,33 @@
 			"handover any to arfcn 871 bsic 12",
 			false);
 }
+testcase TC_ho_neighbor_config_2() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true, guard_timeout := 50.0);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 2.a */
+	/* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by sending a Handover Failure message. */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
+
+	/* 2.b */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5037,6 +5318,33 @@
 			"handover any to arfcn 871 bsic 12",
 			true);
 }
+testcase TC_ho_neighbor_config_3() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true, guard_timeout := 50.0);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 3.a */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	/* 3.b */
+	/* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by sending a Handover Failure message. */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5061,6 +5369,37 @@
 			"handover any to arfcn 123 bsic 45",
 			true, true);
 }
+testcase TC_ho_neighbor_config_4() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true, guard_timeout := 50.0);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 4.a */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	/* 4.b */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	/* 4.c */
+	/* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by timing out after the Handover Required message */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:timeout");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5079,6 +5418,29 @@
 			"handover any to arfcn 871 bsic 12",
 			true, true);
 }
+testcase TC_ho_neighbor_config_5() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 5 */
+	/* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by timing out after the Handover Required message */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:timeout");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5098,6 +5460,27 @@
 			"handover any to arfcn 871 bsic 12",
 			false);
 }
+testcase TC_ho_neighbor_config_6() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6));
+	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 6.a */
+	/* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by timing out after the Handover Required message */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:error");
+
+	f_ctrs_bsc_and_bts_verify();
+}
+
 private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr {
 	f_tc_ho_neighbor_config_start();
 
@@ -5120,55 +5503,35 @@
 			"handover any to arfcn 123 bsic 45",
 			true, true);
 }
-
-testcase TC_ho_neighbor_config_1() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true, guard_timeout := 60.0);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1));
-	vc_conn.done;
-}
-testcase TC_ho_neighbor_config_2() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true, guard_timeout := 50.0);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2));
-	vc_conn.done;
-}
-testcase TC_ho_neighbor_config_3() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true, guard_timeout := 50.0);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3));
-	vc_conn.done;
-}
-testcase TC_ho_neighbor_config_4() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true, guard_timeout := 50.0);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4));
-	vc_conn.done;
-}
-testcase TC_ho_neighbor_config_5() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5));
-	vc_conn.done;
-}
-testcase TC_ho_neighbor_config_6() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(3, true);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6));
-	vc_conn.done;
-}
 testcase TC_ho_neighbor_config_7() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 	f_init(3, true, guard_timeout := 50.0);
 	f_sleep(1.0);
+	f_ctrs_bsc_and_bts_init();
 	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_7));
 	vc_conn.done;
+
+	/* f_tc_ho_neighbor_config_start() */
+	f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
+	f_ctrs_bsc_and_bts_add(0, "assignment:completed");
+
+	/* 7.a */
+	/* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by sending a Handover Failure message. */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:failed");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");
+	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
+
+	/* 7.b */
+	/* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the
+	 * handover quickly by timing out after the Handover Required message */
+	f_ctrs_bsc_and_bts_add(0, "handover:attempted");
+	f_ctrs_bsc_and_bts_add(0, "handover:timeout");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
+	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
+
+	f_ctrs_bsc_and_bts_verify();
 }
 
 /* OS#3041: Open and close N connections in a normal fashion, and expect no
