diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 7dd2c17..242b7e9 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -219,12 +219,19 @@
 };
 
 type component BSSGP_ConnHdlr {
+	/* array of per-BVC ports on the PCU side */
 	port BSSGP_PT PCU[NUM_PCU];
 	port BSSGP_PT PCU_SIG[NUM_PCU];
 	port BSSGP_PROC_PT PCU_PROC[NUM_PCU];
+	/* component reference to the component to which we're currently connected */
+	var BSSGP_BVC_CT pcu_ct[NUM_PCU];
+
+	/* array of per-BVC ports on the SGSN side */
 	port BSSGP_PT SGSN[NUM_SGSN];
 	port BSSGP_PT SGSN_SIG[NUM_SGSN];
 	port BSSGP_PROC_PT SGSN_PROC[NUM_SGSN];
+	/* component reference to the component to which we're currently connected */
+	var BSSGP_BVC_CT sgsn_ct[NUM_PCU];
 
 	var BSSGP_ConnHdlrPars g_pars;
 	timer g_Tguard;
@@ -252,6 +259,7 @@
 	OCT4 tlli_old optional,
 	RoutingAreaIdentificationV ra optional,
 	GbInstances pcu,
+	GbInstances sgsn,
 	float t_guard
 };
 
@@ -428,29 +436,50 @@
 		tlli_old := omit,
 		ra := omit,
 		pcu := g_pcu,
+		sgsn := g_sgsn,
 		t_guard := t_guard
 	};
 
 	vc_conn := BSSGP_ConnHdlr.create(id);
-	// PDU side
-	connect(vc_conn:PCU[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP);
-	connect(vc_conn:PCU_SIG[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
-	connect(vc_conn:PCU_PROC[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_PROC);
-	connect(vc_conn:PCU[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP);
-	connect(vc_conn:PCU_SIG[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
-	connect(vc_conn:PCU_PROC[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_PROC);
-	connect(vc_conn:PCU[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP);
-	connect(vc_conn:PCU_SIG[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
-	connect(vc_conn:PCU_PROC[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_PROC);
-	// SGSN side
-	connect(vc_conn:SGSN[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP);
-	connect(vc_conn:SGSN_SIG[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
-	connect(vc_conn:SGSN_PROC[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_PROC);
 
 	vc_conn.start(f_handler_init(fn, id, pars));
 	return vc_conn;
 }
 
+/* Connect the PCU-side per-BVC ports (PCU/PCU_SIG/PCU_PROC) array slot 'port_idx' to specified per-BVC component */
+private function f_connect_to_pcu_bvc(integer port_idx, BSSGP_BVC_CT bvc_ct) runs on BSSGP_ConnHdlr {
+	if (PCU[port_idx].checkstate("Connected")) {
+		/* unregister + disconnect from old BVC */
+		f_client_unregister(g_pars.imsi, PCU_PROC[port_idx]);
+		disconnect(self:PCU[port_idx], pcu_ct[port_idx]:BSSGP_SP);
+		disconnect(self:PCU_SIG[port_idx], pcu_ct[port_idx]:BSSGP_SP_SIG);
+		disconnect(self:PCU_PROC[port_idx], pcu_ct[port_idx]:BSSGP_PROC);
+	}
+	/* connect to new BVC and register us */
+	connect(self:PCU[port_idx], bvc_ct:BSSGP_SP);
+	connect(self:PCU_SIG[port_idx], bvc_ct:BSSGP_SP_SIG);
+	connect(self:PCU_PROC[port_idx], bvc_ct:BSSGP_PROC);
+	f_client_register(g_pars.imsi, g_pars.tlli, PCU_PROC[port_idx]);
+	pcu_ct[port_idx] := bvc_ct;
+}
+
+/* Connect the SGSN-side per-BVC ports (SGSN/SGSN_SIG/SGSN_PROC) array slot 'port_idx' to specified per-BVC component */
+private function f_connect_to_sgsn_bvc(integer port_idx, BSSGP_BVC_CT bvc_ct) runs on BSSGP_ConnHdlr {
+	if (SGSN[port_idx].checkstate("Connected")) {
+		/* unregister + disconnect from old BVC */
+		f_client_unregister(g_pars.imsi, SGSN_PROC[port_idx]);
+		disconnect(self:SGSN[port_idx], sgsn_ct[port_idx]:BSSGP_SP);
+		disconnect(self:SGSN_SIG[port_idx], sgsn_ct[port_idx]:BSSGP_SP_SIG);
+		disconnect(self:SGSN_PROC[port_idx], sgsn_ct[port_idx]:BSSGP_PROC);
+	}
+	/* connect to new BVC and register us */
+	connect(self:SGSN[port_idx], bvc_ct:BSSGP_SP);
+	connect(self:SGSN_SIG[port_idx], bvc_ct:BSSGP_SP_SIG);
+	connect(self:SGSN_PROC[port_idx], bvc_ct:BSSGP_PROC);
+	f_client_register(g_pars.imsi, g_pars.tlli, SGSN_PROC[port_idx]);
+	sgsn_ct[port_idx] := bvc_ct;
+}
+
 private altstep as_Tguard() runs on BSSGP_ConnHdlr {
 	[] g_Tguard.timeout {
 		setverdict(fail, "Tguard timeout");
@@ -467,16 +496,14 @@
 
 	llc := f_llc_create(false);
 
-	/* register for our IMSI + TLLI */
-	for (i := 0; i < sizeof(SGSN_PROC); i := i+1) {
-		if (SGSN_PROC[i].checkstate("Connected")) {
-			f_client_register(g_pars.imsi, g_pars.tlli, SGSN_PROC[i]);
-		}
+	/* default connections on PCU side: First BVC of each NSE/PCU */
+	for (i := 0; i < lengthof(g_pars.pcu); i := i+1) {
+		f_connect_to_pcu_bvc(i, g_pars.pcu[i].vc_BSSGP_BVC[0]);
 	}
-	for (i := 0; i < sizeof(PCU_PROC); i := i+1) {
-		if (PCU_PROC[i].checkstate("Connected")) {
-			f_client_register(g_pars.imsi, g_pars.tlli, PCU_PROC[i]);
-		}
+
+	/* default connections on SGSN side: First BVC of each NSE/SGSN */
+	for (i := 0; i < lengthof(g_pars.sgsn); i := i+1) {
+		f_connect_to_sgsn_bvc(i, g_pars.sgsn[i].vc_BSSGP_BVC[0]);
 	}
 
 	g_Tguard.start(pars.t_guard);
