diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 160d662..a2c2a90 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -185,7 +185,7 @@
 		}
 }
 
-function f_init(boolean handler_mode := false) runs on test_CT {
+function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false) runs on test_CT {
 	var integer i;
 
 	if (g_initialized) {
@@ -198,7 +198,7 @@
 	f_bssap_init("VirtMSC", handler_mode);
 	f_ipa_ctrl_start(ctrl, mp_bsc_ip, mp_bsc_ctrl_port, 0);
 
-	for (i := 0; i < NUM_BTS; i := i+1) {
+	for (i := 0; i < nr_bts; i := i+1) {
 		/* wait until osmo-bts-omldummy has respawned */
 		f_wait_oml(i, "degraded", 5.0);
 		/* start RSL connection */
@@ -241,7 +241,7 @@
 testcase TC_chan_act_noreply() runs on test_CT {
 	var BSSAP_N_UNITDATA_ind ud_ind;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	IPA_RSL[0].send(ts_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,ts_RSL_CHAN_RQD('23'O, 23)));
@@ -254,7 +254,7 @@
 	var BSSAP_N_UNITDATA_ind ud_ind;
 	var integer chreq_total;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	chreq_total := f_ctrl_get_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total");
@@ -269,7 +269,7 @@
 testcase TC_chan_act_ack_noest() runs on test_CT {
 	var RSL_Message rx_rsl;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
@@ -285,7 +285,7 @@
 testcase TC_chan_act_ack_est_ind_noreply() runs on test_CT {
 	var RSL_Message rx_rsl;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
@@ -307,7 +307,7 @@
 	var BSSAP_N_CONNECT_ind rx_c_ind;
 	var RSL_Message rx_rsl;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
@@ -330,7 +330,7 @@
 	var RSL_Message rx_rsl;
 	var integer chact_nack;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	chact_nack := f_ctrl_get_ratectr_abs(IPA_CTRL, "bts", 0, "chan_act:nack");
@@ -355,7 +355,7 @@
 	var integer i;
 	var integer chreq_total, chreq_nochan;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	chreq_total := f_ctrl_get_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total");
@@ -402,7 +402,7 @@
 
 /* Verify that the BSC refuses any BSSAP connection from the MSC (They are all BSC->MSC direction) */
 testcase TC_outbound_connect() runs on test_CT {
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	BSSAP.send(ts_BSSAP_CONNECT_req(g_sccp_addr_peer, g_sccp_addr_own, 2342, ts_BSSMAP_AssignmentReq));
@@ -416,7 +416,7 @@
 	var RSL_Message rx_rsl;
 	var DchanTuple dt;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00000000'O);
@@ -441,7 +441,7 @@
 	var RSL_Message rx_rsl;
 	var DchanTuple dt;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00000000'O);
@@ -531,7 +531,7 @@
 	var RSL_Message rx_rsl;
 	var DchanTuple dt;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
@@ -556,7 +556,7 @@
 	var RSL_Message rx_rsl;
 	var DchanTuple dt;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
@@ -595,7 +595,7 @@
 	var DchanTuple dt;
 	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
@@ -641,7 +641,7 @@
 	var DchanTuple dt;
 	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
@@ -680,7 +680,7 @@
 	var DchanTuple dt;
 	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
@@ -727,7 +727,7 @@
 testcase TC_rll_est_ind_inact_lchan() runs on test_CT {
 	timer T := 2.0;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	var octetstring l3 := '00010203040506'O;
@@ -751,7 +751,7 @@
 testcase TC_rll_est_ind_inval_sapi1() runs on test_CT {
 	var RslChannelNr chan_nr;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	chan_nr := f_chreq_act_ack()
@@ -777,7 +777,7 @@
 testcase TC_rll_est_ind_inval_sapi3() runs on test_CT {
 	timer T := 2.0;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	var RslChannelNr chan_nr := f_chreq_act_ack();
@@ -802,7 +802,7 @@
 testcase TC_rll_est_ind_inval_sacch() runs on test_CT {
 	timer T := 2.0;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	var RslChannelNr chan_nr := f_chreq_act_ack();
@@ -829,7 +829,7 @@
 testcase TC_ctrl_msc_connection_status() runs on test_CT {
 	var charstring ctrl_resp;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	/* See https://osmocom.org/issues/2729 */
@@ -840,7 +840,7 @@
 testcase TC_ctrl() runs on test_CT {
 	var charstring ctrl_resp;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	/* all below values must match the osmo-bsc.cfg config file used */
@@ -1167,7 +1167,7 @@
 testcase TC_rsl_drop_counter() runs on test_CT {
 	var integer rsl_fail;
 
-	f_init();
+	f_init(1);
 	f_bssap_reset();
 
 	rsl_fail := f_ctrl_get_ratectr_abs(IPA_CTRL, "bts", 0, "rsl_fail");
@@ -1220,7 +1220,7 @@
 testcase TC_assignment_fr_a5_0() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
-	f_init(true);
+	f_init(1, true);
 	f_sleep(1.0);
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_0), testcasename());
@@ -1247,7 +1247,7 @@
 testcase TC_assignment_fr_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
-	f_init(true);
+	f_init(1, true);
 	f_sleep(1.0);
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1), testcasename());
@@ -1269,7 +1269,7 @@
 testcase TC_assignment_fr_a5_1_codec_missing() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
-	f_init(true);
+	f_init(1, true);
 	f_sleep(1.0);
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1_codec_missing), testcasename());
@@ -1294,7 +1294,7 @@
 testcase TC_assignment_fr_a5_3() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
-	f_init(true);
+	f_init(1, true);
 	f_sleep(1.0);
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_3), testcasename());
@@ -1320,7 +1320,7 @@
 testcase TC_assignment_fr_a5_4() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 
-	f_init(true);
+	f_init(1, true);
 	f_sleep(1.0);
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_4), testcasename());
