diff --git a/msc/MSC_Tests.cfg b/msc/MSC_Tests.cfg
index 6082d5b..5a3c33c 100644
--- a/msc/MSC_Tests.cfg
+++ b/msc/MSC_Tests.cfg
@@ -58,4 +58,5 @@
 #MSC_Tests.TC_lu_imsi_auth_tmsi_encr_013_2
 #MSC_Tests.TC_mo_release_timeout
 #MSC_Tests.TC_lu_and_mt_call_no_dlcx_resp
+#MSC_Tests.TC_reset_two
 #MSC_Tests.TC_lu_and_mt_call
diff --git a/msc/MSC_Tests.default b/msc/MSC_Tests.default
index eff5d96..6958f10 100644
--- a/msc/MSC_Tests.default
+++ b/msc/MSC_Tests.default
@@ -24,14 +24,28 @@
 [MODULE_PARAMETERS]
 M3UA_Emulation.tsp_logVerbose := true;
 MSC_Tests.mp_bssap_cfg := {
-	sccp_service_type := "mtp3_itu",
-	sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
-	own_pc := 193,
-	own_ssn := 254,
-	peer_pc := 185,
-	peer_ssn := 254,
-	sio := '83'O
+	{
+		sccp_service_type := "mtp3_itu",
+		sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
+		own_pc := 193,
+		own_ssn := 254,
+		peer_pc := 185,
+		peer_ssn := 254,
+		sio := '83'O
+		rctx := 0
+	},
+	{
+		sccp_service_type := "mtp3_itu",
+		sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" },
+		own_pc := 194,
+		own_ssn := 254,
+		peer_pc := 185,
+		peer_ssn := 254,
+		sio := '83'O
+		rctx := 1
+	}
 };
+
 Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoMSC";
 
 [MAIN_CONTROLLER]
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 84f33b7..ce9c8b9 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -47,11 +47,13 @@
 import from L3_Templates all;
 import from L3_Common all;
 
+const integer NUM_BSC := 2;
+type record of BSSAP_Configuration BSSAP_Configurations;
 
 type component MTC_CT extends CTRL_Adapter_CT {
 	var boolean g_initialized := false;
 
-	var BSSAP_Adapter g_bssap;
+	var BSSAP_Adapter g_bssap[NUM_BSC];
 
 	/* no 'adapter_CT' for MNCC or GSUP */
 	var MNCC_Emulation_CT vc_MNCC;
@@ -89,13 +91,27 @@
 
 	charstring mp_msc_mncc := "/tmp/mncc";
 
-	BSSAP_Configuration mp_bssap_cfg := {
-		sccp_service_type := "mtp3_itu",
-		sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
-		own_pc := 185,
-		own_ssn := 254,
-		peer_pc := 187,
-		peer_ssn := 254
+	BSSAP_Configurations mp_bssap_cfg := {
+		{
+			sccp_service_type := "mtp3_itu",
+			sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
+			own_pc := 185,
+			own_ssn := 254,
+			peer_pc := 187,
+			peer_ssn := 254,
+			sio := '83'O,
+			rctx := 0
+		},
+		{
+			sccp_service_type := "mtp3_itu",
+			sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
+			own_pc := 186,
+			own_ssn := 254,
+			peer_pc := 187,
+			peer_ssn := 254,
+			sio := '83'O,
+			rctx := 1
+		}
 	};
 }
 
@@ -167,14 +183,25 @@
 	}
 }
 
-function f_init() runs on MTC_CT {
+function f_init(integer num_bsc := 1) runs on MTC_CT {
 
 	if (g_initialized == true) {
 		return;
 	}
 	g_initialized := true;
 
-	f_bssap_init(g_bssap, mp_bssap_cfg, "MSC_Test", BSC_BssmapOps);
+	if (num_bsc > NUM_BSC) {
+		setverdict(fail, "excess number of BSC instances requested");
+	}
+
+	for (var integer i := 0; i < num_bsc; i := i + 1) {
+		if (isbound(mp_bssap_cfg[i])) {
+			f_bssap_init(g_bssap[0], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_BssmapOps);
+		} else {
+			setverdict(fail, "missing BSSAP configuration");
+		}
+	}
+
 	f_ipa_ctrl_start(mp_msc_ip, mp_msc_ctrl_port);
 	f_init_mncc("MSC_Test");
 	f_init_mgcp("MSC_Test");
@@ -194,8 +221,8 @@
  * to f_init() when the high level functions of the BSC_ConnectionHandler are
  * not needed. */
 function f_init_bssap_direct() runs on MTC_CT {
-	f_bssap_init(g_bssap, mp_bssap_cfg, "MSC_Test", omit);
-	connect(g_bssap.vc_SCCP:SCCP_SP_PORT, self:BSSAP_DIRECT);
+	f_bssap_init(g_bssap[0], mp_bssap_cfg[0], "MSC_Test", omit);
+	connect(g_bssap[0].vc_SCCP:SCCP_SP_PORT, self:BSSAP_DIRECT);
 
 	/* Start guard timer and activate it as default */
 	Tguard_direct.start
@@ -376,8 +403,8 @@
 		expect_ciph := false
 	};
 	var BSC_ConnHdlrPars pars := {
-		sccp_addr_own := g_bssap.sccp_addr_own,
-		sccp_addr_peer := g_bssap.sccp_addr_peer,
+		sccp_addr_own := g_bssap[0].sccp_addr_own,
+		sccp_addr_peer := g_bssap[0].sccp_addr_peer,
 		cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42)),
 		imei := f_gen_imei(imsi_suffix),
 		imsi := f_gen_imsi(imsi_suffix),
@@ -399,8 +426,8 @@
 
 	vc_conn := BSC_ConnHdlr.create(id);
 	/* BSSMAP part / A interface */
-	connect(vc_conn:BSSAP, g_bssap.vc_BSSMAP:CLIENT);
-	connect(vc_conn:BSSAP_PROC, g_bssap.vc_BSSMAP:PROC);
+	connect(vc_conn:BSSAP, g_bssap[0].vc_BSSMAP:CLIENT);
+	connect(vc_conn:BSSAP_PROC, g_bssap[0].vc_BSSMAP:PROC);
 	/* MNCC part */
 	connect(vc_conn:MNCC, vc_MNCC:MNCC_CLIENT);
 	connect(vc_conn:MNCC_PROC, vc_MNCC:MNCC_PROC);
@@ -1665,10 +1692,10 @@
 	f_init_bssap_direct();
 
 	/* Make a blind connection attemt, to trigger the deadlock condition */
-	BSSAP_DIRECT.send(ts_BSSAP_CONNECT_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, 1, omit));
+	BSSAP_DIRECT.send(ts_BSSAP_CONNECT_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, 1, omit));
 
 	/* Send a BSSMAP reset */
-	BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0)));
+	BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0)));
 	T.start
 	alt {
 	[] BSSAP_DIRECT.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_ResetAck)) {
@@ -1678,7 +1705,7 @@
 
 	/* Acknowledge MSC sided reset requests */
 	[] BSSAP_DIRECT.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) {
-		BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_ResetAck));
+		BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_ResetAck));
 		repeat;
 	}
 
@@ -1774,6 +1801,14 @@
 	f_init();
 }
 
+/* Two BSSMAP resets from two different BSCs */
+testcase TC_reset_two() runs on MTC_CT {
+	var BSC_ConnHdlr vc_conn;
+	f_init(2);
+	f_sleep(2.0);
+	setverdict(pass);
+}
+
 /* TODO:
    * continue to send repeated MO signalling messages to keep channel open: does MSC tmeout?
    * malformed messages (missing IE, invalid message type): properly rejected?
@@ -1831,6 +1866,7 @@
 	execute( TC_lu_imsi_auth_tmsi_encr_013_2() );
 	execute( TC_mo_release_timeout() );
 	execute( TC_lu_and_mt_call_no_dlcx_resp() );
+	execute( TC_reset_two() );
 
 	execute( TC_lu_and_mt_call() );
 
