diff --git a/deps/Makefile b/deps/Makefile
index cb9e359..f2f38bd 100644
--- a/deps/Makefile
+++ b/deps/Makefile
@@ -40,6 +40,7 @@
 			titan.ProtocolModules.LLC_v7.1.0 \
 			titan.ProtocolModules.MobileL3_v13.4.0 \
 			titan.ProtocolModules.NS_v7.3.0 \
+			titan.ProtocolModules.SGsAP_13.2.0 \
 			titan.ProtocolModules.SNDCP_v7.0.0 \
 			titan.ProtocolEmulations.SCCP
 
@@ -77,6 +78,7 @@
 titan.ProtocolModules.RTP_commit=		R.5.A
 titan.ProtocolModules.ROSE_commit=		R.1.C
 titan.ProtocolModules.SCTP_commit=		R.2.A
+titan.ProtocolModules.SGsAP_13.2.0_commit=	81544cf008378058b95ff20d33f3770fadb7e235
 titan.ProtocolModules.SDP_commit=		R.14.A
 titan.ProtocolModules.SMPP_commit=		R.2.A-2-gb7aee69
 titan.ProtocolModules.SNDCP_v7.0.0_commit=	R.2.A
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 := *
+	}
+}
+
+
+
+
+
+
+}
diff --git a/msc/gen_links.sh b/msc/gen_links.sh
index a191aa5..df646d9 100755
--- a/msc/gen_links.sh
+++ b/msc/gen_links.sh
@@ -81,6 +81,9 @@
 FILES="SMPP_EncDec.cc  SMPP_Types.ttcn"
 gen_links $DIR $FILES
 
+DIR=$BASEDIR/titan.ProtocolModules.SGsAP_13.2.0/src
+FILES="SGsAP_Types.ttcn"
+gen_links $DIR $FILES
 
 DIR=../library
 FILES="General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn MNCC_Types.ttcn MNCC_EncDec.cc MNCC_CodecPort.ttcn mncc.h MNCC_Emulation.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc "
@@ -90,7 +93,8 @@
 FILES+="RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunctDef.cc "
 FILES+="MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunctDef.cc "
 FILES+="SMPP_CodecPort.ttcn SMPP_CodecPort_CtrlFunct.ttcn SMPP_CodecPort_CtrlFunctDef.cc SMPP_Emulation.ttcn SMPP_Templates.ttcn "
-FILES+="SS_Templates.ttcn SCCP_Templates.ttcn USSD_Helpers.ttcn"
+FILES+="SS_Templates.ttcn SCCP_Templates.ttcn USSD_Helpers.ttcn "
+FILES+="SGsAP_Templates.ttcn "
 gen_links $DIR $FILES
 
 ignore_pp_results
