diff --git a/library/BSSGP_Emulation.ttcnpp b/library/BSSGP_Emulation.ttcnpp
index 4b93a26..1f32cc2 100644
--- a/library/BSSGP_Emulation.ttcnpp
+++ b/library/BSSGP_Emulation.ttcnpp
@@ -439,16 +439,16 @@
 	}
 
 	/* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);
 	}
 
@@ -495,21 +495,21 @@
 	}
 
 	/* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);
 	}
 
 	/* Respond to BLOCK for wrong BVCI */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(?, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(?, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK for unknown BVCI");
 		BSCP.send(f_BnsUdReq(ts_BSSGP_STATUS(0, BSSGP_CAUSE_BVCI_UNKNOWN, udi.bssgp), 0, 0));
 	}
@@ -1015,13 +1015,13 @@
 }
 
 private function f_ptp_sendUnblock() runs on BSSGP_BVC_CT {
-	BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));
+	BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));
 	g_t1_waits_for_block_ack := false;
 	g_T1.start;
 }
 
 private function f_ptp_sendBlock(BssgpCause cause) runs on BSSGP_BVC_CT {
-	BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));
+	BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));
 	g_t1_waits_for_block_ack := true;
 	g_T1.start;
 	g_last_block_cause := cause;
@@ -1055,14 +1055,14 @@
 private altstep as_ptp_blocked() runs on BSSGP_BVC_CT {
 	var NsUnitdataIndication udi;
 
-	[g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {
+	[g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_UNBLOCKED);
 	}
 
 	/* Inbound  BVC-UNBLOCK from peer */
-	[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 		f_ptp_change_state(BVC_S_UNBLOCKED);
 	}
 
@@ -1104,17 +1104,17 @@
 #endif
 
 	/* bogus unblock, just respond with ACK */
-	[] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 	}
 	/* Respond to BLOCK with BLOCK-ACK + change state */
-	[] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_BLOCKED);
 	}
 	/* BLOCK-ACK before T1 timeout: mark as blocked */
-	[g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {
+	[g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_BLOCKED);
 	}
@@ -1134,11 +1134,11 @@
 		} else {
 			/* simply acknowledge all per-BVC Flow Control Messages */
 			var OCT1 tag := udi.bssgp.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
-			BVC.send(ts_ptp_BnsUdReq(t_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));
+			BVC.send(ts_ptp_BnsUdReq(ts_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));
 		}
 	}
 
-	[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {
+	[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {
 		if (GLOBAL.checkstate("Connected")) {
 			GLOBAL.send(udi.bssgp);
 		} else {
diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 82f2aca..687a073 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -816,7 +816,7 @@
 		BSSGP_CAUSE_NOT_ALL_REQUESTED_PFC_CREATED	('3c'H)
 	} with { variant "FIELDLENGTH(8)" };
 
-	private function t_FLUSH_ACTION(template OCT1 act)
+	private function tr_FLUSH_ACTION(template OCT1 act)
 	return template Flush_Action {
 		var template Flush_Action r;
 		if (istemplatekind(act, "omit")) {
@@ -835,7 +835,16 @@
 			return r;
 		}
 	}
-	private function t_NO_OCT_AFF(template integer oct_aff)
+	template (value) Flush_Action ts_FLUSH_ACTION(template (value) OCT1 act) := {
+		iEI := '0C'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 1
+		},
+		actionValue := act
+	}
+
+	private function tr_NO_OCT_AFF(template integer oct_aff)
 	return template Number_of_octets_affected {
 		var template Number_of_octets_affected r;
 		if (istemplatekind(oct_aff, "omit")) {
@@ -854,8 +863,16 @@
 			return r;
 		}
 	}
+	template (value) Number_of_octets_affected ts_NO_OCT_AFF(template (value) integer oct_aff) := {
+		iEI := '25'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 3
+		},
+		number_of_octets_transfered_or_deleted :=  int2oct(valueof(oct_aff), 3)
+	}
 
-	private function t_LLC_FRAMES_DISCARDED(template integer frames_discarded)
+	private function tr_LLC_FRAMES_DISCARDED(template integer frames_discarded)
 	return template LLC_Frames_Discarded {
 		var template LLC_Frames_Discarded r;
 		if (istemplatekind(frames_discarded, "omit")) {
@@ -874,8 +891,17 @@
 			return r;
 		}
 	}
+	template (value) LLC_Frames_Discarded ts_LLC_FRAMES_DISCARDED(template (value) integer frames_discarded) := {
+		iEI := '0F'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 1
+		},
+		number_of_frames_discarded := int2hex(valueof(frames_discarded), 2)
+	}
 
-	private function t_BSSGP_BVCI(template BssgpBvci bvci)
+
+	private function tr_BSSGP_BVCI(template BssgpBvci bvci)
 	return template BVCI {
 		var template BVCI r;
 		if (istemplatekind(bvci, "omit")) {
@@ -894,7 +920,24 @@
 			return r;
 		}
 	}
-	private function  t_BSSGP_NSEI(template Nsei nsei)
+	template (value) BVCI ts_BSSGP_BVCI(template (value) BssgpBvci bvci) := {
+		iEI := '04'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 2
+		},
+		unstructured_value := int2oct(valueof(bvci), 2)
+	}
+	private function f_ts_BSSGP_BVCI(template (omit) BssgpBvci bvci)
+	return template (omit) BVCI {
+		if (istemplatekind(bvci, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_BVCI(valueof(bvci));
+		}
+	}
+
+	private function t_BSSGP_NSEI(template Nsei nsei)
 	return template NSEI_BSSGP {
 		var template NSEI_BSSGP r;
 		if (istemplatekind(nsei, "omit")) {
@@ -913,6 +956,22 @@
 			return r;
 		}
 	}
+	template (value) NSEI_BSSGP ts_BSSGP_NSEI(template (value) Nsei nsei) := {
+		iEI:= '3E'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 2
+		},
+		nSEI := int2oct(valueof(nsei), 2)
+	}
+	private function f_ts_BSSGP_NSEI(template (omit) Nsei nsei)
+	return template (omit) NSEI_BSSGP {
+		if (istemplatekind(nsei, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_NSEI(valueof(nsei));
+		}
+	}
 
 	template (value) TLLI_BSSGP ts_BSSGP_TLLI(template (value) GprsTlli tlli) := {
 		iEI := '1F'O,
@@ -922,7 +981,7 @@
 		},
 		tLLI_Value := tlli
 	}
-	template TLLI_BSSGP tr_BSSGP_TLLI(template GprsTlli tlli) := {
+	template (present) TLLI_BSSGP tr_BSSGP_TLLI(template (present) GprsTlli tlli) := {
 		iEI := '1F'O,
 		ext := '1'B,
 		lengthIndicator := {
@@ -964,7 +1023,7 @@
 		suspend_Reference_Number_value := susp_ref
 	}
 
-	template IMSI_BSSGP tr_BSSGP_IMSI(template hexstring imsi) := {
+	template (present) IMSI_BSSGP tr_BSSGP_IMSI(template (present) hexstring imsi) := {
 		iEI := '0D'O,
 		ext := '1'B,
 		lengthIndicator := ?,
@@ -973,7 +1032,7 @@
 		digits := imsi
 	}
 
-	template IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {
+	template (value) IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {
 		iEI := '0D'O,
 		ext := '1'B,
 		lengthIndicator := { length1 := 0 /* overwritten */ },
@@ -1066,7 +1125,7 @@
 		}
 		return ret;
 	}
-	function t_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {
+	function tr_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {
 		var template Cause_BSSGP ret;
 		ret.iEI := '07'O;
 		ret.ext := '1'B;
@@ -1079,7 +1138,7 @@
 		return ret;
 	}
 
-	function t_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {
+	function tr_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {
 		var template Cell_Identifier ret := {
 			iEI := '08'O,
 			ext := '1'B,
@@ -1122,6 +1181,27 @@
 		}
 		return ret;
 	}
+	template (value) Cell_Identifier ts_BSSGP_IE_CellId(template (value) BssgpCellId cid) := {
+		iEI := '08'O,
+		ext := '1'B,
+		lengthIndicator := { length1 := 8 },
+		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+		mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+		mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+		mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+		lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
+		rac := int2oct(valueof(cid.ra_id.rac), 1),
+		cI_value := int2oct(valueof(cid.cell_id), 2)
+	}
+	function f_ts_BSSGP_IE_CellId(template (omit) BssgpCellId cid) return template (omit) Cell_Identifier {
+		if (istemplatekind(cid, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_IE_CellId(valueof(cid));
+		}
+	}
 
 	template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := {
 		iEI := '1E'O,
@@ -1161,12 +1241,12 @@
 
 	/* 10.4.12 */
 	template PDU_BSSGP ts_BVC_RESET(BssgpCause cause, BssgpBvci bvci,
-					template BssgpCellId cell_id) := {
+					template (omit) BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET := {
 			bssgpPduType := '22'O,
-			bVCI := t_BSSGP_BVCI(bvci),
+			bVCI := ts_BSSGP_BVCI(bvci),
 			cause := ts_BSSGP_CAUSE(cause),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := omit,
 			extended_Feature_Bitmap := omit
 		}
@@ -1175,20 +1255,20 @@
 					template BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET := {
 			bssgpPduType := '22'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cause := t_BSSGP_CAUSE(cause),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := *,
 			extended_Feature_Bitmap := *
 		}
 	}
 
 	/* 10.4.13 */
-	template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template BssgpCellId cell_id) := {
+	template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template (omit) BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET_ACK := {
 			bssgpPduType := '23'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := ts_BSSGP_BVCI(bvci),
+			cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := omit,
 			extended_Feature_Bitmap := omit
 		}
@@ -1196,8 +1276,8 @@
 	template PDU_BSSGP tr_BVC_RESET_ACK(template BssgpBvci bvci, template BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET_ACK := {
 			bssgpPduType := '23'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := *,
 			extended_Feature_Bitmap := *
 		}
@@ -1205,40 +1285,67 @@
 
 
 	/* 10.4.10 */
-	template PDU_BSSGP t_BVC_UNBLOCK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_UNBLOCK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_UNBLOCK := {
 			bssgpPduType := '24'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_UNBLOCK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_UNBLOCK := {
+			bssgpPduType := '24'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.11 */
-	template PDU_BSSGP t_BVC_UNBLOCK_ACK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_UNBLOCK_ACK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_UNBLOCK_ACK := {
 			bssgpPduType := '25'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_UNBLOCK_ACK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_UNBLOCK_ACK := {
+			bssgpPduType := '25'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.8 */
-	template PDU_BSSGP t_BVC_BLOCK(template BssgpBvci bvci, template BssgpCause cause) := {
+	template (present) PDU_BSSGP tr_BVC_BLOCK(template (present) BssgpBvci bvci,
+						  template (present) BssgpCause cause) := {
 		pDU_BSSGP_BVC_BLOCK := {
 			bssgpPduType := '20'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cause := t_BSSGP_CAUSE(cause)
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_BLOCK(template (value) BssgpBvci bvci,
+						template (value) BssgpCause cause) := {
+		pDU_BSSGP_BVC_BLOCK := {
+			bssgpPduType := '20'O,
+			bVCI := ts_BSSGP_BVCI(bvci),
+			cause := ts_BSSGP_CAUSE(cause)
 		}
 	}
 
 	/* 10.4.9 */
-	template PDU_BSSGP t_BVC_BLOCK_ACK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_BLOCK_ACK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_BLOCK_ACK := {
 			bssgpPduType := '21'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_BLOCK_ACK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_BLOCK_ACK := {
+			bssgpPduType := '21'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.4 */
-	template PDU_BSSGP t_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,
+	template (value) PDU_BSSGP ts_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,
 					uint16_t bmax_default_ms, uint16_t r_default_ms, OCT1 tag) := {
 		pDU_BSSGP_FLOW_CONTROL_BVC := {
 			bssgpPduType := '26'O,
@@ -1256,7 +1363,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				bmax := f_oct_or_wc(bmax, 2)
+				bmax := int2oct(bmax, 2)
 			},
 			bucket_Leak_Rate := {
 				iEI := '03'O,
@@ -1264,7 +1371,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				r_Value := f_oct_or_wc(bucket_leak_rate, 2)
+				r_Value := int2oct(bucket_leak_rate, 2)
 			},
 			bmax_default_MS := {
 				iEI := '01'O,
@@ -1272,7 +1379,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				bmax := f_oct_or_wc(bmax_default_ms, 2)
+				bmax := int2oct(bmax_default_ms, 2)
 			},
 			r_default_MS := {
 				iEI := '1C'O,
@@ -1280,7 +1387,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				r_default_MS_value := f_oct_or_wc(r_default_ms, 2)
+				r_default_MS_value := int2oct(r_default_ms, 2)
 			},
 			bucket_Full_Ratio := omit,
 			bVC_Measurement := omit,
@@ -1341,7 +1448,20 @@
 	}
 
 	/* 10.4.5 */
-	template PDU_BSSGP t_BVC_FC_BVC_ACK(template OCT1 tag) := {
+	template (present) PDU_BSSGP tr_BVC_FC_BVC_ACK(template (present) OCT1 tag) := {
+		pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {
+			bssgpPduType := '27'O,
+			tag := {
+				iEI := '1E'O,
+				ext := '1'B,
+				lengthIndicator := {
+					length1 := 1
+				},
+				unstructured_Value := tag
+			}
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_FC_BVC_ACK(template (value) OCT1 tag) := {
 		pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {
 			bssgpPduType := '27'O,
 			tag := {
@@ -1395,7 +1515,7 @@
 						  template (present) OCT1 tag := ?) := {
 		pDU_BSSGP_FLOW_CONTROL_MS := {
 			bssgpPduType := '28'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := {
 				iEI := '1E'O,
 				ext := '1'B,
@@ -1460,12 +1580,13 @@
 	}
 
 	/* 10.4.14 */
-	template PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci, template BssgpCause cause,
-					   PDU_BSSGP pdu) := {
+	template (value) PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci,
+						   template (value) BssgpCause cause,
+						   PDU_BSSGP pdu) := {
 		pDU_BSSGP_STATUS := {
 			bssgpPduType := '41'O,
-			cause := t_BSSGP_CAUSE(cause),
-			bVCI := t_BSSGP_BVCI(bvci),
+			cause := ts_BSSGP_CAUSE(cause),
+			bVCI := f_ts_BSSGP_BVCI(bvci),
 			pDU_in_Error := {
 				iEI := '15'O,
 				ext := '1'B,
@@ -1480,8 +1601,8 @@
 					   template octetstring pdu := ?) := {
 		pDU_BSSGP_STATUS := {
 			bssgpPduType := '41'O,
-			cause := t_BSSGP_CAUSE(cause),
-			bVCI := t_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause),
+			bVCI := tr_BSSGP_BVCI(bvci),
 			pDU_in_Error := {
 				iEI := '15'O,
 				ext := '1'B,
@@ -1596,7 +1717,7 @@
 		peakBitRateGranularity := '00'B
 	}
 
-	template QoS_Profile ts_QoS_TLV(template QoS_Profile_V qos) := {
+	template (value) QoS_Profile ts_QoS_TLV(template (value) QoS_Profile_V qos) := {
 		iEI := '18'O,
 		ext := '1'B,
 		lengthIndicator := { length1 := 3 },
@@ -1608,13 +1729,13 @@
 		peakBitRateGranularity := qos.peakBitRateGranularity
 	}
 
-	template PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {
+	template (value) PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {
 		iEI := '16'O,
 		ext := '1'B,
 		lengthIndicator := {
 			length1 := 2
 		},
-		delay_Value := f_oct_or_wc(delay, 2)
+		delay_Value := int2oct(delay, 2)
 	}
 
 	template DRX_Parameters t_defaultDRXparam := {
@@ -1662,7 +1783,7 @@
 	}
 
 	/* 10.2.1 */
-	template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,
+	template (value) PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,
 					  template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit,
 					  template (omit) IMSI_BSSGP imsi := omit) := {
 		pDU_BSSGP_DL_UNITDATA := {
@@ -1693,8 +1814,8 @@
 			initialLLC_PDU := omit
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,
-					  template IMSI_BSSGP imsi := omit) := {
+	template (present) PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,
+					  template (omit) IMSI_BSSGP imsi := omit) := {
 		pDU_BSSGP_DL_UNITDATA := {
 			bssgpPduType := '00'O,
 			tLLI_current := tlli,
@@ -1725,12 +1846,12 @@
 	}
 
 	/* 10.2.2 */
-	template PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {
+	template (value) PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {
 		pDU_BSSGP_UL_UNITDATA := {
 			bssgpPduType := '01'O,
 			tLLI := tlli,
 			qoS_Profile := t_defaultQos,
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := ts_BSSGP_IE_CellId(cell_id),
 			pFI := omit,
 			lSA_Identifier_List := omit,
 			redirect_Attempt_Flag := omit,
@@ -1749,7 +1870,7 @@
 			bssgpPduType := '01'O,
 			tLLI := tlli,
 			qoS_Profile := ?,
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			pFI := *,
 			lSA_Identifier_List := *,
 			redirect_Attempt_Flag := *,
@@ -1770,7 +1891,7 @@
 			iMSI := ?,
 			dRX_Parameters := ?,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := *,
 			channel_needed := *,
@@ -1779,13 +1900,13 @@
 			global_CN_Id := *
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
 		pDU_BSSGP_PAGING_CS := {
 			bssgpPduType := '07'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := t_defaultDRXparam,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := omit,
 			channel_needed := omit,
@@ -1794,13 +1915,13 @@
 			global_CN_Id := omit
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
 		pDU_BSSGP_PAGING_CS := {
 			bssgpPduType := '07'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := t_defaultDRXparam,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := omit,
 			channel_needed := omit,
@@ -1817,7 +1938,7 @@
 			iMSI := ?,
 			dRX_Parameters := *,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := tr_BSSGP_BVCI(bvci)
 			},
 			pFI := *,
 			aBQP := *,
@@ -1826,13 +1947,13 @@
 			eDRX_Paremeters := *
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
 		pDU_BSSGP_PAGING_PS := {
 			bssgpPduType := '06'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := omit,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			pFI := omit,
 			aBQP := omit,
@@ -1841,13 +1962,13 @@
 			eDRX_Paremeters := omit
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
 		pDU_BSSGP_PAGING_PS := {
 			bssgpPduType := '06'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := omit,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			pFI := omit,
 			aBQP := omit,
@@ -1877,7 +1998,7 @@
 	}
 
 	template (value) Paging_Field4 ts_BssgpP4Bvci(BssgpBvci bvci) := {
-		bVCI := t_BSSGP_BVCI(bvci)
+		bVCI := ts_BSSGP_BVCI(bvci)
 	}
 
 	template (value) Location_Area ts_BSSGP_LA_ID(GSM_Types.LocationAreaIdentification input) := {
@@ -1941,7 +2062,7 @@
 			routeing_Area := ts_BSSGP_RA_ID(ra_id)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_SUSPEND(template GprsTlli tlli, RoutingAreaIdentification ra_id) := {
+	template PDU_BSSGP tr_BSSGP_SUSPEND(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id) := {
 		pDU_BSSGP_SUSPEND := {
 			bssgpPduType := '0B'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
@@ -1985,7 +2106,7 @@
 			bssgpPduType := '0D'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
 			routeing_Area := ts_BSSGP_RA_ID(ra_id),
-			cause := t_BSSGP_CAUSE(cause)
+			cause := tr_BSSGP_CAUSE(cause)
 		}
 	}
 
@@ -2000,7 +2121,7 @@
 			suspend_Reference_Number := ts_BSSGP_SUSP_REF(susp_ref)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME(template GprsTlli tlli, RoutingAreaIdentification ra_id,
+	template PDU_BSSGP tr_BSSGP_RESUME(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id,
 					   template OCT1 susp_ref) := {
 		pDU_BSSGP_RESUME := {
 			bssgpPduType := '0E'O,
@@ -2019,7 +2140,7 @@
 			routeing_Area := ts_BSSGP_RA_ID(ra_id)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME_ACK(template GprsTlli tlli,
+	template PDU_BSSGP tr_BSSGP_RESUME_ACK(template (present) GprsTlli tlli,
 						RoutingAreaIdentification ra_id) := {
 		pDU_BSSGP_RESUME_ACK := {
 			bssgpPduType := '0F'O,
@@ -2038,14 +2159,14 @@
 			cause := ts_BSSGP_CAUSE(cause)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME_NACK(template GprsTlli tlli,
+	template PDU_BSSGP tr_BSSGP_RESUME_NACK(template (present) GprsTlli tlli,
 						RoutingAreaIdentification ra_id,
 						template BssgpCause cause) := {
 		pDU_BSSGP_RESUME_NACK := {
 			bssgpPduType := '10'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
 			routeing_Area := ts_BSSGP_RA_ID(ra_id),
-			cause := t_BSSGP_CAUSE(cause)
+			cause := tr_BSSGP_CAUSE(cause)
 		}
 	}
 
@@ -2181,7 +2302,7 @@
 		if (istemplatekind(mccmnc, "omit")) {
 			return omit;
 		} else {
-			return ts_BSSGP_PlmnId(mccmnc);
+			return ts_BSSGP_PlmnId(valueof(mccmnc));
 		}
 	}
 	private function f_tr_BSSGP_PlmnId(template BcdMccMnc mccmnc)
@@ -2193,7 +2314,7 @@
 		} else if (istemplatekind(mccmnc, "?")) {
 			return ?;
 		} else {
-			return ts_BSSGP_PlmnId(mccmnc);
+			return ts_BSSGP_PlmnId(valueof(mccmnc));
 		}
 	}
 
@@ -2220,20 +2341,20 @@
 		pDU_BSSGP_FLUSH_LL := {
 			bssgpPduType := '2A'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			bVCI_old := t_BSSGP_BVCI(bvci_old),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			nSEI := t_BSSGP_NSEI(nsei)
+			bVCI_old := ts_BSSGP_BVCI(bvci_old),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_FLUSH_LL(template GprsTlli tlli, template BssgpBvci bvci_old,
+	template PDU_BSSGP tr_BSSGP_FLUSH_LL(template (present) GprsTlli tlli, template BssgpBvci bvci_old,
 					     template (omit) BssgpBvci bvci_new := omit,
 					     template (omit) Nsei nsei := omit) := {
 		pDU_BSSGP_FLUSH_LL := {
 			bssgpPduType := '2A'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
-			bVCI_old := t_BSSGP_BVCI(bvci_old),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			nSEI := t_BSSGP_NSEI(nsei)
+			bVCI_old := tr_BSSGP_BVCI(bvci_old),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
 
@@ -2245,23 +2366,23 @@
 		pDU_BSSGP_FLUSH_LL_ACK := {
 			bssgpPduType := '2B'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			flush_Action := t_FLUSH_ACTION(act),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
-			nSEI := t_BSSGP_NSEI(nsei)
+			flush_Action := ts_FLUSH_ACTION(act),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := ts_NO_OCT_AFF(oct_affected),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template GprsTlli tlli, template OCT1 act,
+	template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template (present) GprsTlli tlli, template OCT1 act,
 						 template integer oct_affected,
 						 template (omit) BssgpBvci bvci_new := omit,
 						 template (omit) Nsei nsei := omit) := {
 		pDU_BSSGP_FLUSH_LL_ACK := {
 			bssgpPduType := '2B'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
-			flush_Action := t_FLUSH_ACTION(act),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
-			nSEI := t_BSSGP_NSEI(nsei)
+			tLLI := tr_BSSGP_TLLI(tlli),
+			flush_Action := tr_FLUSH_ACTION(act),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := tr_NO_OCT_AFF(oct_affected),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
 
@@ -2272,21 +2393,21 @@
 		pDU_BSSGP_LLC_DISCARDED := {
 			bssgpPduType := '2C'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),
-			bVCI := t_BSSGP_BVCI(bvci),
-			number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),
+			lLC_Frames_Discarded := ts_LLC_FRAMES_DISCARDED(frames_discarded),
+			bVCI := ts_BSSGP_BVCI(bvci),
+			number_of_octets_deleted := ts_NO_OCT_AFF(oct_deleted),
 			pFI := omit
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template GprsTlli tlli, template integer frames_discarded,
+	template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template (present) GprsTlli tlli, template integer frames_discarded,
 						 template BssgpBvci bvci,
 						 template integer oct_deleted) := {
 		pDU_BSSGP_LLC_DISCARDED := {
 			bssgpPduType := '2C'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
-			lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),
-			bVCI := t_BSSGP_BVCI(bvci),
-			number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),
+			tLLI := tr_BSSGP_TLLI(tlli),
+			lLC_Frames_Discarded := tr_LLC_FRAMES_DISCARDED(frames_discarded),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			number_of_octets_deleted := tr_NO_OCT_AFF(oct_deleted),
 			pFI := *
 		}
 	}
@@ -2304,7 +2425,7 @@
 						     template MSRadioAccessCapabilityV_BSSGP racap) := {
 		pDU_BSSGP_RA_CAPABILITY := {
 			bssgpPduType := '02'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
 		}
 	}
@@ -2319,10 +2440,10 @@
 		}
 	}
 	template (present) PDU_BSSGP tr_BSSGP_RA_CAP_UPD(template (present) GprsTlli tlli,
-						     template OCT1 tag) := {
+						     template (present) OCT1 tag) := {
 		pDU_BSSGP_RA_CAPABILITY_UPDATE := {
 			bssgpPduType := '08'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := tr_BSSGP_IE_Tag(tag)
 		}
 	}
@@ -2342,11 +2463,11 @@
 		}
 	}
 	template (present) PDU_BSSGP
-	tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template OCT1 tag, template (present) OCT1 cause,
+	tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template (present) OCT1 tag, template (present) OCT1 cause,
 			        template MSRadioAccessCapabilityV_BSSGP racap := omit) := {
 		pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
 			bssgpPduType := '09'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := tr_BSSGP_IE_Tag(tag),
 			iMSI := omit,
 			rA_Cap_UPDATE_CAUSE := tr_BSSGP_IE_RACU_Cause(cause),
@@ -2375,7 +2496,7 @@
 		return ret;
 	}
 	function tr_BSSGP_RADIO_CAUSE(template BssgpRadioCause cause) return template (present) Radio_Cause {
-		var template Radio_Cause ret;
+		var template (present) Radio_Cause ret;
 		ret.iEI := '19'O;
 		ret.ext := '1'B;
 		ret.lengthIndicator := { length1 := 1 };
@@ -2832,7 +2953,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 	template RAN_Information_Request_Application_Container_NACC
 	tr_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid := ?) := {
@@ -2841,7 +2962,7 @@
 		 lengthIndicator := {
 			length1 := ?
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := tr_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.1.2 */
@@ -2852,7 +2973,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.1.3 */
@@ -2863,7 +2984,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.2.1 */
@@ -2874,7 +2995,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 typeBit := bool2bit(psi_type),
 		 number_of_SI_PSI := int2bit(si_psi_num, 7),
 		 sI_PSI := si_psi
@@ -2886,7 +3007,7 @@
 		 ret.iEI := '4E'O;
 		 ret.ext := '1'B;
 		 ret.lengthIndicator := { length1 := ? };
-		 ret.reporting_Cell_Identifier := t_Cell_Identifier_V(cid);
+		 ret.reporting_Cell_Identifier := tr_Cell_Identifier_V(cid);
 		 if (istemplatekind(psi_type, "*")) {
 			ret.typeBit := *;
 		 } else if (istemplatekind(psi_type, "?")) {
@@ -2913,7 +3034,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 sI3 := si3
 	}
 
@@ -2925,7 +3046,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 mBMS_data_channel_report := data_ch_report
 	}
 
@@ -3244,7 +3365,7 @@
 	}
 
 	template RIM_Routing_Address t_RIM_Routing_Address_cid(template BssgpCellId cid := ?) := {
-		 cell_Identifier := t_Cell_Identifier_V(cid)
+		 cell_Identifier := tr_Cell_Identifier_V(cid)
 	}
 	template RIM_Routing_Address t_RIM_Routing_Address_rncid(template BssgpCellId cid := ?, template integer rnc_id := ?) := {
 		 globalRNCID := t_GlobalRNC_ID_BSSGP(cid, rnc_id)
@@ -3256,7 +3377,7 @@
 		 eHRPD_SectorID := sector
 	}
 
-	function t_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {
+	function tr_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {
 		var template Cell_Identifier_V ret := {
 			mccDigit1 := ?,
 			mccDigit2 := ?,
@@ -3296,6 +3417,17 @@
 		}
 		return ret;
 	}
+	template (value) Cell_Identifier_V ts_Cell_Identifier_V(template (value) BssgpCellId cid) := {
+		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+		mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+		mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+		mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+		lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
+		rac := int2oct(valueof(cid.ra_id.rac), 1),
+		cI_value := int2oct(valueof(cid.cell_id), 2)
+	}
 
 	function t_GlobalRNC_ID_BSSGP(template BssgpCellId cid, template integer rnc_id) return template GlobalRNC_ID_BSSGP {
 		var template GlobalRNC_ID_BSSGP ret := {
diff --git a/library/RAW_NS.ttcnpp b/library/RAW_NS.ttcnpp
index 81836c7..2aaa770 100644
--- a/library/RAW_NS.ttcnpp
+++ b/library/RAW_NS.ttcnpp
@@ -213,9 +213,9 @@
 /* Receive a BSSGP UNBLOCK for given BVCI and ACK it */
 altstep as_rx_bvc_unblock_tx_ack(BssgpBvci bvci, boolean oneshot := false, integer idx := 0) runs on RAW_NS_CT {
 	var PDU_NS ns_rf;
-	[] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch t_BVC_UNBLOCK(bvci))) -> value ns_rf {
+	[] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_UNBLOCK(bvci))) -> value ns_rf {
 		var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);
-		var PDU_BSSGP bssgp_tx := valueof(t_BVC_UNBLOCK_ACK(bvci));
+		var PDU_BSSGP bssgp_tx := valueof(ts_BVC_UNBLOCK_ACK(bvci));
 		NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, 0, enc_PDU_BSSGP(bssgp_tx)));
 		if (not oneshot) { repeat; }
 		}
@@ -229,7 +229,7 @@
 								-> value ns_rf {
 		var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);
 		var OCT1 tag := bssgp_rx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
-		var PDU_BSSGP bssgp_tx := valueof(t_BVC_FC_BVC_ACK(tag));
+		var PDU_BSSGP bssgp_tx := valueof(ts_BVC_FC_BVC_ACK(tag));
 		NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, bvci, enc_PDU_BSSGP(bssgp_tx)));
 		if (not oneshot) { repeat; }
 		}
