diff --git a/library/RAN_Emulation.ttcnpp b/library/RAN_Emulation.ttcnpp
index 891de09..b54d6e4 100644
--- a/library/RAN_Emulation.ttcnpp
+++ b/library/RAN_Emulation.ttcnpp
@@ -1444,8 +1444,17 @@
 }
 
 /* helper function for clients to register their IMSI/TMSI */
-function f_ran_register_imsi(hexstring imsi, OCT4 tmsi)
+function f_ran_register_imsi(hexstring imsi, template (omit) OCT4 tmsi_or_omit)
 runs on RAN_ConnHdlr {
+	var OCT4 tmsi;
+
+	/* Resolve omit to a special reserved value */
+	if (istemplatekind(tmsi_or_omit, "omit")) {
+		tmsi := 'FFFFFFFF'O;
+	} else {
+		tmsi := valueof(tmsi_or_omit);
+	}
+
 	BSSAP_PROC.call(RAN_register_imsi:{imsi, tmsi, self}) {
 		[] BSSAP_PROC.getreply(RAN_register_imsi:{?,?,?}) {};
 	}
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 529a396..f7df81a 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -1345,15 +1345,9 @@
 private function f_mt_call_start(inout CallParameters cpars) runs on BSC_ConnHdlr {
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
-	var OCT4 tmsi;
 
 	f_perform_lu();
-	if (isvalue(g_pars.tmsi)) {
-		tmsi := g_pars.tmsi;
-	} else {
-		tmsi := 'FFFFFFFF'O;
-	}
-	f_ran_register_imsi(g_pars.imsi, tmsi);
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	/* Allocate call reference and send SETUP via MNCC to MSC */
 	cpars.mncc_callref := f_rnd_int(2147483648);
@@ -1914,7 +1908,6 @@
 /* LU followed by MT SMS */
 friend function f_tc_lu_and_mt_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
 	var SmsParameters spars := valueof(t_SmsPars);
-	var OCT4 tmsi;
 
 	f_init_handler(pars);
 
@@ -1922,12 +1915,7 @@
 	f_perform_lu();
 
 	/* register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		tmsi := g_pars.tmsi;
-	} else {
-		tmsi := 'FFFFFFFF'O;
-	}
-	f_ran_register_imsi(g_pars.imsi, tmsi);
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");
 
@@ -1955,19 +1943,14 @@
 /* Paging for MT SMS but no response */
 friend function f_tc_lu_and_mt_sms_paging_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
 	var SmsParameters spars := valueof(t_SmsPars);
-	var OCT4 tmsi;
+
 	f_init_handler(pars, 150.0);
 
 	/* Perform location update */
 	f_perform_lu();
 
 	/* register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		tmsi := g_pars.tmsi;
-	} else {
-		tmsi := 'FFFFFFFF'O;
-	}
-	f_ran_register_imsi(g_pars.imsi, tmsi);
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");
 
@@ -2013,7 +1996,6 @@
 /* LU followed by MT SMS with repeated paging */
 friend function f_tc_lu_and_mt_sms_paging_repeated(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
 	var SmsParameters spars := valueof(t_SmsPars);
-	var OCT4 tmsi;
 
 	f_init_handler(pars);
 
@@ -2021,12 +2003,7 @@
 	f_perform_lu();
 
 	/* register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		tmsi := g_pars.tmsi;
-	} else {
-		tmsi := 'FFFFFFFF'O;
-	}
-	f_ran_register_imsi(g_pars.imsi, tmsi);
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");
 
@@ -2310,11 +2287,7 @@
 	f_perform_lu();
 
 	/* Register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
-	} else {
-		f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
-	}
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	var template GSUP_PDU mt_forwardSM_res := tr_GSUP_MT_FORWARD_SM_RES(
 		imsi := g_pars.imsi,
@@ -2375,11 +2348,7 @@
 	f_perform_lu();
 
 	/* Register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
-	} else {
-		f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
-	}
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	var template GSUP_PDU mt_forwardSM_err := tr_GSUP_MT_FORWARD_SM_ERR(
 		imsi := g_pars.imsi,
@@ -2442,11 +2411,7 @@
 	f_perform_lu();
 
 	/* Register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
-	} else {
-		f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
-	}
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	/* Submit the 1st MT SMS on GSUP */
 	log("TX MT-forwardSM-Req for the 1st SMS");
@@ -2555,11 +2520,7 @@
 	f_perform_lu();
 
 	/* Register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
-	} else {
-		f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
-	}
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	/* Send CM Service Request for MO SMMA */
 	f_establish_fully(EST_TYPE_MO_SMS);
@@ -2659,11 +2620,7 @@
 	f_perform_lu();
 
 	/* Register an 'expect' for given IMSI (+TMSI) */
-	if (isvalue(g_pars.tmsi)) {
-		f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
-	} else {
-		f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
-	}
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	var template GSUP_PDU mt_forwardSM_res := tr_GSUP_MT_FORWARD_SM_RES(
 		imsi := g_pars.imsi,
@@ -2811,13 +2768,7 @@
 	SMPP.receive(tr_SMPP(c_SMPP_command_id_alert_notification, ESME_ROK));
 
 	/* register an 'expect' for given IMSI (+TMSI) */
-	var OCT4 tmsi;
-	if (isvalue(g_pars.tmsi)) {
-		tmsi := g_pars.tmsi;
-	} else {
-		tmsi := 'FFFFFFFF'O;
-	}
-	f_ran_register_imsi(g_pars.imsi, tmsi);
+	f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
 
 	var SmsParameters spars := valueof(t_SmsPars);
 	/* TODO: test with more intelligent user data; test different coding schemes */
