diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 10e98a8..d96767a 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -2362,44 +2362,44 @@
 	f_cleanup();
 }
 
-friend function f_routing_area_update(RoutingAreaIdentificationV ra, integer bssgp := 0) runs on BSSGP_ConnHdlr {
+friend function f_routing_area_update(RoutingAreaIdentificationV ra, integer ran_index := 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)) {
+	if (is_iu(ran_index)) {
 		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, p_tmsi), bssgp);
+	f_send_l3(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, g_pars.ra, false, omit, omit, p_tmsi), ran_index);
 	alt {
-	[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);
+	[is_gb(ran_index)] BSSGP[ran_index].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {
+		f_process_rau_accept(l3_mt.msgs.gprs_mm.routingAreaUpdateAccept, ran_index);
+		f_send_l3(ts_GMM_RAU_COMPL, ran_index);
 		setverdict(pass);
 		}
-	[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);
+	[is_iu(ran_index)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_ACCEPT)) -> value mt {
+		f_process_rau_accept(mt.dtap.msgs.gprs_mm.routingAreaUpdateAccept, ran_index);
+		f_send_l3(ts_GMM_RAU_COMPL, ran_index);
 		setverdict(pass);
 		}
 
-	[is_gb(bssgp)] BSSGP[bssgp].receive(tr_GMM_RAU_REJECT) {
+	[is_gb(ran_index)] BSSGP[ran_index].receive(tr_GMM_RAU_REJECT) {
 		setverdict(fail, "Unexpected RAU Reject");
 		mtc.stop;
 		}
-	[is_iu(bssgp)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_REJECT)) {
+	[is_iu(ran_index)] 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),
+	[is_iu(ran_index)] 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; }
+	[is_gb(ran_index)] BSSGP[ran_index].receive { repeat; }
+	[is_iu(ran_index)] BSSAP.receive { repeat; }
 	}
 }
 
diff --git a/sgsn/SGSN_Tests_Iu.ttcn b/sgsn/SGSN_Tests_Iu.ttcn
index 472774e..786961f 100644
--- a/sgsn/SGSN_Tests_Iu.ttcn
+++ b/sgsn/SGSN_Tests_Iu.ttcn
@@ -66,7 +66,7 @@
 	f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 0);
 
 	/* do a routing area update */
-	f_routing_area_update(g_pars.ra, bssgp := 3);
+	f_routing_area_update(g_pars.ra, ran_index := 3);
 	setverdict(pass);
 }
 
