diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 501bec8..6de9987 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -2360,22 +2360,44 @@
 	f_cleanup();
 }
 
-private function f_routing_area_update(RoutingAreaIdentificationV ra, integer bssgp := 0) runs on BSSGP_ConnHdlr {
+friend function f_routing_area_update(RoutingAreaIdentificationV ra, integer bssgp := 0) runs on BSSGP_ConnHdlr {
 	var PDU_L3_SGSN_MS l3_mt;
+	var PDU_DTAP_PS_MT mt;
+	var template OCT4 p_tmsi := omit;
 
+	if (is_iu(bssgp)) {
+		p_tmsi := g_pars.p_tmsi;
+	}
 	/* then send RAU */
-	f_send_l3(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, g_pars.ra, false, omit, omit), bssgp);
+	f_send_l3(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, g_pars.ra, false, omit, omit, p_tmsi), bssgp);
 	alt {
-	[] BSSGP[bssgp].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {
+	[is_gb(bssgp)] BSSGP[bssgp].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {
 		f_process_rau_accept(l3_mt.msgs.gprs_mm.routingAreaUpdateAccept, bssgp);
 		f_send_l3(ts_GMM_RAU_COMPL, bssgp);
 		setverdict(pass);
 		}
-	[] BSSGP[bssgp].receive(tr_GMM_RAU_REJECT) {
+	[is_iu(bssgp)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_ACCEPT)) -> value mt {
+		f_process_rau_accept(mt.dtap.msgs.gprs_mm.routingAreaUpdateAccept, bssgp);
+		f_send_l3(ts_GMM_RAU_COMPL, bssgp);
+		setverdict(pass);
+		}
+
+	[is_gb(bssgp)] BSSGP[bssgp].receive(tr_GMM_RAU_REJECT) {
 		setverdict(fail, "Unexpected RAU Reject");
 		mtc.stop;
 		}
-	[] BSSGP[bssgp].receive { repeat; }
+	[is_iu(bssgp)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_REJECT)) {
+		setverdict(fail, "Unexpected RAU Reject");
+		mtc.stop;
+		}
+
+	[is_iu(bssgp)] BSSAP.receive(tr_RANAP_SecurityModeCmd(uia_algs := ?, uia_key := oct2bit(g_pars.vec.ik),
+								key_sts := ?)) {
+			var IntegrityProtectionAlgorithm uia_chosen := 0; /* 0 = standard_UMTS_integrity_algorithm_UIA1 */
+			BSSAP.send(ts_RANAP_SecurityModeComplete(uia_chosen));
+		}
+	[is_gb(bssgp)] BSSGP[bssgp].receive { repeat; }
+	[is_iu(bssgp)] BSSAP.receive { repeat; }
 	}
 }
 
