diff --git a/remsim/RemsimClient_Tests.ttcn b/remsim/RemsimClient_Tests.ttcn
new file mode 100644
index 0000000..d5520ab
--- /dev/null
+++ b/remsim/RemsimClient_Tests.ttcn
@@ -0,0 +1,118 @@
+module RemsimClient_Tests {
+
+/* Integration Tests for osmo-remsim-client
+ * (C) 2019 by Harald Welte <laforge@gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This test suite tests osmo-remsim-client by attaching to the external interfaces.
+ */
+
+import from Osmocom_Types all;
+import from IPA_Emulation all;
+
+import from RSPRO all;
+import from RSPRO_Types all;
+import from RSPRO_Server all;
+import from REMSIM_Tests all;
+
+type component client_test_CT extends rspro_server_CT {
+	var ComponentIdentity g_srv_comp_id, g_bankd_comp_id;
+};
+
+private function f_init() runs on client_test_CT {
+	g_srv_comp_id := valueof(ts_CompId(remsimServer, "ttcn-server"));
+	g_bankd_comp_id := valueof(ts_CompId(remsimBankd, "ttcn-bankd"));
+
+	f_rspro_srv_init(0, mp_server_ip, mp_server_port, g_srv_comp_id);
+	f_rspro_srv_init(1, mp_bankd_ip, mp_bankd_port, g_bankd_comp_id, exp_connect := false);
+}
+
+
+/* ConnectClientReq from client to remsim-server */
+testcase TC_srv_connectClient() runs on client_test_CT {
+	f_init();
+	as_connectClientReq();
+	setverdict(pass);
+	f_sleep(1.0);
+}
+
+/* ConnectClientReq from client to remsim-server */
+testcase TC_srv_connectClient_reject() runs on client_test_CT {
+	f_init();
+	as_connectClientReq(res := illegalClientId);
+	/* expect disconnect by client */
+	RSPRO_SRV[0].receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_DOWN));
+	setverdict(pass);
+	f_sleep(1.0);
+}
+
+/* ConnectClientReq from client to remsim-server */
+testcase TC_srv_connectClient_configClientBank() runs on client_test_CT {
+	var BankSlot bslot := { 1, 0 };
+	f_init();
+	as_connectClientReq();
+	f_rspro_config_client_bank(bslot, ts_IpPort(ts_IPv4(mp_bankd_ip), mp_bankd_port));
+	f_rspro_srv_exp_connect(1);
+	as_connectClientReq(i := 1);
+	setverdict(pass);
+	f_sleep(1.0);
+}
+
+/* Test if client re-connects to server after connection is lost */
+testcase TC_srv_reconnect() runs on client_test_CT {
+	var BankSlot bslot := { 1, 0 };
+	f_init();
+	as_connectClientReq();
+
+	/* disconnect the client from server and expect re-establish + re-connect */
+	f_rspro_srv_fini(0);
+	f_rspro_srv_init(0, mp_server_ip, mp_server_port, g_srv_comp_id, exp_connect := true);
+	as_connectClientReq(i := 0);
+
+	setverdict(pass);
+	f_sleep(1.0);
+}
+
+/* Test if client re-connects to bank after connection is lost */
+testcase TC_bank_reconnect() runs on client_test_CT {
+	var BankSlot bslot := { 1, 0 };
+	f_init();
+	as_connectClientReq();
+	f_rspro_config_client_bank(bslot, ts_IpPort(ts_IPv4(mp_bankd_ip), mp_bankd_port));
+	f_rspro_srv_exp_connect(1);
+	as_connectClientReq(i := 1);
+
+	/* disconnect the client from bankd and expect re-establish + re-connect */
+	f_rspro_srv_fini(1);
+	f_rspro_srv_init(1, mp_bankd_ip, mp_bankd_port, g_bankd_comp_id, exp_connect := true);
+	as_connectClientReq(i := 1);
+
+	setverdict(pass);
+	f_sleep(1.0);
+}
+
+/* TODO:
+   * send a configClientBankIpReq and change the bank of an active client
+   * send a configClientBankSlotReq and chagne the bank slot of an active client
+   * test keepalive mechanism: do we get IPA PING?
+   * test keepalive mechanism: do we see disconnect+reconnect if we don't respond to IPA PING?
+   * test actual APDU transfers
+   * test messages in invalid state, e.g. APDUs before we're connected to a bank
+   * test messages on server connection which are only permitted on bankd connection
+ */
+
+control {
+	execute( TC_srv_connectClient() );
+	execute( TC_srv_connectClient_reject() );
+	execute( TC_srv_connectClient_configClientBank() );
+	execute( TC_srv_reconnect() );
+	execute( TC_bank_reconnect() );
+}
+
+
+}
