diff --git a/src/client/simtrace2-remsim_client.c b/src/client/simtrace2-remsim_client.c
index 846ce85..ce8ea1d 100644
--- a/src/client/simtrace2-remsim_client.c
+++ b/src/client/simtrace2-remsim_client.c
@@ -32,6 +32,7 @@
 #include <osmocom/core/utils.h>
 #include <osmocom/core/logging.h>
 #include <osmocom/core/application.h>
+#include <osmocom/core/exec.h>
 
 #include <osmocom/abis/ipa.h>
 #include <osmocom/gsm/protocol/ipaccess.h>
@@ -130,6 +131,77 @@
 	return 0;
 }
 
+/* build the (additional) environment for executing a script */
+static char **build_script_env(struct bankd_client *clnt, const char *cause)
+{
+	struct cardem_inst *ci = clnt->cardem;
+	char **env = talloc_zero_size(clnt, 256*sizeof(char *));
+	int i = 0;
+
+	if (!env)
+		return NULL;
+
+	env[i++] = talloc_asprintf(env, "REMSIM_CLIENT_VERSION=%s", VERSION);
+
+	env[i++] = talloc_asprintf(env, "REMSIM_SERVER_ADDR=%s:%u",
+				   clnt->srv_conn.server_host, clnt->srv_conn.server_port);
+	env[i++] = talloc_asprintf(env, "REMSIM_SERVER_STATE=%s",
+				   osmo_fsm_inst_state_name(clnt->srv_conn.fi));
+
+	env[i++] = talloc_asprintf(env, "REMSIM_BANKD_ADDR=%s:%u",
+				   clnt->bankd_conn.server_host, clnt->bankd_conn.server_port);
+	env[i++] = talloc_asprintf(env, "REMSIM_BANKD_STATE=%s",
+				   osmo_fsm_inst_state_name(clnt->bankd_conn.fi));
+
+
+	if (clnt->srv_conn.clslot) {
+		env[i++] = talloc_asprintf(env, "REMSIM_CLIENT_SLOT=%lu:%lu",
+					   g_client->srv_conn.clslot->clientId,
+					   g_client->srv_conn.clslot->slotNr);
+	}
+	env[i++] = talloc_asprintf(env, "REMSIM_BANKD_SLOT=%u:%u",
+				   clnt->bankd_slot.bank_id, clnt->bankd_slot.slot_nr);
+
+	env[i++] = talloc_asprintf(env, "REMSIM_USB_PATH=%s", ci->usb_path);
+	env[i++] = talloc_asprintf(env, "REMSIM_USB_INTERFACE=%u", clnt->cfg->usb.if_num);
+
+	/* TODO: SIM card state VCC/CLK/RST */
+	env[i++] = talloc_asprintf(env, "REMSIM_SIM_VCC=%u",
+				   !!(ci->last_status.flags & CEMU_STATUS_F_VCC_PRESENT));
+	env[i++] = talloc_asprintf(env, "REMSIM_SIM_RST=%u",
+				   !!(ci->last_status.flags & CEMU_STATUS_F_RESET_ACTIVE));
+
+	env[i++] = talloc_asprintf(env, "REMSIM_CAUSE=%s", cause);
+
+	/* terminate last entry */
+	env[i++] = NULL;
+	return env;
+}
+
+static int call_script(struct bankd_client *clnt, const char *cause)
+{
+	char **env, *cmd;
+	int rc;
+
+	if (!clnt->cfg->event_script)
+		return 0;
+
+	env = build_script_env(clnt, cause);
+	if (!env)
+		return -ENOMEM;
+
+	cmd = talloc_asprintf(env, "%s %s", clnt->cfg->event_script, cause);
+	if (!cmd) {
+		talloc_free(env);
+		return -ENOMEM;
+	}
+
+	rc = osmo_system_nowait(cmd, osmo_environment_whitelist, env);
+	talloc_free(env);
+
+	return rc;
+}
+
 /***********************************************************************
  * SIMTRACE core protocol
  ***********************************************************************/
@@ -548,6 +620,7 @@
 
 	if (ci->last_status.flags != status->flags) {
 		ci->last_status = *status;
+		call_script(g_client, "event-modem-status");
 	} else
 		ci->last_status = *status;
 
@@ -754,6 +827,7 @@
 		/* Store 'identity' of bankd to in peer_comp_id */
 		rspro_comp_id_retrieve(&bankdc->peer_comp_id, &pdu->msg.choice.connectClientRes.identity);
 		osmo_fsm_inst_dispatch(bankdc->fi, SRVC_E_CLIENT_CONN_RES, (void *) pdu);
+		call_script(g_client, "event-bankd-connect");
 		break;
 	case RsproPDUchoice_PR_tpduCardToModem: // APDU response from card received
 		bankd_handle_tpduCardToModem(g_client, pdu);
@@ -780,6 +854,7 @@
 		/* Store 'identity' of server in srvc->peer_comp_id */
 		rspro_comp_id_retrieve(&srvc->peer_comp_id, &pdu->msg.choice.connectClientRes.identity);
 		osmo_fsm_inst_dispatch(srvc->fi, SRVC_E_CLIENT_CONN_RES, (void *) pdu);
+		call_script(g_client, "event-server-connect");
 		break;
 	case RsproPDUchoice_PR_configClientIdReq:
 		/* store/set the clientID as instructed by the server */
@@ -804,6 +879,7 @@
 		/* send response to server */
 		resp = rspro_gen_ConfigClientBankRes(ResultCode_ok);
 		server_conn_send_rspro(srvc, resp);
+		call_script(g_client, "event-config-bankd");
 		break;
 	default:
 		LOGPFSML(srvc->fi, LOGL_ERROR, "Unknown/Unsupported RSPRO PDU type: %s\n",
@@ -847,6 +923,7 @@
 		"\t-A\t--usb-address\tADDRESS\n"
 		"\t-H\t--usb-path\tPATH\n"
 		"\t-a\t--atr\tATR\n"
+		"\t-e\t--event-script\tPATH\n"
 		"\n"
 		);
 }
@@ -898,6 +975,7 @@
 		{ "usb-address", 1, 0, 'A' },
 		{ "usb-path", 1, 0, 'H' },
 		{ "atr", 1, 0, 'a' },
+		{ "event-script", 1, 0, 'e' },
 		{ NULL, 0, 0, 0 }
 	};
 	int c, rc;
@@ -905,7 +983,7 @@
 	while (1) {
 		int option_index = 0;
 
-		c = getopt_long(argc, argv, "s:p:c:n:hvi:kV:P:C:I:S:A:H:a:", opts, &option_index);
+		c = getopt_long(argc, argv, "s:p:c:n:hvi:kV:P:C:I:S:A:H:a:e:", opts, &option_index);
 		if (c == -1)
 			break;
 		switch (c) {
@@ -964,6 +1042,9 @@
 			}
 			cfg->atr.len = rc;
 			break;
+		case 'e':
+			osmo_talloc_replace_string(cfg, &cfg->event_script, optarg);
+			break;
 		}
 	}
 
@@ -1062,9 +1143,11 @@
 
 	/* simulate card-insert to modem (owhw, not qmod) */
 	cardem_request_card_insert(ci, true);
+	call_script(g_client, "request-card-insert");
 
 	/* select remote (forwarded) SIM */
 	st_modem_sim_select_remote(ci->slot);
+	call_script(g_client, "request-sim-remote");
 
 	/* set the ATR */
 	//atr_update_csum(real_atr, sizeof(real_atr));
@@ -1072,6 +1155,7 @@
 
 	/* select remote (forwarded) SIM */
 	st_modem_reset_pulse(ci->slot, 300);
+	call_script(g_client, "request-modem-reset");
 
 	printf("Entering main loop\n");
 
