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 := {
