diff --git a/mme/MME_Tests_SGsAP.ttcn b/mme/MME_Tests_SGsAP.ttcn
index 935a59e..d20479c 100644
--- a/mme/MME_Tests_SGsAP.ttcn
+++ b/mme/MME_Tests_SGsAP.ttcn
@@ -48,23 +48,23 @@
 	if (not istemplatekind(exp_cause, "omit")) {
 		exp_success := false;
 	}
-	SGsAP.send(ts_SGsAP_PAGING_REQ(g_pars.imsi, vlr_name, serv_ind, tmsi));
+	SGsAP.send(ts_SGsAP_PAGING_REQ(g_pars.ue_pars.imsi, vlr_name, serv_ind, tmsi));
 	alt {
 	/* we expect success */
-	[exp_success] SGsAP.receive(tr_SGsAP_SERVICE_REQ(g_pars.imsi, serv_ind, ?)) {
+	[exp_success] SGsAP.receive(tr_SGsAP_SERVICE_REQ(g_pars.ue_pars.imsi, serv_ind, ?)) {
 		setverdict(pass);
 		}
-	[exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.imsi, ?)) {
+	[exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.ue_pars.imsi, ?)) {
 		setverdict(fail, "Received unexpected PAGING REJECT");
 		}
 	/* we expect failure */
-	[not exp_success] SGsAP.receive(tr_SGsAP_SERVICE_REQ(g_pars.imsi, serv_ind, ?)) {
+	[not exp_success] SGsAP.receive(tr_SGsAP_SERVICE_REQ(g_pars.ue_pars.imsi, serv_ind, ?)) {
 		setverdict(fail, "Received SERVICE REQ waiting for PAGING REJECT");
 		}
-	[not exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.imsi, exp_cause)) {
+	[not exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.ue_pars.imsi, exp_cause)) {
 		setverdict(pass);
 		}
-	[not exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.imsi, ?)) {
+	[not exp_success] SGsAP.receive(tr_SGsAP_PAGING_REJ(g_pars.ue_pars.imsi, ?)) {
 		setverdict(fail, "Received unexpected PAGING REJECT cause");
 		}
 	[] SGsAP.receive {
@@ -80,21 +80,21 @@
 	if (not istemplatekind(exp_cause, "omit")) {
 		exp_success := false;
 	}
-	SGsAP.send(ts_SGsAP_ALERT_REQ(g_pars.imsi));
+	SGsAP.send(ts_SGsAP_ALERT_REQ(g_pars.ue_pars.imsi));
 	alt {
-	[exp_success] SGsAP.receive(tr_SGsAP_ALERT_ACK(g_pars.imsi)) {
+	[exp_success] SGsAP.receive(tr_SGsAP_ALERT_ACK(g_pars.ue_pars.imsi)) {
 		setverdict(pass);
 		}
-	[exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.imsi, ?)) -> value rx {
+	[exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.ue_pars.imsi, ?)) -> value rx {
 		setverdict(fail, "Received unexpected ALERT REJECT ", rx);
 		}
-	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_ACK(g_pars.imsi)) {
+	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_ACK(g_pars.ue_pars.imsi)) {
 		setverdict(fail, "Received unexpected ALERT ACK");
 		}
-	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.imsi, exp_cause)) {
+	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.ue_pars.imsi, exp_cause)) {
 		setverdict(pass)
 		}
-	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.imsi, ?)) -> value rx {
+	[not exp_success] SGsAP.receive(tr_SGsAP_ALERT_REJECT(g_pars.ue_pars.imsi, ?)) -> value rx {
 		setverdict(fail, "Received ALERT REJECT with unexpected cause ", rx);
 		}
 	[] SGsAP.receive {
@@ -168,7 +168,7 @@
 	/* TODO: register subscriber on S1 */
 	f_sgsap_alert(omit);
 	/* TOOD: do something on S1 triggering UE ACT IND */
-	SGsAP.receive(tr_SGsAP_UE_ACT_IND(g_pars.imsi));
+	SGsAP.receive(tr_SGsAP_UE_ACT_IND(g_pars.ue_pars.imsi));
 }
 testcase TC_sgsap_alert() runs on MTC_CT {
 	var ConnHdlrPars pars;
