diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 501b3e9..de5b390 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -115,6 +115,8 @@
 private const RSL_IE_Body c_mr_conf_5_90 :=
 	valueof(RSL_IE_Body:{multirate_cfg := ts_RSL_MultirateCfg(true, 0, '00000100'B /* 5,90k */)});
 
+friend const octetstring c_l3_payload := '00010203040506'O;
+
 /* per-BTS state which we keep */
 type record BTS_State {
 	/* component reference to the IPA_Client component used for RSL */
@@ -1521,10 +1523,9 @@
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
 	var RslChannelNr chan_nr := f_chreq_act_ack();
 
-	var octetstring l3 := '00010203040506'O
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3)));
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload)));
 
 	/* expect BSC to disable the channel again if there's no response from MSC */
 	/* MS waits 20s (T3210) at LU; 10s (T3230) at CM SERV REQ and 5s (T3220) AT detach */
@@ -1542,10 +1543,9 @@
 	/* Send CHAN RQD and wait for allocation; acknowledge it */
 	var RslChannelNr chan_nr := f_chreq_act_ack();
 
-	var octetstring l3 := '00010203040506'O
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	BSSAP.send(ts_BSSAP_DISC_req(rx_c_ind.connectionId, 0));
 
 	/* expect BSC to disable the channel */
@@ -1680,7 +1680,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00000000'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 	if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {
 		/* send assignment without AoIP IEs */
 		BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_AssignmentReq(ts_BSSMAP_IE_CIC(0, 1))));
@@ -1806,7 +1806,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00000000'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 	/* send assignment without AoIP IEs */
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ass_cmd));
 	alt {
@@ -1946,7 +1946,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* simulate RLL REL IND */
 	f_ipa_tx(ts_RSL_REL_IND(dt.rsl_chan_nr, valueof(ts_RslLinkID_DCCH(0))));
@@ -1974,7 +1974,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* Sending CONN FAIL IND immediately may trigger a race condition.
 	 * Give the BSC some time to process a new SCCP connection (OS#5823). */
@@ -2031,7 +2031,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* BSC<-MSC: Instruct BSC to clear connection */
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(0)));
@@ -2198,7 +2198,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* Instruct BSC to clear channel */
 	var BssmapCause cause := 0;
@@ -2220,7 +2220,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 	/* Send CommonID with some random PLMN (BSC doesn't take it into account
 	/* yet when generating the EUTRAN neigh list in RR CHannel Release) */
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_CommonId('001019876543210'H, '323454'O)));
@@ -2276,7 +2276,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* Instruct BSC to clear channel */
 	var BssmapCause cause := 0;
@@ -2298,7 +2298,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* release the SCCP connection */
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
@@ -2313,7 +2313,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* release the SCCP connection */
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
@@ -2328,7 +2328,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
 	IPA_RSL[0][0].clear;
@@ -2356,7 +2356,7 @@
 
 	f_init(1);
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 	f_expect_chan_rel(dt.rsl_chan_nr, expect_rll_rel_req := false);
 	f_shutdown_helper();
 }
@@ -2367,7 +2367,7 @@
 {
 	var DchanTuple dt;
 
-	dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	dt := f_est_dchan('23'O, 23, c_l3_payload);
 	var BssmapCause cause := 0;
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(enum2int(clear_cmd_cause))));
 	BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete)) {
@@ -2397,13 +2397,12 @@
 
 	f_init(1);
 
-	var octetstring l3 := '00010203040506'O;
 	var RslChannelNr chan_nr := valueof(t_RslChanNr_Bm(6));
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	T.start;
 	alt {
-	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) {
 		setverdict(fail, "MSC received COMPL L3 for non-active lchan");
 		}
 	[] BSSAP.receive {}
@@ -2422,13 +2421,12 @@
 
 	chan_nr := f_chreq_act_ack()
 
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(1)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(1)), c_l3_payload));
 
 	timer T := 2.0;
 	T.start;
 	alt {
-	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) {
 		setverdict(fail, "MSC received COMPL L3 for invalid SAPI 1");
 		}
 	[] BSSAP.receive { repeat; }
@@ -2447,12 +2445,11 @@
 
 	var RslChannelNr chan_nr := f_chreq_act_ack();
 
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(3)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(3)), c_l3_payload));
 
 	T.start;
 	alt {
-	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) {
 		setverdict(fail, "MSC received COMPL L3 for invalid SAPI 3");
 		}
 	[] BSSAP.receive { repeat; }
@@ -2471,12 +2468,11 @@
 
 	var RslChannelNr chan_nr := f_chreq_act_ack();
 
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_SACCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_SACCH(0)), c_l3_payload));
 
 	T.start;
 	alt {
-	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) {
 		setverdict(fail, "MSC received COMPL L3 for invalid Link SACCH");
 		}
 	[] BSSAP.receive { repeat; }
@@ -2741,7 +2737,7 @@
 		var BSSAP_N_DATA_ind rx_di;
 		var DchanTuple dt;
 
-		dt := f_est_dchan('23'O, 23, '00010203040506'O);
+		dt := f_est_dchan('23'O, 23, c_l3_payload);
 		/* Send CommonID with some random PLMN (BSC doesn't take it into account
 		 * yet when generating the EUTRAN neigh list in RR CHannel Release) */
 		BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_CommonId('001019876543210'H, '323454'O)));
@@ -7555,7 +7551,7 @@
 		/* Setup a BSSAP connection and clear it right away. This is
 		 * the MSC telling the BSC about a planned release, it's not an
 		 * erratic loss of a connection. */
-		dt := f_est_dchan(int2oct(i,1), 23+i, '00010203040506'O);
+		dt := f_est_dchan(int2oct(i,1), 23+i, c_l3_payload);
 
 		/* MSC disconnects (RLSD). */
 		BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
@@ -7599,7 +7595,7 @@
 		/* Setup a BSSAP connection and clear it right away. This is
 		 * the MSC telling the BSC about a planned release, it's not an
 		 * erratic loss of a connection. */
-		dt := f_est_dchan(int2oct(i,1), 23+i, '00010203040506'O);
+		dt := f_est_dchan(int2oct(i,1), 23+i, c_l3_payload);
 
 		/* Instruct BSC to clear channel */
 		BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
@@ -7645,7 +7641,7 @@
 		/* Setup a BSSAP connection and clear it right away. This is
 		 * the MSC telling the BSC about a planned release, it's not an
 		 * erratic loss of a connection. */
-		dt := f_est_dchan('23'O, 23, '00010203040506'O);
+		dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 		/* simulate RLL REL IND */
 		f_ipa_tx(ts_RSL_REL_IND(dt.rsl_chan_nr, valueof(ts_RslLinkID_DCCH(0))));
@@ -7959,7 +7955,7 @@
 	var DchanTuples sdcch_cleanup := {};
 	var integer i;
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i + 1) {
-		dt := f_est_dchan('23'O, i, '00010203040506'O);
+		dt := f_est_dchan('23'O, i, c_l3_payload);
 		sdcch_cleanup := sdcch_cleanup & { dt };
 	}
 
@@ -8036,14 +8032,14 @@
 	 */
 	var DchanTuples chan_cleanup := {};
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* Only the dyn TS is still available. Its first lchan gets converted to SDCCH8 */
-	chan_cleanup := chan_cleanup & { f_est_dchan_dyn('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+	chan_cleanup := chan_cleanup & { f_est_dchan_dyn('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	/* Also occupy the seven other SDCCH of the dyn TS */
 	for (i := 0; i < 7; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* Clean up SDCCH lchans */
@@ -8097,7 +8093,7 @@
 	var DchanTuples chan_cleanup := {};
 	var OCT1 ra := '43'O; /* RA containing reason=originating speech call*/
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i + 1) {
-		dt := f_est_dchan(ra, i, '00010203040506'O);
+		dt := f_est_dchan(ra, i, c_l3_payload);
 		chan_cleanup := chan_cleanup & { dt };
 	}
 
@@ -8175,7 +8171,7 @@
 	var DchanTuples chan_cleanup := {};
 	var integer i;
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i + 1) {
-		dt := f_est_dchan('23'O, i, '00010203040506'O);
+		dt := f_est_dchan('23'O, i, c_l3_payload);
 		chan_cleanup := chan_cleanup & { dt };
 	}
 
@@ -9234,12 +9230,11 @@
 
 	/* Send EST IND for the first TCH, so we get to test the RR release cause */
 	var RslChannelNr first_tch := valueof(t_RslChanNr_Bm(1));
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(first_tch, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(first_tch, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	/* Accept BSSAP conn, so we get to test the Clear Request cause */
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	var integer sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11063,11 +11058,10 @@
 			 chan_ident_ie.chan_ident.ch_desc.v.tsc);
 
 	/* Check that the lchan is working */
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	dt.sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11111,11 +11105,10 @@
 	f_ipa_tx(ts_RSL_CHAN_ACT_ACK(chan_nr, fn+10));
 
 	/* Check that the lchan is working */
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	dt.sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11159,11 +11152,10 @@
 	f_ipa_tx(ts_RSL_CHAN_ACT_ACK(chan_nr, fn+10));
 
 	/* Check that the lchan is working */
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	dt.sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11228,11 +11220,10 @@
 	f_ipa_tx(ts_RSL_CHAN_ACT_ACK(chan_nr, fn+10));
 
 	/* Check that the lchan is working */
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	dt.sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11301,11 +11292,10 @@
 			 chan_ident_ie.chan_ident.ch_desc.v.tsc);
 
 	/* Check that the lchan is working */
-	var octetstring l3 := '00010203040506'O;
-	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+	f_ipa_tx(ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 
 	var BSSAP_N_CONNECT_ind rx_c_ind;
-	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
+	BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(c_l3_payload))) -> value rx_c_ind;
 	dt.sccp_conn_id := rx_c_ind.connectionId;
 	BSSAP.send(ts_BSSAP_CONNECT_res(rx_c_ind.connectionId));
 
@@ -11581,7 +11571,7 @@
 	 */
 	var DchanTuples chan_cleanup := {};
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* Since only bts 0 is connected, expecting all_allocated to become true for both bts 0 and the "global" bsc
@@ -11591,7 +11581,7 @@
 
 	/* Also fill up all remaining (TCH) channels */
 	for (i := 0; i < NUM_TCHF_PER_BTS + NUM_TCHH_PER_BTS; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* All TCH are now also occupied */
@@ -11631,7 +11621,7 @@
 	 */
 	var DchanTuples chan_cleanup := {};
 	for (i := 0; i < NUM_SDCCH_PER_BTS; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* The static SDCCH should now be occupied, while still 3x8 dynamic SDCCH potentially remain. So only
@@ -11641,11 +11631,11 @@
 	/* Request more SDCCH, hence convert the first dyn TS to SDCCH8.
 	 * Will release them later, so remember all the DchanTuples. */
 	var DchanTuples dyn_sddch := {};
-	dyn_sddch := dyn_sddch & { f_est_dchan_dyn('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+	dyn_sddch := dyn_sddch & { f_est_dchan_dyn('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 
 	/* Also occupy the seven other SDCCH of the dyn TS */
 	for (i := 0; i < 7; i := i+1) {
-		dyn_sddch := dyn_sddch & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		dyn_sddch := dyn_sddch & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* Now all dynamic SDCCH are also occupied, so for the first time all_allocated:sdcch will trigger... */
@@ -11653,7 +11643,7 @@
 
 	/* occupy the remaining TCH, three TCH/F and two TCH/H lchans */
 	for (i := 0; i < 5; i := i+1) {
-		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O) };
+		chan_cleanup := chan_cleanup & { f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, c_l3_payload) };
 	}
 
 	/* All TCH lchans are now also occupied, both static and dynamic */
@@ -11727,7 +11717,7 @@
 
 	/* Expect the BSC to allocate 4 x TCH/F channels on BTS2/TRX0 */
 	for (var integer i := 0; i < 4; i := i + 1) {
-		var DchanTuple dt := f_est_dchan('23'O, 23, '00000000'O, {2, 0});
+		var DchanTuple dt := f_est_dchan('23'O, 23, c_l3_payload, {2, 0});
 		f_TC_chan_alloc_algo(dt, {2, 0});
 		f_perform_clear_test_ct(dt);
 	}
@@ -11750,7 +11740,7 @@
 
 	/* Expect the BSC to allocate 5 x TCH/F channels on BTS2/TRX3 */
 	for (var integer i := 0; i < 5; i := i + 1) {
-		var DchanTuple dt := f_est_dchan('23'O, 23, '00000000'O, {2, 0});
+		var DchanTuple dt := f_est_dchan('23'O, 23, c_l3_payload, {2, 0});
 		f_TC_chan_alloc_algo(dt, {2, 3});
 		f_perform_clear_test_ct(dt);
 	}
@@ -11779,12 +11769,12 @@
 	var DchanTuple dt;
 
 	f_logp(BSCVTY, "Case a) Unknown Uplink RxLev, fall-back to ascending");
-	dt := f_est_dchan('23'O, 23, '00000000'O, TRX0);
+	dt := f_est_dchan('23'O, 23, c_l3_payload, TRX0);
 	f_TC_chan_alloc_algo(dt, TRX0);
 	f_perform_clear_test_ct(dt);
 
 	f_logp(BSCVTY, "Case b) Not enough RxLev samples, use ascending");
-	dt := f_est_dchan('23'O, 23, '00000000'O, TRX0);
+	dt := f_est_dchan('23'O, 23, c_l3_payload, TRX0);
 	f_ipa_tx(ts_RSL_MEAS_RES_EMPTY(dt.rsl_chan_nr, 0,
 				       ts_RSL_IE_UplinkMeas(30, 0),
 				       ts_RSL_IE_BS_Power(0)), TRX0);
@@ -11793,7 +11783,7 @@
 	f_perform_clear_test_ct(dt);
 
 	f_logp(BSCVTY, "Case c) Uplink RxLev below the threshold, use ascending");
-	dt := f_est_dchan('23'O, 23, '00000000'O, TRX0);
+	dt := f_est_dchan('23'O, 23, c_l3_payload, TRX0);
 	f_ipa_tx(ts_RSL_MEAS_RES_EMPTY(dt.rsl_chan_nr, 0,
 				       ts_RSL_IE_UplinkMeas(45, 0),
 				       ts_RSL_IE_BS_Power(0)), TRX0);
@@ -11805,7 +11795,7 @@
 	f_perform_clear_test_ct(dt);
 
 	f_logp(BSCVTY, "Case d) Uplink RxLev above the threshold, use descending");
-	dt := f_est_dchan('23'O, 23, '00000000'O, TRX0);
+	dt := f_est_dchan('23'O, 23, c_l3_payload, TRX0);
 	f_ipa_tx(ts_RSL_MEAS_RES_EMPTY(dt.rsl_chan_nr, 0,
 				       ts_RSL_IE_UplinkMeas(50, 0),
 				       ts_RSL_IE_BS_Power(0)), TRX0);
@@ -11821,7 +11811,7 @@
 	f_vty_transceive(BSCVTY, "end");
 
 	f_logp(BSCVTY, "Case e) Uplink RxLev above the threshold, but C0 load is not");
-	dt := f_est_dchan('23'O, 23, '00000000'O, TRX0);
+	dt := f_est_dchan('23'O, 23, c_l3_payload, TRX0);
 	f_ipa_tx(ts_RSL_MEAS_RES_EMPTY(dt.rsl_chan_nr, 0,
 				       ts_RSL_IE_UplinkMeas(50, 0),
 				       ts_RSL_IE_BS_Power(0)), TRX0);
diff --git a/bsc/BSC_Tests_CBSP.ttcn b/bsc/BSC_Tests_CBSP.ttcn
index c07b605..ae77ac8 100644
--- a/bsc/BSC_Tests_CBSP.ttcn
+++ b/bsc/BSC_Tests_CBSP.ttcn
@@ -1005,7 +1005,7 @@
 	cell_list := ts_BSSMAP_CIL_CGI({bssmap_cgi(mp_cgi_bts0)});
 
 	/* first establish a dedicated channel */
-	var DchanTuple dt := f_est_dchan('23'O, 23, '00010203040506'O);
+	var DchanTuple dt := f_est_dchan('23'O, 23, c_l3_payload);
 
 	/* then send ETWS PN */
 	f_cbsp_write_emerg(g_cbsp_msg_id, g_cbsp_ser_no, cell_list);
diff --git a/bsc/BSC_Tests_VAMOS.ttcn b/bsc/BSC_Tests_VAMOS.ttcn
index cd9ffd0..3ebcaaa 100644
--- a/bsc/BSC_Tests_VAMOS.ttcn
+++ b/bsc/BSC_Tests_VAMOS.ttcn
@@ -279,13 +279,13 @@
 /* verify that DTAP passes through both ways with the right cbits */
 private function f_verify_dtap() runs on MSC_ConnHdlr
 {
-	var octetstring l3_data := '00010203040506'O;
 	var PDU_BSSAP rx_bssap_dtap;
+	var octetstring l3_data;
 
 	/* MS to NW */
-	RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3_data));
+	RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), c_l3_payload));
 	BSSAP.receive(tr_BSSAP_DTAP) -> value rx_bssap_dtap;
-	if (not match(rx_bssap_dtap.pdu.dtap, l3_data)) {
+	if (not match(rx_bssap_dtap.pdu.dtap, c_l3_payload)) {
 		setverdict(fail, "unexpected L3 data");
 		mtc.stop;
 	}
