diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index dccfdc3..f40b19e 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -3737,7 +3737,7 @@
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
 	var DchanTuple dt;
-	var PDU_ML3_MS_NW l3 := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010008880018'H))));
+	var PDU_ML3_MS_NW l3 := valueof(ts_PAG_RESP(ts_MI_IMSI_LV('001010008880018'H)));
 	var octetstring rr_pag_resp := enc_PDU_ML3_MS_NW(l3);
 
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
@@ -8621,7 +8621,7 @@
 	f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);
 	f_perform_compl_l3(RSL, RSL_PROC, ts_LU_REQ(LU_Type_IMSI_Attach, valueof(ts_MI_IMSI_LV('001010000000001'H)), '00F110'O) );
 	f_perform_compl_l3(RSL, RSL_PROC, ts_CM_SERV_REQ(CM_TYPE_MO_SMS, valueof(ts_MI_IMSI_LV('001010000000002'H))) );
-	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010000000003'H))) );
+	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(ts_MI_IMSI_LV('001010000000003'H)) );
 	f_perform_compl_l3(RSL, RSL_PROC, ts_ML3_MO_MM_IMSI_DET_Ind(valueof(ts_MI_IMSI_LV('001010000000004'H))) );
 }
 testcase TC_mscpool_L3Compl_on_1_msc() runs on test_CT {
@@ -8674,7 +8674,7 @@
 	var MSC_ConnHdlr vc_conn3;
 	var TestHdlrParams pars3 := f_gen_test_hdlr_pars(bssap_idx := 0);
 	pars3.mscpool.rsl_idx := 2;
-	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010000000003'H))));
+	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_IMSI_LV('001010000000003'H)));
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:new");
@@ -8830,7 +8830,7 @@
 	var TestHdlrParams pars1 := f_gen_test_hdlr_pars(bssap_idx := 0);
 	pars1.mscpool.rsl_idx := 0;
 	/* An NRI that is assigned to an unconnected MSC */
-	pars1.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(512))));
+	pars1.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_TMSI_NRI_LV(512)));
 	vc_conn1 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars1);
 	vc_conn1.done;
 	f_ctrs_msc_add(2, "mscpool:subscr:attach_lost");
@@ -8890,7 +8890,7 @@
 	var TestHdlrParams pars2 := f_gen_test_hdlr_pars(bssap_idx := 1);
 	pars2.mscpool.rsl_idx := 1;
 	/* An NRI of the second MSC's range (256-511) */
-	pars2.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(260))));
+	pars2.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_TMSI_NRI_LV(260)));
 	vc_conn2 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars2);
 	vc_conn2.done;
 	f_ctrs_msc_expect(1, "mscpool:subscr:known");
@@ -8934,7 +8934,7 @@
 	var TestHdlrParams pars2 := f_gen_test_hdlr_pars(bssap_idx := 2);
 	pars2.mscpool.rsl_idx := 1;
 	/* An NRI of the third MSC's range (512-767) */
-	pars2.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(678))));
+	pars2.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_TMSI_NRI_LV(678)));
 	vc_conn2 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars2);
 	vc_conn2.done;
 	f_ctrs_msc_expect(2, "mscpool:subscr:known");
@@ -9010,7 +9010,7 @@
 
 	/* Despite the round robin pointing at the second MSC ('roundrobin next 1'), the earlier Paging for the same IMSI
 	 * causes this Paging Response to go to the first MSC (bssap_idx := 0). */
-	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(valueof(ts_MI_IMSI_LV(imsi))) );
+	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(ts_MI_IMSI_LV(imsi)) );
 	f_sleep(1.0);
 }
 testcase TC_mscpool_paging_and_response_imsi() runs on test_CT {
@@ -9062,7 +9062,7 @@
 	/* Despite the NRI matching the second MSC (NRI from 'msc 1' in osmo-bsc.cfg) and round robin pointing at the
 	 * third MSC ('roundrobin next 2'), the earlier Paging for the same TMSI causes this Paging Response to go to
 	 * the first MSC (bssap_idx := 0). */
-	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(nri_v))) );
+	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(ts_MI_TMSI_NRI_LV(nri_v)) );
 	f_sleep(1.0);
 }
 testcase TC_mscpool_paging_and_response_tmsi() runs on test_CT {
@@ -9121,7 +9121,7 @@
 	var MSC_ConnHdlr vc_conn3;
 	var TestHdlrParams pars3 := f_gen_test_hdlr_pars(bssap_idx := 0);
 	pars3.mscpool.rsl_idx := 2;
-	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010000000003'H))));
+	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_IMSI_LV('001010000000003'H)));
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(0, "mscpool:subscr:new");
@@ -9208,7 +9208,7 @@
 	var MSC_ConnHdlr vc_conn3;
 	var TestHdlrParams pars3 := f_gen_test_hdlr_pars(bssap_idx := 1);
 	pars3.mscpool.rsl_idx := 2;
-	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010000000003'H))));
+	pars3.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_IMSI_LV('001010000000003'H)));
 	vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);
 	vc_conn3.done;
 	f_ctrs_msc_expect(1, "mscpool:subscr:new");
@@ -9254,7 +9254,7 @@
 	var MSC_ConnHdlr vc_conn4;
 	var TestHdlrParams pars4 := f_gen_test_hdlr_pars(bssap_idx := 1);
 	pars4.mscpool.rsl_idx := 2;
-	pars4.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010023000003'H))));
+	pars4.mscpool.l3_info := valueof(ts_PAG_RESP(ts_MI_IMSI_LV('001010023000003'H)));
 	vc_conn4 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars4);
 	vc_conn4.done;
 	f_ctrs_msc_expect(1, "mscpool:subscr:new");
@@ -10354,7 +10354,7 @@
 
 	/* MS requests channel. Since the Paging was for LCS, the Paging Response does not trigger a Complete Layer 3 to
 	 * the MSC, and releases the lchan directly. */
-	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(valueof(ts_MI_IMSI_LV(g_pars.imsi))), do_clear := false, expect_bssmap_l3 := false);
+	f_perform_compl_l3(RSL, RSL_PROC, ts_PAG_RESP(ts_MI_IMSI_LV(g_pars.imsi)), do_clear := false, expect_bssmap_l3 := false);
 	f_expect_lchan_rel(RSL, RSL_PROC);
 
 	/* From the Paging Response, the TA is now known to the BSC, and it responds to the SMLC. */
