diff --git a/remsim/RemsimServer_Tests.ttcn b/remsim/RemsimServer_Tests.ttcn
index 135ce15..6d2b27d 100644
--- a/remsim/RemsimServer_Tests.ttcn
+++ b/remsim/RemsimServer_Tests.ttcn
@@ -133,6 +133,44 @@
 	setverdict(pass);
 }
 
+/* duplicate connection from Same Client/Slot ID */
+testcase TC_connect_client_duplicate() runs on test_CT {
+	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, "foobar"));
+	var JsRoot js;
+
+	f_init();
+	f_rsres_init();
+	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
+	rspro[0].rspro_client_slot := valueof(ts_ClientSlot(13,1));
+
+	js := f_rsres_get("/api/backend/v1/clients");
+	if (not match(js.clients, JsClients:{})) {
+		setverdict(fail, "Initial state not empty");
+		mtc.stop;
+	}
+	f_rspro_connect_client(0);
+	js := f_rsres_get("/api/backend/v1/clients");
+	if (not match(js.clients[0], tr_JsClient(CONNECTED_CLIENT, rspro[0].rspro_id))) {
+		setverdict(fail, "Non-matching JSON response");
+		mtc.stop;
+	}
+
+	/* connect a second time for same Client ID */
+	f_rspro_init(rspro[1], mp_server_ip, mp_server_port, rspro_id, 1);
+	rspro[1].rspro_client_slot := valueof(ts_ClientSlot(13,1));
+	f_rspro_connect_client(1, identityInUse);
+	f_rspro_exp_disconnect(1);
+
+	/* expect the first connection still to be active */
+	js := f_rsres_get("/api/backend/v1/clients");
+	if (not match(js.clients[0], tr_JsClient(CONNECTED_CLIENT, rspro[0].rspro_id))) {
+		setverdict(fail, "Non-matching JSON response");
+		mtc.stop;
+	}
+
+	setverdict(pass);
+}
+
 testcase TC_connect_bank() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, "foobar"));
 	var JsRoot js;
@@ -158,6 +196,50 @@
 	setverdict(pass);
 }
 
+testcase TC_connect_bank_duplicate() runs on test_CT {
+	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, "foobar"));
+	var JsRoot js;
+
+	f_init();
+	f_rsres_init();
+	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
+	rspro[0].rspro_bank_id := 1;
+	rspro[0].rspro_bank_nslots := 8;
+
+	js := f_rsres_get("/api/backend/v1/banks");
+	if (not match(js.banks, JsBanks:{})) {
+		setverdict(fail, "Initial state not empty");
+		mtc.stop;
+	}
+	f_rspro_connect_client(0);
+	js := f_rsres_get("/api/backend/v1/banks");
+	if (not match(js.banks[0], tr_JsBank(CONNECTED_BANKD, rspro[0].rspro_id, rspro[0].rspro_bank_id,
+					     rspro[0].rspro_bank_nslots))) {
+		setverdict(fail, "Non-matching JSON response");
+		mtc.stop;
+	}
+
+	/* connect a second time for same Bank ID */
+	f_rspro_init(rspro[1], mp_server_ip, mp_server_port, rspro_id, 1);
+	rspro[1].rspro_bank_id := 1;
+	rspro[1].rspro_bank_nslots := 23;
+	f_rspro_connect_client(1, identityInUse);
+
+	/* expect only the first bank to survive */
+	js := f_rsres_get("/api/backend/v1/banks");
+	if (not match(js.banks[0], tr_JsBank(CONNECTED_BANKD, rspro[0].rspro_id, rspro[0].rspro_bank_id,
+					     rspro[0].rspro_bank_nslots))) {
+		setverdict(fail, "Non-matching JSON response");
+		mtc.stop;
+	}
+
+	/* wait for T2/rejected timer to expire in server */
+	f_sleep(2.0);
+
+	setverdict(pass);
+}
+
+
 function f_ensure_slotmaps(template JsSlotmaps maps)
 runs on http_CT {
 	var JsRoot js;
@@ -508,7 +590,9 @@
 control {
 	execute( TC_connect_and_nothing() );
 	execute( TC_connect_client() );
+	execute( TC_connect_client_duplicate() );
 	execute( TC_connect_bank() );
+	execute( TC_connect_bank_duplicate() );
 	execute( TC_slotmap_add() );
 	execute( TC_slotmap_add_conn_cl_b() );
 	execute( TC_slotmap_add_out_of_range() );
