diff --git a/library/SGsAP_Templates.ttcn b/library/SGsAP_Templates.ttcn
new file mode 100644
index 0000000..aac045e
--- /dev/null
+++ b/library/SGsAP_Templates.ttcn
@@ -0,0 +1,860 @@
+module SGsAP_Templates {
+
+/* Templates for the SGsAP protocol as per 3GPP TS 29.118
+ * (C) 2018 by Harald Welte <laforg@gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of the GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ */
+
+import from SGsAP_Types all;
+import from GSM_Types all;
+import from General_Types all;
+import from MobileL3_CommonIE_Types all;
+
+/* 9.4.2 */
+template (value) EPS_LocationUpdateType ts_SGsAP_IE_EpsLuType(template (value) EPS_location_update_type lut) := {
+	iEI := '00001010'B,
+	lengthIndicator := 1,
+	locationUpdateType := lut
+}
+template EPS_LocationUpdateType tr_SGsAP_IE_EpsLuType(template EPS_location_update_type lut) := {
+	iEI := '00001010'B,
+	lengthIndicator := 1,
+	locationUpdateType := lut
+}
+
+/* 9.4.3 */
+template (value) ErroneousMessage ts_SGsAP_IE_ErrMsg(template (value) octetstring err_msg) := {
+	iEI := '00011011'B,
+	lengthIndicator := lengthof(valueof(err_msg)),
+	erroneousMessage := err_msg
+}
+template ErroneousMessage tr_SGsAP_IE_ErrMsg(template octetstring err_msg) := {
+	iEI := '00011011'B,
+	lengthIndicator := ?,
+	erroneousMessage := err_msg
+}
+
+
+/* 9.4.6 */
+private function ts_SGsAP_IMSI(hexstring digits) return template (value) IMSI {
+	var template (value) IMSI imsi := {
+		iEI := '00000001'B,
+		lengthIndicator := lengthof(digits)/2 + 1,
+		iMSI := {
+			field1 := '001'B,
+			parity := '0'B, /* even */
+			digits := digits,
+			fillerDigit := '1111'B /* even */
+		}
+	}
+	if (lengthof(digits) mod 2 == 1) {
+		/* odd number of digits */
+		imsi.iMSI.parity := '1'B;
+		imsi.iMSI.fillerDigit := omit;
+	}
+	return imsi;
+}
+private function ts_SGsAP_IMSI_omit(template (omit) hexstring digits) return template (omit) IMSI {
+	if (istemplatekind(digits, "omit")) {
+		return omit;
+	} else {
+		return ts_SGsAP_IMSI(valueof(digits));
+	}
+}
+private function tr_SGsAP_IMSI(template hexstring digits) return template IMSI {
+	if (istemplatekind(digits, "omit")) {
+		return omit;
+	} else if (istemplatekind(digits, "*")) {
+		return *;
+	}
+	var template IMSI imsi := {
+		iEI := '00000001'B,
+		lengthIndicator := lengthof(digits)/2 + 1,
+		iMSI := {
+			field1 := '001'B,
+			parity := '0'B, /* even */
+			digits := digits,
+			fillerDigit := '1111'B /* even */
+		}
+	}
+	if (lengthof(digits) mod 2 == 1) {
+		/* odd number of digits */
+		/* odd number of digits */
+		imsi.iMSI.parity := '1'B;
+		imsi.iMSI.fillerDigit := omit;
+	}
+	return imsi;
+}
+
+/* 9.4.7 */
+template (value) IMSI_DetachFromEPS_ServiceType ts_SGsAP_IE_DetServiceType(template (value) IMSI_detachFromEPS_serviceType st) := {
+	iEI := '00010000'B,
+	lengthIndicator := 1,
+	serviceType := st
+}
+template IMSI_DetachFromEPS_ServiceType tr_SGsAP_IE_DetServiceType(template IMSI_detachFromEPS_serviceType st) := {
+	iEI := '00010000'B,
+	lengthIndicator := 1,
+	serviceType := st
+}
+
+/* 9.4.8 */
+template (value) IMSI_DetachFromNonEPS_ServiceType ts_SGsAP_IE_DetNonEpsServiceType(template (value) IMSI_detachFromNonEPS_serviceType st) := {
+	iEI := '00010001'B,
+	lengthIndicator := 1,
+	serviceType := st
+}
+template IMSI_DetachFromNonEPS_ServiceType tr_SGsAP_IE_DetNonEpsServiceType(template IMSI_detachFromNonEPS_serviceType st) := {
+	iEI := '00010001'B,
+	lengthIndicator := 1,
+	serviceType := st
+}
+
+/* 9.4.11 */
+private function f_enc_mnc_digit3(GsmMnc mnc) return HEX1 {
+	if (lengthof(mnc) == 2) {
+		return 'F'H;
+	} else {
+		return mnc[2];
+	}
+}
+template (value) LocationAreaIdValue ts_SGsAP_LAI(GsmMcc mcc, GsmMnc mnc, GsmLac lac) := {
+	mccDigit1 := mcc[0],
+	mccDigit2 := mcc[1],
+	mccDigit3 := mcc[2],
+	mncDigit3 := f_enc_mnc_digit3(mnc),
+	mncDigit1 := mnc[0],
+	mncDigit2 := mnc[1],
+	lac := int2oct(lac, 2)
+}
+template (value) LocationAreaId ts_SGsAP_IE_Lai(template (value) LocationAreaIdValue lai) := {
+	iEI := '00000100'B,
+	lengthIndicator := 5,
+	locationAreaId := lai
+}
+template LocationAreaId tr_SGsAP_IE_Lai(template LocationAreaIdValue lai) := {
+	iEI := '00000100'B,
+	lengthIndicator := 5,
+	locationAreaId := lai
+}
+function ts_SGsAP_IE_Lai_omit(template (omit) LocationAreaIdValue lai) return template (omit) LocationAreaId {
+	if (istemplatekind(lai, "omit")) {
+		return omit;
+	} else {
+		return ts_SGsAP_IE_Lai(lai);
+	}
+}
+function tr_SGsAP_IE_Lai_omit(template LocationAreaIdValue lai) return template LocationAreaId {
+	if (istemplatekind(lai, "omit")) {
+		return omit;
+	} else if (istemplatekind(lai, "*")) {
+		return *;
+	} else {
+		return tr_SGsAP_IE_Lai(lai);
+	}
+}
+
+
+
+/* 9.4.12 */
+template (value) MM_Information ts_SGsAP_IE_MmInfo(template (value) octetstring mm_info) := {
+	iEI := '00010111'B,
+	lengthIndicator := lengthof(valueof(mm_info)),
+	information := mm_info
+}
+template MM_Information tr_SGsAP_IE_MmInfo(template octetstring mm_info) := {
+	iEI := '00010111'B,
+	lengthIndicator := ?,
+	information := mm_info
+}
+
+
+
+/* 9.4.13 */
+template (value) MME_Name ts_SGsAP_IE_MmeName(template (value) charstring name) := {
+	iEI := '00001001'B,
+	lengthIndicator := lengthof(valueof(name)),
+	name := name
+};
+template MME_Name tr_SGsAP_IE_MmeName(template charstring name) := {
+	iEI := '00001001'B,
+	lengthIndicator := ?,
+	name := name
+};
+
+/* 9.4.14 */
+function f_l3_to_sgs_id(MobileIdentityLV l3) return MobileIdentityValue {
+	var OddEvenInd_Identity l3v := l3.mobileIdentityV.oddEvenInd_identity;
+	var MobileIdentityValue ret;
+	ret.typeOfIdentity := l3.mobileIdentityV.typeOfIdentity;
+	if (ischosen(l3v.imei)) {
+		ret.iD.imei.oddevenIndicator := l3v.imei.oddevenIndicator;
+		ret.iD.imei.digits := l3v.imei.digits;
+	} else if (ischosen(l3v.imsi)) {
+		ret.iD.imsi.oddevenIndicator := l3v.imsi.oddevenIndicator;
+		ret.iD.imsi.digits := l3v.imsi.digits;
+		ret.iD.imsi.fillerDigit := l3v.imsi.fillerDigit;
+	} else if (ischosen(l3v.imei_sv)) {
+		ret.iD.imei_sv.oddevenIndicator := l3v.imei_sv.oddevenIndicator;
+		ret.iD.imei_sv.digits := l3v.imei_sv.digits;
+		ret.iD.imei_sv.fillerDigit := l3v.imei_sv.fillerDigit;
+	} else if (ischosen(l3v.tmsi_ptmsi)) {
+		ret.iD.tmsi_ptmsi.oddevenIndicator := l3v.tmsi_ptmsi.oddevenIndicator;
+		ret.iD.tmsi_ptmsi.fillerDigit := l3v.tmsi_ptmsi.fillerDigit;
+		ret.iD.tmsi_ptmsi.octets := l3v.tmsi_ptmsi.octets;
+	} else if (ischosen(l3v.tmgi_and_MBMS_SessionID)) {
+		ret.iD.tmgi_and_MBMS_SessionID.oddevenIndicator := l3v.tmgi_and_MBMS_SessionID.oddevenIndicator;
+		ret.iD.tmgi_and_MBMS_SessionID.mCC_MNCIndicator := l3v.tmgi_and_MBMS_SessionID.mCC_MNCIndicator;
+		ret.iD.tmgi_and_MBMS_SessionID.mBMS_SessionIdentityIndicator := l3v.tmgi_and_MBMS_SessionID.mBMS_SessionIdentityIndicator;
+		ret.iD.tmgi_and_MBMS_SessionID.spare := l3v.tmgi_and_MBMS_SessionID.spare;
+		ret.iD.tmgi_and_MBMS_SessionID.mBMS_ServiceID := l3v.tmgi_and_MBMS_SessionID.mBMS_ServiceID;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit1 := l3v.tmgi_and_MBMS_SessionID.mccDigit1;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit2 := l3v.tmgi_and_MBMS_SessionID.mccDigit2;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit3 := l3v.tmgi_and_MBMS_SessionID.mccDigit3;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit3 := l3v.tmgi_and_MBMS_SessionID.mccDigit3;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit1 := l3v.tmgi_and_MBMS_SessionID.mccDigit1;
+		ret.iD.tmgi_and_MBMS_SessionID.mccDigit2 := l3v.tmgi_and_MBMS_SessionID.mccDigit2;
+		ret.iD.tmgi_and_MBMS_SessionID.mBMS_SessionIdentity := l3v.tmgi_and_MBMS_SessionID.mBMS_SessionIdentity;
+	} else if (ischosen(l3v.no_identity)) {
+		ret.iD.no_identity.oddevenIndicator := l3v.no_identity.oddevenIndicator;
+		ret.iD.no_identity.fillerDigits := l3v.no_identity.fillerDigits;
+	}
+	return ret;
+}
+template MobileIdentity ts_SGsAP_IE_MobileID(template (value) MobileIdentityLV l3_mi) := {
+	iEI := '00001110'B,
+	lengthIndicator := 0, /* overwritten */
+	iD := f_l3_to_sgs_id(valueof(l3_mi))
+}
+
+
+/* 9.4.15 */
+template (value) NAS_MessageContainer ts_SGsAP_NasContainer(template (value) octetstring nas_pdu) := {
+	iEI := '00010110'B,
+	lengthIndicator := lengthof(valueof(nas_pdu)),
+	nAS_MessageContainer := nas_pdu
+}
+template NAS_MessageContainer tr_SGsAP_NasContainer(template octetstring nas_pdu) := {
+	iEI := '00010110'B,
+	lengthIndicator := ?,
+	nAS_MessageContainer := nas_pdu
+}
+
+/* 9.4.16 */
+template (value) RejectCause ts_SGsAP_IE_RejCause(template (value) Reject_Cause cause) := {
+	iEI := '00001111'B,
+	lengthIndicator := 1,
+	cause := cause
+}
+template RejectCause tr_SGsAP_IE_RejCause(template Reject_Cause cause) := {
+	iEI := '00001111'B,
+	lengthIndicator := 1,
+	cause := cause
+}
+
+/* 9.4.17 */
+template (value) ServiceIndicator ts_SGsAP_ServiceInd(template (value) Service_Indicator si) := {
+	iEI := '00100000'B,
+	lengthIndicator := 1,
+	indicator := si
+}
+template ServiceIndicator tr_SGsAP_ServiceInd(template Service_Indicator si) := {
+	iEI := '00100000'B,
+	lengthIndicator := 1,
+	indicator := si
+}
+
+
+/* 9.4.18 */
+template (value) SGsCause ts_SGsAP_IE_SgsCause(template (value) SGs_Cause cause) := {
+	iEI := '00001000'B,
+	lengthIndicator := 1,
+	cause := cause
+}
+function tr_SGsAP_IE_SgsCause(template SGs_Cause cause) return template SGsCause {
+	if (istemplatekind(cause, "omit")) {
+		return omit;
+	} else if (istemplatekind(cause, "*")) {
+		return *;
+	} else {
+		var template SGsCause ret := {
+			iEI := '00001000'B,
+			lengthIndicator := 1,
+			cause := cause
+		}
+		return ret;
+	}
+}
+
+/* 9.4.21c */
+template (value) UE_EMM_Mode ts_SGsAP_IE_UeEmmMode(template (value) UE_EMM_mode mode) := {
+	iEI := '00100101'B,
+	lengthIndicator := 1,
+	mode := mode
+}
+template UE_EMM_Mode tr_SGsAP_IE_UeEmmMode(template UE_EMM_mode mode) := {
+	iEI := '00100101'B,
+	lengthIndicator := 1,
+	mode := mode
+}
+
+
+/* 9.4.22 */
+template (value) VLR_Name ts_SGsAP_IE_VlrName(template (value) charstring name) := {
+	iEI := '00000010'B,
+	lengthIndicator := lengthof(name),
+	name := name
+}
+template VLR_Name tr_SGsAP_IE_VlrName(template charstring name) := {
+	iEI := '00000010'B,
+	lengthIndicator := ?,
+	name := name
+}
+
+
+
+
+
+/* 3GPP TS 29.118 Section 8.1 */
+template (value) PDU_SGsAP ts_SGsAP_ALERT_ACK(hexstring imsi) := {
+	sGsAP_ALERT_ACK := {
+		messageType := '00001110'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_ALERT_ACK(template hexstring imsi) := {
+	sGsAP_ALERT_ACK := {
+		messageType := '00001110'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+	}
+}
+
+/* 3GPP TS 29.118 Section 8.2 */
+template PDU_SGsAP ts_SGsAP_ALERT_REJECT(hexstring imsi,
+					 template (value) SGs_Cause cause) := {
+	sGsAP_ALERT_REJECT := {
+		messageType := '00001111'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		sGsCause := ts_SGsAP_IE_SgsCause(cause)
+	}
+}
+template PDU_SGsAP tr_SGsAP_ALERT_REJECT(template hexstring imsi,
+					 template SGs_Cause cause := ?) := {
+	sGsAP_ALERT_REJECT := {
+		messageType := '00001111'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		sGsCause := tr_SGsAP_IE_SgsCause(cause)
+	}
+}
+
+/* 3GPP TS 29.118 Section 8.3 */
+template (value) PDU_SGsAP ts_SGsAP_ALERT_REQ(hexstring imsi) := {
+	sGsAP_ALERT_REQUEST := {
+		messageType := '00001101'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_ALERT_REQ(template hexstring imsi) := {
+	sGsAP_ALERT_REQUEST := {
+		messageType := '00001101'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+	}
+}
+
+/* 3GPP TS 29.118 Section 8.4 */
+template (value) PDU_SGsAP ts_SGsAP_DL_UD(hexstring imsi,
+					  template (value) octetstring nas_pdu) := {
+	sGsAP_DOWNLINK_UNITDATA := {
+		messageType := '00000111'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		nAS_MessageContainer := ts_SGsAP_NasContainer(nas_pdu)
+	}
+}
+template PDU_SGsAP tr_SGsAP_DL_UD(template hexstring imsi, template octetstring nas_pdu := ?) := {
+	sGsAP_DOWNLINK_UNITDATA := {
+		messageType := '00000111'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		nAS_MessageContainer := tr_SGsAP_NasContainer(nas_pdu)
+	}
+}
+
+/* 8.5 */
+template (value) PDU_SGsAP ts_SGsAP_EPS_DETACH_ACK(hexstring imsi) := {
+	sGsAP_EPS_DETACH_ACK:= {
+		messageType := '00010010'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_EPS_DETACH_ACK(template hexstring imsi) := {
+	sGsAP_EPS_DETACH_ACK:= {
+		messageType := '00010010'B,
+		iMSI := tr_SGsAP_IMSI(valueof(imsi))
+	}
+}
+
+/* 8.6 */
+template (value) PDU_SGsAP ts_SGsAP_EPS_DETACH_IND(hexstring imsi,
+						   template (value) charstring mme_name,
+						   template (value) IMSI_detachFromEPS_serviceType det_serv_typ) := {
+	sGsAP_EPS_DETACH_INDICATION:= {
+		messageType := '00010001'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
+		iMSI_DetachFromEPS_ServiceType := ts_SGsAP_IE_DetServiceType(det_serv_typ)
+	}
+}
+template PDU_SGsAP tr_SGsAP_EPS_DETACH_IND(template hexstring imsi,
+					   template charstring mme_name,
+					   template IMSI_detachFromEPS_serviceType det_serv_typ) := {
+	sGsAP_EPS_DETACH_INDICATION:= {
+		messageType := '00010001'B,
+		iMSI := tr_SGsAP_IMSI(valueof(imsi)),
+		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
+		iMSI_DetachFromEPS_ServiceType := tr_SGsAP_IE_DetServiceType(det_serv_typ)
+	}
+}
+
+/* 8.7 */
+template (value) PDU_SGsAP ts_SGsAP_IMSI_DETACH_ACK(hexstring imsi) := {
+	sGsAP_IMSI_DETACH_ACK := {
+		messageType := '00010100'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_IMSI_DETACH_ACK(template hexstring imsi) := {
+	sGsAP_IMSI_DETACH_ACK := {
+		messageType := '00010100'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+	}
+}
+
+/* 8.8 */
+template (value) PDU_SGsAP ts_SGsAP_IMSI_DETACH_IND(hexstring imsi,
+						    template (value) charstring mme_name,
+						    template (value) IMSI_detachFromNonEPS_serviceType det_serv_typ) := {
+	sGsAP_IMSI_DETACH_INDICATION := {
+		messageType := '00010011'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
+		iMSI_DetachFromNonEPS_ServiceType := ts_SGsAP_IE_DetNonEpsServiceType(det_serv_typ)
+	}
+}
+template PDU_SGsAP tr_SGsAP_IMSI_DETACH_IND(template hexstring imsi,
+					    template charstring mme_name := ?,
+					    template IMSI_detachFromNonEPS_serviceType det_serv_typ := ?) := {
+	sGsAP_IMSI_DETACH_INDICATION := {
+		messageType := '00010011'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
+		iMSI_DetachFromNonEPS_ServiceType := tr_SGsAP_IE_DetNonEpsServiceType(det_serv_typ)
+	}
+}
+
+/* 8.9 */
+template (value) PDU_SGsAP ts_SGsAP_LU_ACCEPT(hexstring imsi,
+					      template (value) LocationAreaIdValue lai,
+					      template (value) MobileIdentityLV mobile_id) := {
+	sGsAP_LOCATION_UPDATE_ACCEPT := {
+		messageType := '00001010'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		locationAreaId := ts_SGsAP_IE_Lai(lai),
+		newTMSIorIMSI := ts_SGsAP_IE_MobileID(mobile_id)
+	}
+}
+template PDU_SGsAP tr_SGsAP_LU_ACCEPT(template hexstring imsi,
+				      template LocationAreaIdValue lai := ?) := {
+	sGsAP_LOCATION_UPDATE_ACCEPT := {
+		messageType := '00001010'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		locationAreaId := tr_SGsAP_IE_Lai(lai),
+		newTMSIorIMSI := *
+	}
+}
+
+/* 8.10 */
+template (value) PDU_SGsAP ts_SGsAP_LU_REJECT(hexstring imsi,
+					      template (value) Reject_Cause rej_cause,
+					      template (omit) LocationAreaIdValue lai) := {
+	sGsAP_LOCATION_UPDATE_REJECT := {
+		messageType := '00001011'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		rejectCause := ts_SGsAP_IE_RejCause(rej_cause),
+		locationAreaId := ts_SGsAP_IE_Lai_omit(lai)
+	}
+}
+template PDU_SGsAP tr_SGsAP_LU_REJECT(template hexstring imsi,
+				      template Reject_Cause rej_cause,
+				      template LocationAreaIdValue lai) := {
+	sGsAP_LOCATION_UPDATE_REJECT := {
+		messageType := '00001011'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		rejectCause := tr_SGsAP_IE_RejCause(rej_cause),
+		locationAreaId := tr_SGsAP_IE_Lai_omit(lai)
+	}
+}
+
+/* 8.11 */
+template (value) PDU_SGsAP ts_SGsAP_LU_REQ(hexstring imsi,
+					   template (value) charstring mme_name,
+					   template (value) EPS_location_update_type eps_lu_type,
+					   template (value) LocationAreaIdValue new_lai) := {
+	sGsAP_LOCATION_UPDATE_REQUEST := {
+		messageType := '00001001'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
+		ePS_LocationUpdateType := ts_SGsAP_IE_EpsLuType(eps_lu_type),
+		newLocationAreaId := ts_SGsAP_IE_Lai(new_lai),
+		oldLocationAreaId := omit,
+		tMSI_Status := omit,
+		iMEI_SV := omit,
+		tAI := omit,
+		eCGI := omit,
+		tMSI_NRI := omit,
+		cS_DomainOperator := omit
+	}
+}
+template PDU_SGsAP tr_SGsAP_LU_REQ(template hexstring imsi,
+				   template charstring mme_name := ?,
+				   template EPS_location_update_type eps_lu_type := ?,
+				   template LocationAreaIdValue new_lai := ?) := {
+	sGsAP_LOCATION_UPDATE_REQUEST := {
+		messageType := '00001001'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
+		ePS_LocationUpdateType := tr_SGsAP_IE_EpsLuType(eps_lu_type),
+		newLocationAreaId := tr_SGsAP_IE_Lai_omit(new_lai),
+		oldLocationAreaId := *,
+		tMSI_Status := *,
+		iMEI_SV := *,
+		tAI := *,
+		eCGI := *,
+		tMSI_NRI := *,
+		cS_DomainOperator := *
+	}
+}
+
+/* 8.12 */
+template (value) PDU_SGsAP ts_SGsAP_MM_INFO_REQ(hexstring imsi,
+						template (value) octetstring mm_info) := {
+	sGsAP_MM_INFORMATION_REQUEST := {
+		messageType := '00011010'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		mM_Information := ts_SGsAP_IE_MmInfo(mm_info)
+	}
+}
+template PDU_SGsAP tr_SGsAP_MM_INFO_REQ(template hexstring imsi,
+					template octetstring mm_info :=?) := {
+	sGsAP_MM_INFORMATION_REQUEST := {
+		messageType := '00011010'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		mM_Information := tr_SGsAP_IE_MmInfo(mm_info)
+	}
+}
+
+/* 8.13 */
+template (value) PDU_SGsAP ts_SGsAP_PAGING_REJ(hexstring imsi,
+						template (value) SGs_Cause cause) := {
+	sGsAP_PAGING_REJECT := {
+		messageType := '00000010'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		sGsCause := ts_SGsAP_IE_SgsCause(cause)
+	}
+}
+template PDU_SGsAP tr_SGsAP_PAGING_REJ(template hexstring imsi,
+					template SGs_Cause cause := ?) := {
+	sGsAP_PAGING_REJECT := {
+		messageType := '00000010'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		sGsCause := tr_SGsAP_IE_SgsCause(cause)
+	}
+}
+
+/* 8.14 */
+template (value) PDU_SGsAP ts_SGsAP_PAGING_REQ(hexstring imsi,
+						template (value) charstring vlr_name,
+						template (value) Service_Indicator serv_ind,
+						template (omit) OCT4 tmsi) :=
+{
+	sGsAP_PAGING_REQUEST := {
+		messageType := '00000001'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name),
+		serviceIndicator := ts_SGsAP_ServiceInd(serv_ind),
+		tMSI := omit,
+		cLI := omit,
+		locationAreaId := omit,
+		globalCN_Id := omit,
+		sS_Code := omit,
+		lCS_Indicator := omit,
+		lCS_ClientIdentity := omit,
+		channelNeeded := omit,
+		eMLPP_Priority := omit,
+		additionalPagingIndicator := omit
+	}
+}
+template PDU_SGsAP tr_SGsAP_PAGING_REQ(template hexstring imsi,
+					template charstring vlr_name,
+					template Service_Indicator serv_ind,
+					template OCT4 tmsi) :=
+{
+	sGsAP_PAGING_REQUEST := {
+		messageType := '00000001'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name),
+		serviceIndicator := tr_SGsAP_ServiceInd(serv_ind),
+		tMSI := *,
+		cLI := *,
+		locationAreaId := *,
+		globalCN_Id := *,
+		sS_Code := *,
+		lCS_Indicator := *,
+		lCS_ClientIdentity := *,
+		channelNeeded := *,
+		eMLPP_Priority := *,
+		additionalPagingIndicator := *
+	}
+}
+
+/* 8.15 */
+template (value) PDU_SGsAP ts_SGsAP_RESET_ACK_MME(template (value) charstring mme_name) := {
+	sGsAP_RESET_ACK := {
+		messageType := '00010110'B,
+		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
+		vLR_Name := omit
+	}
+}
+template (value) PDU_SGsAP ts_SGsAP_RESET_ACK_VLR(template (value) charstring vlr_name) := {
+	sGsAP_RESET_ACK := {
+		messageType := '00010110'B,
+		mME_Name := omit,
+		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name)
+	}
+}
+template PDU_SGsAP tr_SGsAP_RESET_ACK(template charstring mme_name, template charstring vlr_name) := {
+	sGsAP_RESET_ACK := {
+		messageType := '00010110'B,
+		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
+		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name)
+	}
+}
+
+/* 8.16 */
+template (value) PDU_SGsAP ts_SGsAP_RESET_IND_MME(template (value) charstring mme_name) := {
+	sGsAP_RESET_INDICATION := {
+		messageType := '00010101'B,
+		mME_Name := ts_SGsAP_IE_MmeName(mme_name),
+		vLR_Name := omit
+	}
+}
+template (value) PDU_SGsAP ts_SGsAP_RESET_IND_VLR(template (value) charstring vlr_name) := {
+	sGsAP_RESET_INDICATION := {
+		messageType := '00010101'B,
+		mME_Name := omit,
+		vLR_Name := ts_SGsAP_IE_VlrName(vlr_name)
+	}
+}
+template PDU_SGsAP tr_SGsAP_RESET_IND(template charstring mme_name, template charstring vlr_name) := {
+	sGsAP_RESET_INDICATION := {
+		messageType := '00010101'B,
+		mME_Name := tr_SGsAP_IE_MmeName(mme_name),
+		vLR_Name := tr_SGsAP_IE_VlrName(vlr_name)
+	}
+}
+
+/* 8.17 */
+template (value) PDU_SGsAP ts_SGsAP_SERVICE_REQ(hexstring imsi,
+						template (value) Service_Indicator serv_ind,
+					        template (value) UE_EMM_mode emm_mode) := {
+	sGsAP_SERVICE_REQUEST := {
+		messageType := '00000110'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		serviceIndicator := ts_SGsAP_ServiceInd(serv_ind),
+		iMEI_SV := omit,
+		uE_TimeZone := omit,
+		mobileStationClassmark2 := omit,
+		tAI := omit,
+		eCGI := omit,
+		/* optional, but "the MME shall include this IE." */
+		uE_EMM_Mode := ts_SGsAP_IE_UeEmmMode(emm_mode)
+	}
+}
+template PDU_SGsAP tr_SGsAP_SERVICE_REQ(template hexstring imsi,
+					template Service_Indicator serv_ind := ?,
+				        template UE_EMM_mode emm_mode := ?) := {
+	sGsAP_SERVICE_REQUEST := {
+		messageType := '00000110'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		serviceIndicator := tr_SGsAP_ServiceInd(serv_ind),
+		iMEI_SV := *,
+		uE_TimeZone := *,
+		mobileStationClassmark2 := *,
+		tAI := *,
+		eCGI := *,
+		/* optional, but "the MME shall include this IE." */
+		uE_EMM_Mode := tr_SGsAP_IE_UeEmmMode(emm_mode)
+	}
+}
+
+
+/* 8.18 */
+template (value) PDU_SGsAP ts_SGsAP_STATUS(template (omit) hexstring imsi,
+					   template (value) SGs_Cause cause,
+					   template (value) octetstring err_msg) := {
+	sGsAP_STATUS := {
+		messageType := '00011101'B,
+		iMSI := ts_SGsAP_IMSI_omit(imsi),
+		sGsCause := ts_SGsAP_IE_SgsCause(cause),
+		erroneousMessage := ts_SGsAP_IE_ErrMsg(err_msg)
+	}
+}
+template PDU_SGsAP tr_SGsAP_STATUS(template hexstring imsi,
+				   template SGs_Cause cause,
+				   template octetstring err_msg) := {
+	sGsAP_STATUS := {
+		messageType := '00011101'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		sGsCause := tr_SGsAP_IE_SgsCause(cause),
+		erroneousMessage := tr_SGsAP_IE_ErrMsg(err_msg)
+	}
+}
+
+
+/* 8.19 */
+template (value) PDU_SGsAP ts_SGsAP_TMSI_REALL_CMPL(hexstring imsi) := {
+	sGsAP_TMSI_REALLOCATION_COMPLETE := {
+		messageType := '00001100'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_TMSI_REALL_CMPL(template hexstring imsi) := {
+	sGsAP_TMSI_REALLOCATION_COMPLETE := {
+		messageType := '00001100'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+	}
+}
+
+/* 8.20 */
+template (value) PDU_SGsAP ts_SGsAP_UE_ACT_IND(hexstring imsi) := {
+	sGsAP_UE_ACTIVITY_INDICATION := {
+		messageType := '00010000'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+		/* Rel 14: Max UE Avail Time */
+	}
+}
+template PDU_SGsAP tr_SGsAP_UE_ACT_IND(template hexstring imsi) := {
+	sGsAP_UE_ACTIVITY_INDICATION := {
+		messageType := '00010000'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+		/* Rel 14: Max UE Avail Time */
+	}
+}
+
+/* 8.21 */
+template (value) PDU_SGsAP ts_SGsAP_UE_UNREACHABLE(hexstring imsi,
+						   template (value) SGs_Cause cause) := {
+	sGsAP_UE_UNREACHABLE := {
+		messageType := '00011111'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		sGsCause := ts_SGsAP_IE_SgsCause(cause)
+		/* Rel 14: Requested Retransmission Time */
+		/* Rel 14: Additional UE Unreachable indicators */
+	}
+}
+template PDU_SGsAP tr_SGsAP_UE_UNREACHABLE(template hexstring imsi,
+					   template SGs_Cause cause := ?) := {
+	sGsAP_UE_UNREACHABLE := {
+		messageType := '00011111'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		sGsCause := tr_SGsAP_IE_SgsCause(cause)
+		/* Rel 14: Requested Retransmission Time */
+		/* Rel 14: Additional UE Unreachable indicators */
+	}
+}
+
+/* 8.22 */
+template (value) PDU_SGsAP ts_SGsAP_UL_UD(hexstring imsi,
+					  template (value) octetstring nas_msg) := {
+	sGsAP_UPLINK_UNITDATA := {
+		messageType := '00001000'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		nAS_MessageContainer := ts_SGsAP_NasContainer(nas_msg),
+		iMEI_SV := omit,
+		uE_TimeZone := omit,
+		mobileStationClassmark2 := omit,
+		tAI := omit,
+		eCGI := omit
+	}
+}
+template PDU_SGsAP tr_SGsAP_UL_UD(template hexstring imsi,
+				  template octetstring nas_msg := ?) := {
+	sGsAP_UPLINK_UNITDATA := {
+		messageType := '00001000'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		nAS_MessageContainer := tr_SGsAP_NasContainer(nas_msg),
+		iMEI_SV := *,
+		uE_TimeZone := *,
+		mobileStationClassmark2 := *,
+		tAI := *,
+		eCGI := *
+	}
+}
+
+/* 8.23 */
+template (value) PDU_SGsAP ts_SGsAP_RELEASE_REQ(hexstring imsi,
+						template (value) SGs_Cause cause) := {
+	sGsAP_RELEASE_REQUEST := {
+		messageType := '00011011'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		sGsCause := ts_SGsAP_IE_SgsCause(cause)
+	}
+}
+template PDU_SGsAP tr_SGsAP_RELEASE_REQ(template hexstring imsi,
+					template SGs_Cause cause) := {
+	sGsAP_RELEASE_REQUEST := {
+		messageType := '00011011'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		sGsCause := tr_SGsAP_IE_SgsCause(cause)
+	}
+}
+
+/* 8.24 */
+template (value) PDU_SGsAP ts_SGsAP_SERVICE_ABORT_REQ(hexstring imsi) := {
+	sGsAP_SERVICE_ABORT_REQUEST := {
+		messageType := '00010111'B,
+		iMSI := ts_SGsAP_IMSI(imsi)
+	}
+}
+template PDU_SGsAP tr_SGsAP_SERVICE_ABORT_REQ(template hexstring imsi) := {
+	sGsAP_SERVICE_ABORT_REQUEST := {
+		messageType := '00010111'B,
+		iMSI := tr_SGsAP_IMSI(imsi)
+	}
+}
+
+/* 8.25 */
+template (value) PDU_SGsAP ts_SGsAP_MO_CSFB_IND(hexstring imsi) := {
+	sGsAP_MO_CSFB_INDICATION := {
+		messageType := '00011000'B,
+		iMSI := ts_SGsAP_IMSI(imsi),
+		tAI := omit,
+		eCGI := omit
+	}
+}
+template PDU_SGsAP tr_SGsAP_MO_CSFB_IND(template hexstring imsi) := {
+	sGsAP_MO_CSFB_INDICATION := {
+		messageType := '00011000'B,
+		iMSI := tr_SGsAP_IMSI(imsi),
+		tAI := *,
+		eCGI := *
+	}
+}
+
+
+
+
+
+
+}
