diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 9e0fae3..7f670d2 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1148,7 +1148,7 @@
 
 	IPA_RSL[0].send(ts_ASP_RSL_UD(ts_RSL_CHAN_RQD('23'O, 23)));
 	rsl_unused := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* verify if the "chreq:total" counter increments as expected */
@@ -1164,7 +1164,7 @@
 	rsl_unused := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));
 	f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total", chreq_total+1);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* CHAN RQD -> CHAN ACT -> CHAN ACT ACK -> RF CHAN REL */
@@ -1177,7 +1177,7 @@
 	/* expect BSC to disable the channel again if there's no RLL EST IND */
 	rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Normal variant */
@@ -1236,7 +1236,7 @@
 	/* expect BSC to disable the channel again if there's no response from MSC */
 	/* MS waits 20s (T3210) at LU; 10s (T3230) at CM SERV REQ and 5s (T3220) AT detach */
 	f_expect_chan_rel(0, chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior if MSC answers with CREF to CR */
@@ -1257,7 +1257,7 @@
 
 	/* expect BSC to disable the channel */
 	f_expect_chan_rel(0, chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* CHAN RQD -> CHAN ACT -> CHAN ACT NACK -> RF CHAN REL */
@@ -1280,7 +1280,7 @@
 
 	f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "chan_act:nack", chact_nack+1);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test for channel exhaustion due to RACH overload */
@@ -1329,6 +1329,7 @@
 		}
 	[] IPA_RSL[0].receive { repeat; }
 	}
+	f_shutdown_helper();
 }
 
 /* Test channel deactivation due to silence from MS */
@@ -1360,6 +1361,7 @@
 		setverdict(fail, "Unexpected RSL message!");
 		}
 	}
+	f_shutdown_helper();
 }
 
 /***********************************************************************
@@ -1374,7 +1376,7 @@
 	BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,
 				        2342, ts_BSSMAP_AssignmentReq));
 	BSSAP.receive(tr_BSSAP_DISC_ind(2342, ?, ?));
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior if MSC answers with CREF to CR */
@@ -1405,6 +1407,7 @@
 		}
 	[] BSSAP.receive { repeat; }
 	}
+	f_shutdown_helper();
 }
 
 /* generate an assignment request for either AoIP or SCCPlite */
@@ -1492,6 +1495,7 @@
 	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");
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_ctm() runs on test_CT {
@@ -1500,6 +1504,7 @@
 	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");
+	f_shutdown_helper();
 }
 
 type record DchanTuple {
@@ -1577,7 +1582,7 @@
 	/* wait for SCCP emulation to do its job */
 	f_sleep(1.0);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of channel release after CONN FAIL IND from BTS */
@@ -1606,7 +1611,7 @@
 	/* wait for SCCP emulation to do its job */
 	f_sleep(1.0);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of early CONN FAIL IND from BTS (before EST IND!) */
@@ -1629,7 +1634,7 @@
 	/* BTS<-BSC: respond with CHAN REL ACK */
 	f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of late CONN FAIL IND from BTS (ater REL IND!) */
@@ -1662,7 +1667,7 @@
 	/* BSC<-MSC: MSC disconnects as requested. */
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr,
@@ -1797,7 +1802,7 @@
 	}
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of channel release after Clear Command with CSFB indicator from MSC */
@@ -1820,7 +1825,7 @@
 	}
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, is_csfb := true);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of channel release after hard RLSD from MSC */
@@ -1835,7 +1840,7 @@
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of channel release after hard RLSD from MSC and MS is not responding to RLL REL REQ */
@@ -1850,7 +1855,7 @@
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior of channel release after BSSMAP RESET from MSC */
@@ -1872,7 +1877,7 @@
 	}
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Verify T(iar) triggers and releases the channel */
@@ -1889,7 +1894,7 @@
 
 	dt := f_est_dchan('23'O, 23, '00010203040506'O);
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 private function f_tc_chan_rel_rr_cause(myBSSMAP_Cause clear_cmd_cause, template RR_Cause expect_rr_cause)
@@ -1905,7 +1910,7 @@
 	}
 
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, expect_rr_cause := expect_rr_cause);
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test that Clear Command cause codes affect the RR Channel Release cause code */
@@ -1940,7 +1945,7 @@
 	[] T.timeout {}
 	}
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior if RSL EST IND for invalid SAPI */
@@ -1965,7 +1970,7 @@
 	[] T.timeout {}
 	}
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior if RSL EST IND for invalid SAPI */
@@ -1989,7 +1994,7 @@
 	[] T.timeout {}
 	}
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test behavior if RSL EST IND for invalid SACCH */
@@ -2013,7 +2018,7 @@
 	[] T.timeout {}
 	}
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 private function f_exp_sapi_n_reject(template (present) GsmSapi sapi := ?,
@@ -2070,7 +2075,7 @@
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Check if we get SAPI N Reject on receipt of unexpected RLL ERROR INDication */
@@ -2098,7 +2103,7 @@
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Check if we get SAPI N Reject due to a SAPI=3 link establishment timeout */
@@ -2124,12 +2129,13 @@
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 	f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 testcase TC_si_default() runs on test_CT {
 	f_init(0);
 	f_init_bts_and_check_sysinfo(0, expect_si := SystemInformationConfig_default);
+	f_shutdown_helper();
 }
 
 /* We're testing SI2quater with lists of EARFCNs. Instead of just incrementing EARFCNs, also pick some from the edges of
@@ -2239,46 +2245,57 @@
 
 testcase TC_si2quater_2_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(2);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_3_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(3);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_4_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(4);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_5_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(5);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_6_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(6);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_12_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(12);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_23_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(23);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_32_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(32);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_33_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(33);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_42_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(42);
+	f_shutdown_helper();
 }
 
 testcase TC_si2quater_48_earfcns() runs on test_CT {
 	f_tc_si2quater_n_earfcns(48);
+	f_shutdown_helper();
 }
 
 /* verify the VTY error response when adding too many EARFCNs, and showing that osmo-bsc still sends 16 SI2quater with
@@ -2312,6 +2329,7 @@
 	for (var integer i := 1; i < 48; i := i + 1) {
 		f_bts_0_cfg(BSCVTY, {"si2quater neighbor-list del earfcn " & int2str(f_test_si2quater_earfcn_by_idx(i))});
 	}
+	f_shutdown_helper();
 }
 
 private function f_acc09_count_allowed(AccessControlClass acc) return uint8_t
@@ -2398,6 +2416,7 @@
 
 	f_bts_0_cfg(BSCVTY, {"access-control-class-rotate 10",
 			     "rach access-control-class 5 allowed"});
+	f_shutdown_helper();
 }
 
 /* verify ACC startup ramp+rotate feature */
@@ -2458,6 +2477,7 @@
 	f_bts_0_cfg(BSCVTY, {"access-control-class-rotate 10",
 			     "rach access-control-class 4 allowed",
 			     "no access-control-class-ramping"});
+	f_shutdown_helper();
 }
 
 testcase TC_ctrl_msc_connection_status() runs on test_CT {
@@ -2467,7 +2487,7 @@
 
 	/* See https://osmocom.org/issues/2729 */
 	f_ctrl_get_exp(IPA_CTRL, "msc_connection_status", "connected");
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 testcase TC_ctrl_msc0_connection_status() runs on test_CT {
@@ -2476,7 +2496,7 @@
 	f_init(1);
 
 	f_ctrl_get_exp(IPA_CTRL, "msc.0.connection_status", "connected");
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 testcase TC_ctrl() runs on test_CT {
@@ -2508,7 +2528,7 @@
 
 	f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bsc", 0, "paging:attempted", 0);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Verify that Upon receival of SET "location", BSC forwards a TRAP
@@ -2534,7 +2554,7 @@
 	/* should match the one from  config */
 	f_ctrl_set(SCCPLITE_IPA_CTRL, "rf_locked", "0");
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 
@@ -2935,7 +2955,7 @@
 		}
 	}
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test RSL link drop causes counter increment */
@@ -2950,7 +2970,7 @@
 
 	f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "rsl_fail", rsl_fail+1);
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* TODO: Test OML link drop causes counter increment */
@@ -2996,6 +3016,7 @@
 	} else {
 		setverdict(fail, "Timeout RSL waiting for connection to close");
 	}
+	f_shutdown_helper();
 }
 
 
@@ -3006,6 +3027,7 @@
 	} else {
 		setverdict(fail, "Timeout OML waiting for connection to close");
 	}
+	f_shutdown_helper();
 }
 
 
@@ -3083,6 +3105,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 testcase TC_ciph_mode_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -3093,6 +3116,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 testcase TC_ciph_mode_a5_3() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -3103,6 +3127,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* establish initial channel, enable ciphering followed by assignment to ciphered channel */
@@ -3122,6 +3147,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_assignment_aoip_tla_v6), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -3144,6 +3170,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 testcase TC_assignment_fr_a5_1() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -3154,6 +3181,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 testcase TC_assignment_fr_a5_3() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -3164,6 +3192,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* Expect ASSIGNMENT FAIL if mandatory IE is missing */
@@ -3186,6 +3215,7 @@
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1_codec_missing));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {
@@ -3209,6 +3239,7 @@
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_4));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -3238,6 +3269,7 @@
 
 	vc_conn := f_start_handler(refers(f_tc_assignment_sign));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /***********************************************************************
@@ -3448,6 +3480,7 @@
 	pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_hr() runs on test_CT {
@@ -3460,6 +3493,7 @@
 	pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR}));
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_efr() runs on test_CT {
@@ -3472,6 +3506,7 @@
 	pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecEFR}));
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* Allow 5,90k only (current default config) */
@@ -3529,6 +3564,7 @@
 
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_h() runs on test_CT {
@@ -3553,6 +3589,7 @@
 
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 function f_TC_assignment_codec_amr(boolean fr, octetstring mrconf, bitstring s8_s0, bitstring exp_s8_s0)
@@ -3616,56 +3653,67 @@
  * set. */
 testcase TC_assignment_codec_amr_f_S1() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '289520882208'O, '00000010'B, '00000010'B);
+	f_shutdown_helper();
 }
 
 /* Set S1, we expect an AMR multirate configuration IE with the lower three
  * rates set. */
 testcase TC_assignment_codec_amr_h_S1() runs on test_CT {
 	f_TC_assignment_codec_amr(false, '2815208820'O, '00000010'B, '00000010'B);
+	f_shutdown_helper();
 }
 
 /* Set S1 and two other rates, we expect an AMR MULTIRATE CONFIGURATION IE with
  * all four rates (and only S1 set in the ASSIGNMENT COMPLETE) */
 testcase TC_assignment_codec_amr_f_S124() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '289520882208'O, '00010110'B, '00000010'B);
+	f_shutdown_helper();
 }
 
 /* Set S1 and two other rates, we expect an AMR MULTIRATE CONFIGURATION IE with
  * all four rates (and only S1 set in the ASSIGNMENT COMPLETE) */
 testcase TC_assignment_codec_amr_h_S124() runs on test_CT {
 	f_TC_assignment_codec_amr(false, '2815208820'O, '00010110'B, '00000010'B);
+	f_shutdown_helper();
 }
 
 /* The following block of tests selects more and more rates until all four
  * possible rates are in the active set (full rate) */
 testcase TC_assignment_codec_amr_f_S0() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '2801'O, '00000001'B, '00000001'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_S02() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '28052080'O, '00000101'B, '00000101'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_S024() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '2815208820'O, '00010101'B, '00010101'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_S0247() runs on test_CT {
 	f_TC_assignment_codec_amr(true, '289520882208'O, '10010101'B, '10010101'B);
+	f_shutdown_helper();
 }
 
 /* The following block of tests selects more and more rates until all three
  * possible rates are in the active set (half rate) */
 testcase TC_assignment_codec_amr_h_S0() runs on test_CT {
 	f_TC_assignment_codec_amr(false, '2801'O, '00000001'B, '00000001'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_h_S02() runs on test_CT {
 	f_TC_assignment_codec_amr(false, '28052080'O, '00000101'B, '00000101'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_h_S024() runs on test_CT {
 	f_TC_assignment_codec_amr(false, '2815208820'O, '00010101'B, '00010101'B);
+	f_shutdown_helper();
 }
 
 /* The following block tests what happens when the MSC does offer rate
@@ -3678,6 +3726,7 @@
 	/* Try to include 12,2k in into the active set even though the channel
 	* is half rate only. The BSC is expected to remove the 12,0k */
 	f_TC_assignment_codec_amr(false, '2815208820'O, '10010101'B, '00010101'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_S01234567() runs on test_CT {
@@ -3685,6 +3734,7 @@
 	* Also S1 is selected, this setting will be prefered and we should
 	* get 12.2k, 7,40k, 5,90k, and 4,75k in the active set. */
 	f_TC_assignment_codec_amr(true, '289520882208'O, '11111111'B, '00000010'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_S0234567() runs on test_CT {
@@ -3692,21 +3742,25 @@
 	* select the currently supported rates, which are also 12.2k, 7,40k,
 	* 5,90k, and 4,75k, into the active set. */
 	f_TC_assignment_codec_amr(true, '289520882208'O, '11111101'B, '10010101'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_zero() runs on test_CT {
 	/* Try to select no rates at all */
 	f_TC_assignment_codec_amr_fail(true, '00000000'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_f_unsupp() runs on test_CT {
 	/* Try to select only unsupported rates */
 	f_TC_assignment_codec_amr_fail(true, '01101000'B);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_codec_amr_h_S7() runs on test_CT {
 	/* Try to select 12,2k for half rate */
 	f_TC_assignment_codec_amr_fail(false, '10000000'B);
+	f_shutdown_helper();
 }
 
 private function f_disable_all_tch_f() runs on test_CT {
@@ -3841,7 +3895,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a FR channel while all FR channels are exhausted, this is expected
@@ -3855,7 +3909,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr_fail));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a FR (prefered) or alternatively a HR channel while all FR channels
@@ -3869,7 +3923,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_fr_hr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a HR (prefered) or alternatively a FR channel while all FR channels
@@ -3883,7 +3937,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_hr_fr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a FR channel while all HR channels are exhausted, this is expected
@@ -3897,7 +3951,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a HR channel while all HR channels are exhausted, this is expected
@@ -3911,7 +3965,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr_fail));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a HR (prefered) or alternatively a FR channel while all HR channels
@@ -3925,7 +3979,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_hr_fr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a FR (prefered) or alternatively a HR channel while all HR channels
@@ -3939,7 +3993,7 @@
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_fr_hr));
 	vc_conn.done;
 	f_enable_all_tch();
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Allow FR and HR, but prefer HR */
@@ -3977,7 +4031,7 @@
 	f_enable_all_tch();
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_hr_fr));
 	vc_conn.done;
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Request a FR (prefered) or alternatively a HR channel, it is expected that
@@ -3989,7 +4043,7 @@
 	f_enable_all_tch();
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_fr_hr));
 	vc_conn.done;
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 testcase TC_assignment_osmux() runs on test_CT {
@@ -4015,6 +4069,7 @@
 
 	vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* test the procedure of the MSC requesting a Classmark Update:
@@ -4040,6 +4095,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_classmark));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* Send a CommonID from the simulated MSC and verify that the information is used to
@@ -4067,6 +4123,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_common_id));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 private function f_est_single_l3(template PDU_ML3_MS_NW l3) runs on MSC_ConnHdlr {
@@ -4105,6 +4162,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_unsol_ass_fail));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -4119,6 +4177,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_unsol_ass_compl));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -4133,6 +4192,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_unsol_ho_fail));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -4153,6 +4213,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_err_82_short_msg));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 
@@ -4174,6 +4235,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_err_84_unknown_msg));
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /***********************************************************************
@@ -4286,6 +4348,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */
@@ -4395,6 +4458,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and
@@ -4452,6 +4516,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports
@@ -4546,6 +4611,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* BSC asks for inter-BSC-out HO, receives BSSMAP Handover Command, but then no reply is received about HO outcome
@@ -4643,6 +4709,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
@@ -4732,12 +4799,14 @@
 testcase TC_ho_into_this_bsc() runs on test_CT {
 	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	f_tc_ho_into_this_bsc_main(pars);
+	f_shutdown_helper();
 }
 
 testcase TC_ho_into_this_bsc_tla_v6() runs on test_CT {
 	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.host_aoip_tla := "::6";
 	f_tc_ho_into_this_bsc_main(pars);
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {
@@ -4819,6 +4888,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs on MSC_ConnHdlr {
@@ -4884,7 +4954,6 @@
 	BSSAP.send(ts_BSSMAP_ClearCommand(cause));
 
 	f_expect_dlcx_conns();
-	setverdict(pass);
 	f_sleep(1.0);
 }
 testcase TC_ho_in_fail_msc_clears_after_ho_detect() runs on test_CT {
@@ -4907,6 +4976,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* The new BSS's lchan times out before the MSC decides that handover failed. */
@@ -4971,10 +5041,7 @@
 	BSSAP.send(ts_BSSMAP_ClearCommand(cause));
 
 	f_expect_dlcx_conns();
-	setverdict(pass);
 	f_sleep(1.0);
-
-	setverdict(pass);
 }
 testcase TC_ho_in_fail_no_detect() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -4996,6 +5063,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 /* Same as f_tc_ho_in_fail_no_detect, but MSC fails to send a Clear Command */
@@ -5052,7 +5120,6 @@
 		BSSAP.send(ts_BSSMAP_ClearCommand(cause));
 	};
 	f_expect_dlcx_conns();
-	setverdict(pass);
 	f_sleep(1.0);
 }
 testcase TC_ho_in_fail_no_detect2() runs on test_CT {
@@ -5075,6 +5142,7 @@
 	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();
+	f_shutdown_helper();
 }
 
 type record of charstring Commands;
@@ -5291,6 +5359,7 @@
 	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr {
@@ -5340,6 +5409,7 @@
 	f_ctrs_bsc_and_bts_add(0, "handover:error");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr {
@@ -5388,6 +5458,7 @@
 	f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr {
@@ -5443,6 +5514,7 @@
 	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr {
@@ -5484,6 +5556,7 @@
 	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr {
@@ -5524,6 +5597,7 @@
 	f_ctrs_bsc_and_bts_add(0, "handover:error");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr {
@@ -5577,6 +5651,7 @@
 	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");
 
 	f_ctrs_bsc_and_bts_verify();
+	f_shutdown_helper();
 }
 
 /* OS#3041: Open and close N connections in a normal fashion, and expect no
@@ -5830,7 +5905,7 @@
 	/* clean up config */
 	f_ts_set_chcomb(0, 0, 6, "PDCH");
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test IPA PDCH activation NACK */
@@ -5867,7 +5942,7 @@
 	/* clean up config */
 	f_ts_set_chcomb(0, 0, 6, "PDCH");
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 
@@ -5936,7 +6011,7 @@
 	/* clean up config */
 	f_ts_set_chcomb(0, 0, 6, "PDCH");
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Test Osmocom dyn PDCH activation NACK behavior */
@@ -5965,7 +6040,7 @@
 	/* clean up config */
 	f_ts_set_chcomb(0, 0, 6, "PDCH");
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 testcase TC_chopped_ipa_ping() runs on test_CT {
@@ -5973,6 +6048,7 @@
 	for (var integer i := 0; i < lengthof(bsc_ipa_ports); i := i + 1) {
 		IPA_Testing.f_run_TC_chopped_ipa_ping(mp_bsc_ip, bsc_ipa_ports[i], CONNECT_TO_SERVER);
 	}
+	f_shutdown_helper();
 }
 
 testcase TC_chopped_ipa_payload() runs on test_CT {
@@ -5981,6 +6057,7 @@
 	for (var integer i := 0; i < lengthof(bsc_ipa_ports); i := i + 1) {
 		IPA_Testing.f_run_TC_chopped_ipa_payload(mp_bsc_ip, bsc_ipa_ports[i], CONNECT_TO_SERVER);
 	}
+	f_shutdown_helper();
 }
 
 /* Verify the BSC sends the MS Power Parameters IE during CHAN ACT to make sure
@@ -5995,6 +6072,7 @@
 	f_sleep(1.0);
 	vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /***********************************************************************
@@ -6144,6 +6222,7 @@
 	vc_conn.done;
 
 	f_ctrs_msc_expect(0, "mscpool:subscr:new", 4);
+	f_shutdown_helper();
 }
 
 /* Three Layer 3 Complete by IMSI are round-robin'ed across two connected MSCs */
@@ -6184,6 +6263,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:new");
+	f_shutdown_helper();
 }
 
 /* Three LU by TMSI are round-robin'ed across two connected MSCs, because they contain the NULL-NRI 0
@@ -6225,6 +6305,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:reattach");
+	f_shutdown_helper();
 }
 
 /* Three LU by TMSI are round-robin'ed across two connected MSCs, because they contain the NULL-NRI 1
@@ -6267,6 +6348,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:reattach");
+	f_shutdown_helper();
 }
 
 /* Three Layer 3 Complete by TMSI are round-robin'ed across two connected MSCs, because they contain an NRI not
@@ -6311,6 +6393,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:new");
+	f_shutdown_helper();
 }
 
 /* Three Layer 3 Complete by TMSI are round-robin'ed across two connected MSCs, because they contain an NRI
@@ -6361,6 +6444,7 @@
 	f_ctrs_msc_add(2, "mscpool:subscr:attach_lost");
 	f_ctrs_msc_add(0, "mscpool:subscr:new");
 	f_ctrs_msc_verify();
+	f_shutdown_helper();
 }
 
 /* Three Layer 3 Complete by TMSI with valid NRI for the second MSC are all directed to the second MSC (configured in
@@ -6404,6 +6488,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(1, "mscpool:subscr:known");
+	f_shutdown_helper();
 }
 
 /* Layer 3 Complete by TMSI with valid NRI for the third MSC are directed to the third MSC (configured in osmo-bsc.cfg),
@@ -6447,6 +6532,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(1, "mscpool:subscr:new");
+	f_shutdown_helper();
 }
 
 /* LU with a TMSI but indicating a different PLMN in its previous LAI: ignore the NRI. */
@@ -6480,6 +6566,7 @@
 	vc_conn2 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars2);
 	vc_conn2.done;
 	f_ctrs_msc_expect(2, "mscpool:subscr:known");
+	f_shutdown_helper();
 }
 
 /* Make sure that whichever MSC paged a subscriber will also get the Paging Response. Page by IMSI, which would be
@@ -6509,7 +6596,6 @@
 	/* Despite the round robin pointing at the second MSC ('roundrobin next 1'), the earlier Paging for the same IMSI
 	 * causes this Paging Response to go to the first MSC (bssap_idx := 0). */
 	f_perform_compl_l3(RSL, ts_PAG_RESP(valueof(ts_MI_IMSI_LV(imsi))) );
-	setverdict(pass);
 	f_sleep(1.0);
 }
 testcase TC_mscpool_paging_and_response_imsi() runs on test_CT {
@@ -6530,6 +6616,7 @@
 	vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_imsi), pars1);
 	vc_conn1.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:paged");
+	f_shutdown_helper();
 }
 
 /* Make sure that whichever MSC paged a subscriber will also get the Paging Response.  Page by TMSI with an NRI value
@@ -6561,7 +6648,6 @@
 	 * third MSC ('roundrobin next 2'), the earlier Paging for the same TMSI causes this Paging Response to go to
 	 * the first MSC (bssap_idx := 0). */
 	f_perform_compl_l3(RSL, ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(nri_v))) );
-	setverdict(pass);
 	f_sleep(1.0);
 }
 testcase TC_mscpool_paging_and_response_tmsi() runs on test_CT {
@@ -6582,6 +6668,7 @@
 	vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_tmsi), pars1);
 	vc_conn1.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:paged");
+	f_shutdown_helper();
 }
 
 /* For round-robin, skip an MSC that has 'no allow-attach' set. */
@@ -6623,6 +6710,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:new");
+	f_shutdown_helper();
 }
 
 /* An MSC that has 'no allow-attach' set should still serve subscribers that are already attached according to their
@@ -6666,6 +6754,7 @@
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(2, "mscpool:subscr:new");
+	f_shutdown_helper();
 }
 
 /* Allow/Deny emergency calls globally via VTY */
@@ -6769,6 +6858,7 @@
 	f_vty_allow_emerg_bts(true, 0);
 	vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_allow), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* EMERGENCY CALL situation #2, forbidden globally but allowed by BTS */
@@ -6783,6 +6873,7 @@
 	f_vty_allow_emerg_bts(true, 0);
 	vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* EMERGENCY CALL situation #3, allowed globally but forbidden by BTS */
@@ -6802,6 +6893,7 @@
 	f_vty_allow_emerg_bts(false, 0);
 	vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);
 	vc_conn.done;
+	f_shutdown_helper();
 }
 
 /* Test what happens when an emergency call arrives while all TCH channels are
@@ -6843,7 +6935,7 @@
 	f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 33));
 	rx_rsl := f_exp_ipa_rx(0, tr_RSL_IMM_ASSIGN(0));
 
-	setverdict(pass);
+	f_shutdown_helper();
 }
 
 /* Hopping parameters per a timeslot */
