diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 343af34..e485868 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -5265,15 +5265,15 @@
 					 boolean skip_final_ctrl_ack := false,
 					 boolean use_old_ctrl_iface := false)
 runs on RAW_PCU_Test_CT {
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var GsmArfcn req_arfcn := 862;
 	var uint6_t req_bsic := 43;
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	if (exp_rac_ci_query == true) {
 		/* osmo-pcu should now ask for resolution: */
@@ -5398,7 +5398,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";
 
 	if (use_old_ctrl_iface) {
@@ -5445,7 +5445,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";
 
 	if (use_old_ctrl_iface) {
@@ -5495,7 +5495,7 @@
 	var PollFnCtx pollctx;
 	var uint32_t sched_fn;
 	var GprsMS ms;
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
 	var GsmArfcn req_arfcn := 862;
 	var uint6_t req_bsic := 43;
@@ -5527,8 +5527,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* Wait until we receive something non-dummy */
 	dl_block := f_skip_dummy(0, sched_fn);
@@ -5551,7 +5551,7 @@
 	var PollFnCtx pollctx;
 	var uint32_t sched_fn;
 	var GprsMS ms;
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
 	var GsmArfcn req_arfcn := 862;
 	var uint6_t req_bsic := 43;
@@ -5584,8 +5584,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	/* we receive RAC+CI resolution request, but we never answer to it, timeout should occur */
@@ -5612,7 +5612,7 @@
 	var PollFnCtx pollctx;
 	var uint32_t sched_fn;
 	var GprsMS ms;
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
 	var GsmArfcn req_arfcn := 862;
 	var uint6_t req_bsic := 43;
@@ -5642,8 +5642,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_ipa_ctrl_wait_link_up();
@@ -5676,7 +5676,7 @@
 	var PollFnCtx pollctx;
 	var uint32_t sched_fn;
 	var GprsMS ms;
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
 	var GsmArfcn req_arfcn := 862;
 	var uint6_t req_bsic := 43;
@@ -5709,8 +5709,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -5739,7 +5739,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -5776,8 +5776,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	if (use_old_ctrl_iface) {
@@ -5787,7 +5787,7 @@
 	}
 
 	/* Before receiving CTRL response, MS retransmits Pkt cell Chg Notif */
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 	f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */
 
 	if (use_old_ctrl_iface) {
@@ -5836,7 +5836,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -5871,14 +5871,14 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
 	as_outbound_nacc_rim_resolve(info_ind, do_answer := false);
 	/* Before receiving RIM response, MS retransmits Pkt cell Chg Notif */
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 	f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */
 	f_outbound_nacc_rim_tx_resp(info_ind);
 	timer T := 1.0;
@@ -5916,7 +5916,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -5951,8 +5951,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -5961,7 +5961,7 @@
 
 	/* Receive first Pkt Neigh data Change, then trigger a new Pkt Cell Change Notif: */
 	f_ms_handle_pkt_neighbor_cell_data(ms, si_default, single_step := true);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* It should be ignored, let's continue fetching Pkt Neigh Data Change */
 	f_ms_handle_pkt_neighbor_cell_data(ms, si_default, f_ms_tx_TsTrxBtsNum(ms), 1, 16);
@@ -5986,7 +5986,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6021,8 +6021,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -6033,7 +6033,7 @@
 	f_ms_handle_pkt_neighbor_cell_data(ms, si_default);
 
 	/* trigger a dup Pkt Cell Change Notif, it should be ignored: */
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* Obtain a Downlink block and make sure it is a Pkt Cell Chg Continue */
 	f_rx_rlcmac_dl_block(dl_block, sched_fn);
@@ -6055,7 +6055,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6090,8 +6090,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -6108,7 +6108,7 @@
 		f_shutdown(__BFILE__, __LINE__);
 	}
 	/* trigger a dup Pkt Cell Change Notif, it should be ignored: */
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* PKT CELL CHG CONTINUE ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */
 	if (dl_block.ctrl.mac_hdr.rrbp_valid) {
@@ -6125,7 +6125,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6162,8 +6162,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	if (use_old_ctrl_iface) {
@@ -6172,8 +6172,8 @@
 		f_pcuif_rx_nacc_rac_ci_req(pcu_msg, info_ind, req_arfcn, req_bsic);
 	}
 	/* Before receiving CTRL response, MS retransmits Pkt cell Chg Notif with different tgt arfcn */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 	f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */
 	if (use_old_ctrl_iface) {
 		f_ctrl_tx_nacc_rac_ci_rsp(rx_ctrl);
@@ -6210,7 +6210,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6245,15 +6245,15 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
 	as_outbound_nacc_rim_resolve(info_ind, do_answer := false);
 	/* Before receiving RIM response, MS retransmits Pkt cell Chg Notif with different tgt cell: */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 	f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */
 	f_outbound_nacc_rim_tx_resp(info_ind);
 
@@ -6287,7 +6287,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6322,8 +6322,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -6332,8 +6332,8 @@
 
 	/* Receive first Pkt Neigh data Change, then trigger a new Pkt Cell Change Notif (different ARFCN+BSIC): */
 	f_ms_handle_pkt_neighbor_cell_data(ms, si_default, single_step := true);
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* It should trigger RAC_CI resolution to start again: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);
@@ -6362,7 +6362,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6397,8 +6397,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -6409,8 +6409,8 @@
 	f_ms_handle_pkt_neighbor_cell_data(ms, si_default);
 
 	/* trigger a Pkt Cell Change Notif with different tgt cell */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* It should trigger RAC_CI resolution to start again: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);
@@ -6443,7 +6443,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn;
 	var CtrlMessage rx_ctrl;
@@ -6478,8 +6478,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
@@ -6497,8 +6497,8 @@
 	}
 
 	/* trigger a Pkt Cell Change Notif with different tgt cell */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* It should trigger RAC_CI resolution to start again: */
 	/* When using new PCUIF interface for resolution, we must
@@ -6551,7 +6551,7 @@
 	var PollFnCtx pollctx;
 	var GprsMS ms;
 	var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
-	var template (value) RlcmacUlCtrlMsg cell_chf_notif;
+	var template (value) RlcmacUlCtrlMsg cell_chg_notif;
 	var RlcmacDlBlock dl_block;
 	var uint32_t sched_fn, dl_fn;
 	var CtrlMessage rx_ctrl;
@@ -6587,8 +6587,8 @@
 	f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
 
 	/* Start NACC from MS side */
-	cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
-	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+	cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);
+	f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
 
 	/* osmo-pcu should now ask for resolution: */
 	f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);
