diff --git a/5G_system_TS29518_Namf_CNL113890.tpd b/5G_system_TS29518_Namf_CNL113890.tpd
new file mode 100644
index 0000000..f7797a9
--- /dev/null
+++ b/5G_system_TS29518_Namf_CNL113890.tpd
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>5G_system_TS29518_Namf_CNL113890</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="5G_system_TS29502_Nsmf_CNL113882" projectLocationURI="../5G_system_TS29502_Nsmf_CNL113882/5G_system_TS29502_Nsmf_CNL113882.tpd"/>
+    <ReferencedProject name="5G_system_TS29531_Nnssf_CNL113901" projectLocationURI="../5G_system_TS29531_Nnssf_CNL113901/5G_system_TS29531_Nnssf_CNL113901.tpd"/>
+    <ReferencedProject name="5G_system_TS29571_CommonData_CNL113880" projectLocationURI="../5G_system_TS29571_CommonData_CNL113880/5G_system_TS29571_CommonData_CNL113880.tpd"/>
+    <ReferencedProject name="5G_system_TS29572_Nlmf_CNL113892" projectLocationURI="../5G_system_TS29572_Nlmf_CNL113892/5G_system_TS29572_Nlmf_CNL113892.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/TS29518_Namf_Communication.ttcn" relativeURI="src/TS29518_Namf_Communication.ttcn"/>
+    <FileResource projectRelativePath="src/TS29518_Namf_EventExposure.ttcn" relativeURI="src/TS29518_Namf_EventExposure.ttcn"/>
+    <FileResource projectRelativePath="src/TS29518_Namf_Location.ttcn" relativeURI="src/TS29518_Namf_Location.ttcn"/>
+    <FileResource projectRelativePath="src/TS29518_Namf_MT.ttcn" relativeURI="src/TS29518_Namf_MT.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/5G_system_TS29518_Namf_CNL113890</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/doc/5G_system_TS29518_Namf_Description.adoc b/doc/5G_system_TS29518_Namf_Description.adoc
new file mode 100644
index 0000000..14ac7a7
--- /dev/null
+++ b/doc/5G_system_TS29518_Namf_Description.adoc
@@ -0,0 +1,144 @@
+= 5G system TS29518 Namf Protocol Modules for TTCN-3 Toolset with TITAN, Description
+:author: Gábor Szalai
+:toc: left
+
+== About This Document
+
+This is the description for the 5G system TS29518 Namf protocol module. The 5G system TS29518 Namf protocol modules are developed for the TTCN-3 Toolset with Titan. 
+
+== Functionality
+
+The 5G system TS29518 Namf protocol module implements the object structures of the 3GPP TS 29518 v15.1.0<<_5, [5]>> in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language and correctly encoding/decoding messages when executing test suites using the Titan TTCN-3 test environment.
+The 5G system TS29518 Namf protocol module uses Titan’s JSON encoding <<_3, [3]>> and hence is usable with the Titan test toolset only.
+
+=== System Requirements
+Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However, in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:
+
+* Titan TTCN-3 Test Executor version CRL 113 200/6 R5A (6.5.pl0) or higher installed. For Installation Guide see <<_2, [2]>>. Please note: This version of the test port is not compatible with Titan releases earlier than CRL 113 200/6 R5A.
+
+===	Installation
+The set of protocol modules can be used in developing TTCN-3 test suites using any text editor. Since the 5G system TS29518 Namf protocol is used as a part of a TTCN-3 test suite, this requires TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>>.
+
+== Interface description
+
+=== Encoding/decoding and other related functions
+This product also contains encoding/decoding functions, which assure correct encoding of messages when sent from Titan and correct decoding of messages when received by Titan. 
+
+==== Implemented encoding and decoding functions
+
+[source]
+----
+Name	Type of formal parameters	Type of return value
+f_enc_UeContextCreateData(in UeContextCreateData pdu) return octetstring 
+f_dec_UeContextCreateData(in octetstring stream, out UeContextCreateData pdu) return integer 
+f_enc_UeContextCreatedData(in UeContextCreatedData pdu) return octetstring 
+f_dec_UeContextCreatedData(in octetstring stream, out UeContextCreatedData pdu) return integer 
+f_enc_UeContextCreateError(in UeContextCreateError pdu) return octetstring 
+f_dec_UeContextCreateError(in octetstring stream, out UeContextCreateError pdu) return integer 
+f_enc_UEContextRelease(in UEContextRelease pdu) return octetstring 
+f_dec_UEContextRelease(in octetstring stream, out UEContextRelease pdu) return integer 
+f_enc_AssignEbiData(in AssignEbiData pdu) return octetstring 
+f_dec_AssignEbiData(in octetstring stream, out AssignEbiData pdu) return integer 
+f_enc_AssignedEbiData(in AssignedEbiData pdu) return octetstring 
+f_dec_AssignedEbiData(in octetstring stream, out AssignedEbiData pdu) return integer 
+f_enc_AssignEbiError(in AssignEbiError pdu) return octetstring 
+f_dec_AssignEbiError(in octetstring stream, out AssignEbiError pdu) return integer 
+f_enc_UeContextTransferReqData(in UeContextTransferReqData pdu) return octetstring 
+f_dec_UeContextTransferReqData(in octetstring stream, out UeContextTransferReqData pdu) return integer 
+f_enc_UeContextTransferRspData(in UeContextTransferRspData pdu) return octetstring 
+f_dec_UeContextTransferRspData(in octetstring stream, out UeContextTransferRspData pdu) return integer 
+f_enc_UeRegStatusUpdateReqData(in UeRegStatusUpdateReqData pdu) return octetstring 
+f_dec_UeRegStatusUpdateReqData(in octetstring stream, out UeRegStatusUpdateReqData pdu) return integer 
+f_enc_UeRegStatusUpdateRspData(in UeRegStatusUpdateRspData pdu) return octetstring 
+f_dec_UeRegStatusUpdateRspData(in octetstring stream, out UeRegStatusUpdateRspData pdu) return integer 
+f_enc_N1N2MessageTransferReqData(in N1N2MessageTransferReqData pdu) return octetstring 
+f_dec_N1N2MessageTransferReqData(in octetstring stream, out N1N2MessageTransferReqData pdu) return integer 
+f_enc_N1N2MessageTransferRspData(in N1N2MessageTransferRspData pdu) return octetstring 
+f_dec_N1N2MessageTransferRspData(in octetstring stream, out N1N2MessageTransferRspData pdu) return integer 
+f_enc_N1N2MessageTransferError(in N1N2MessageTransferError pdu) return octetstring 
+f_dec_N1N2MessageTransferError(in octetstring stream, out N1N2MessageTransferError pdu) return integer 
+f_enc_N1N2MsgTxfrFailureNotification(in N1N2MsgTxfrFailureNotification pdu) return octetstring 
+f_dec_N1N2MsgTxfrFailureNotification(in octetstring stream, out N1N2MsgTxfrFailureNotification pdu) return integer 
+f_enc_UeN1N2InfoSubscriptionCreateData(in UeN1N2InfoSubscriptionCreateData pdu) return octetstring 
+f_dec_UeN1N2InfoSubscriptionCreateData(in octetstring stream, out UeN1N2InfoSubscriptionCreateData pdu) return integer 
+f_enc_UeN1N2InfoSubscriptionCreatedData(in UeN1N2InfoSubscriptionCreatedData pdu) return octetstring 
+f_dec_UeN1N2InfoSubscriptionCreatedData(in octetstring stream, out UeN1N2InfoSubscriptionCreatedData pdu) return integer 
+f_enc_N2InformationTransferReqData(in N2InformationTransferReqData pdu) return octetstring 
+f_dec_N2InformationTransferReqData(in octetstring stream, out N2InformationTransferReqData pdu) return integer 
+f_enc_N2InformationTransferRspData(in N2InformationTransferRspData pdu) return octetstring 
+f_dec_N2InformationTransferRspData(in octetstring stream, out N2InformationTransferRspData pdu) return integer 
+f_enc_N2InformationTransferError(in N2InformationTransferError pdu) return octetstring 
+f_dec_N2InformationTransferError(in octetstring stream, out N2InformationTransferError pdu) return integer 
+f_enc_NonUeN2InfoSubscriptionCreateData(in NonUeN2InfoSubscriptionCreateData pdu) return octetstring 
+f_dec_NonUeN2InfoSubscriptionCreateData(in octetstring stream, out NonUeN2InfoSubscriptionCreateData pdu) return integer 
+f_enc_NonUeN2InfoSubscriptionCreatedData(in NonUeN2InfoSubscriptionCreatedData pdu) return octetstring 
+f_dec_NonUeN2InfoSubscriptionCreatedData(in octetstring stream, out NonUeN2InfoSubscriptionCreatedData pdu) return integer 
+f_enc_N2InformationNotification(in N2InformationNotification pdu) return octetstring 
+f_dec_N2InformationNotification(in octetstring stream, out N2InformationNotification pdu) return integer 
+f_enc_SubscriptionData(in SubscriptionData pdu) return octetstring 
+f_dec_SubscriptionData(in octetstring stream, out SubscriptionData pdu) return integer 
+f_enc_AmfStatusChangeNotification(in AmfStatusChangeNotification pdu) return octetstring 
+f_dec_AmfStatusChangeNotification(in octetstring stream, out AmfStatusChangeNotification pdu) return integer 
+f_enc_AmfCreateEventSubscription(in AmfCreateEventSubscription pdu) return octetstring 
+f_dec_AmfCreateEventSubscription(in octetstring stream, out AmfCreateEventSubscription pdu) return integer 
+f_enc_AmfCreatedEventSubscription(in AmfCreatedEventSubscription pdu) return octetstring 
+f_dec_AmfCreatedEventSubscription(in octetstring stream, out AmfCreatedEventSubscription pdu) return integer 
+f_enc_AmfEventNotification(in AmfEventNotification pdu) return octetstring 
+f_dec_AmfEventNotification(in octetstring stream, out AmfEventNotification pdu) return integer 
+f_enc_AmfUpdateEventSubscriptionItem(in AmfUpdateEventSubscriptionItem pdu) return octetstring 
+f_dec_AmfUpdateEventSubscriptionItem(in octetstring stream, out AmfUpdateEventSubscriptionItem pdu) return integer 
+f_enc_AmfUpdatedEventSubscription(in AmfUpdatedEventSubscription pdu) return octetstring 
+f_dec_AmfUpdatedEventSubscription(in octetstring stream, out AmfUpdatedEventSubscription pdu) return integer 
+f_enc_RequestPosInfo(in RequestPosInfo pdu) return octetstring 
+f_dec_RequestPosInfo(in octetstring stream, out RequestPosInfo pdu) return integer 
+f_enc_ProvidePosInfo(in ProvidePosInfo pdu) return octetstring 
+f_dec_ProvidePosInfo(in octetstring stream, out ProvidePosInfo pdu) return integer 
+f_enc_NotifiedPosInfo(in NotifiedPosInfo pdu) return octetstring 
+f_dec_NotifiedPosInfo(in octetstring stream, out NotifiedPosInfo pdu) return integer 
+f_enc_RequestLocInfo(in RequestLocInfo pdu) return octetstring 
+f_dec_RequestLocInfo(in octetstring stream, out RequestLocInfo pdu) return integer 
+f_enc_ProvideLocInfo(in ProvideLocInfo pdu) return octetstring 
+f_dec_ProvideLocInfo(in octetstring stream, out ProvideLocInfo pdu) return integer 
+f_enc_UeContextInfo(in UeContextInfo pdu) return octetstring 
+f_dec_UeContextInfo(in octetstring stream, out UeContextInfo pdu) return integer 
+f_enc_EnableUeReachabilityReqData(in EnableUeReachabilityReqData pdu) return octetstring 
+f_dec_EnableUeReachabilityReqData(in octetstring stream, out EnableUeReachabilityReqData pdu) return integer 
+f_enc_EnableUeReachabilityRspData(in EnableUeReachabilityRspData pdu) return octetstring 
+f_dec_EnableUeReachabilityRspData(in octetstring stream, out EnableUeReachabilityRspData pdu) return integer 
+----
+
+== Usage
+
+The protocol module provides abstract data types for JSON objects used by the services defined in the standard <<_5, [5]>>. The protocol module provides encoder and decoder functions for the JSON objects. The decoder function validates the received JSON object based on the JSON schema as well. Only the validated JSON value is decoded.
+
+== Terminology	
+
+=== Abbreviations
+
+JSON:: JavaScript Object Notation
+
+PDU:: Protocol Data Unit
+
+TTCN-3:: Testing and Test Control Notation version 3
+
+== References
+
+[[_1]]
+[1]	ETSI ES 201 873-1 v4.4.1 (2012-04) +
+The Testing and Test Control Notation version 3. Part 1: Core Language
+
+[[_2]]
+[2]	1/ 198 17-CRL 113 200/6 Uen +
+Installation Guide for the TITAN TTCN-3 Test Executor
+
+[[_3]]
+[3]	2/198 17-CRL 113 200/6 Uen +
+Programmer's Technical Reference for Titan TTCN-3 Test Executor
+
+[[_4]]
+[4]	https://www.json.org
+
+[[_5]]
+[5] 3GPP TS 29518 v15.1.0+
+5G System; Access and Mobility Management Services; Stage 3
+
diff --git a/doc/change.log b/doc/change.log
new file mode 100644
index 0000000..1220b3b
--- /dev/null
+++ b/doc/change.log
@@ -0,0 +1,9 @@
+= 5G system TS29518 Namf Protocol Modules for TTCN-3 Toolset with TITAN, Change log
+:author: Gábor Szalai
+:toc: left
+
+== Changes
+
+=== R1A
+
+Initial revision
\ No newline at end of file
diff --git a/src/TS29518_Namf_Communication.ttcn b/src/TS29518_Namf_Communication.ttcn
new file mode 100644
index 0000000..b60d1de
--- /dev/null
+++ b/src/TS29518_Namf_Communication.ttcn
@@ -0,0 +1,721 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29518_Namf_Communication.ttcn
+//  Description:	      Type definitions for 3GPP TS29518
+/////////////////////////////////////////////// 
+module TS29518_Namf_Communication {
+
+  import from TS29571_CommonData all
+  import from TS29502_Nsmf_PDUSession all
+  import from TS29572_Nlmf_Location all
+  import from TS29531_Nnssf_NSSelection all
+  import from TS29518_Namf_EventExposure all
+
+external function f_enc_UeContextCreateData(in UeContextCreateData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeContextCreateData(in octetstring stream, out UeContextCreateData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeContextCreatedData(in UeContextCreatedData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeContextCreatedData(in octetstring stream, out UeContextCreatedData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeContextCreateError(in UeContextCreateError pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeContextCreateError(in octetstring stream, out UeContextCreateError pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UEContextRelease(in UEContextRelease pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UEContextRelease(in octetstring stream, out UEContextRelease pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_AssignEbiData(in AssignEbiData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_AssignEbiData(in octetstring stream, out AssignEbiData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_AssignedEbiData(in AssignedEbiData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_AssignedEbiData(in octetstring stream, out AssignedEbiData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_AssignEbiError(in AssignEbiError pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_AssignEbiError(in octetstring stream, out AssignEbiError pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeContextTransferReqData(in UeContextTransferReqData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeContextTransferReqData(in octetstring stream, out UeContextTransferReqData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeContextTransferRspData(in UeContextTransferRspData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeContextTransferRspData(in octetstring stream, out UeContextTransferRspData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeRegStatusUpdateReqData(in UeRegStatusUpdateReqData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeRegStatusUpdateReqData(in octetstring stream, out UeRegStatusUpdateReqData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeRegStatusUpdateRspData(in UeRegStatusUpdateRspData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeRegStatusUpdateRspData(in octetstring stream, out UeRegStatusUpdateRspData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N1N2MessageTransferReqData(in N1N2MessageTransferReqData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N1N2MessageTransferReqData(in octetstring stream, out N1N2MessageTransferReqData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N1N2MessageTransferRspData(in N1N2MessageTransferRspData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N1N2MessageTransferRspData(in octetstring stream, out N1N2MessageTransferRspData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N1N2MessageTransferError(in N1N2MessageTransferError pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N1N2MessageTransferError(in octetstring stream, out N1N2MessageTransferError pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N1N2MsgTxfrFailureNotification(in N1N2MsgTxfrFailureNotification pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N1N2MsgTxfrFailureNotification(in octetstring stream, out N1N2MsgTxfrFailureNotification pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeN1N2InfoSubscriptionCreateData(in UeN1N2InfoSubscriptionCreateData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeN1N2InfoSubscriptionCreateData(in octetstring stream, out UeN1N2InfoSubscriptionCreateData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeN1N2InfoSubscriptionCreatedData(in UeN1N2InfoSubscriptionCreatedData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeN1N2InfoSubscriptionCreatedData(in octetstring stream, out UeN1N2InfoSubscriptionCreatedData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N2InformationTransferReqData(in N2InformationTransferReqData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N2InformationTransferReqData(in octetstring stream, out N2InformationTransferReqData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N2InformationTransferRspData(in N2InformationTransferRspData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N2InformationTransferRspData(in octetstring stream, out N2InformationTransferRspData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N2InformationTransferError(in N2InformationTransferError pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N2InformationTransferError(in octetstring stream, out N2InformationTransferError pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_NonUeN2InfoSubscriptionCreateData(in NonUeN2InfoSubscriptionCreateData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_NonUeN2InfoSubscriptionCreateData(in octetstring stream, out NonUeN2InfoSubscriptionCreateData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_NonUeN2InfoSubscriptionCreatedData(in NonUeN2InfoSubscriptionCreatedData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_NonUeN2InfoSubscriptionCreatedData(in octetstring stream, out NonUeN2InfoSubscriptionCreatedData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_N2InformationNotification(in N2InformationNotification pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_N2InformationNotification(in octetstring stream, out N2InformationNotification pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SubscriptionData(in SubscriptionData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SubscriptionData(in octetstring stream, out SubscriptionData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_AmfStatusChangeNotification(in AmfStatusChangeNotification pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_AmfStatusChangeNotification(in octetstring stream, out AmfStatusChangeNotification pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set SubscriptionData {
+    TS29571_CommonData.Uri    amfStatusUri,
+    set of       TS29571_CommonData.Guami    guamiList optional
+  }
+
+  type set AmfStatusChangeNotification {
+    set of       AmfStatusInfo    amfStatusInfoList optional
+  }
+
+  type set AmfStatusInfo {
+    set of       TS29571_CommonData.Guami    guamiList optional,
+    StatusChange    statusChange,
+    TS29571_CommonData.AmfName    targetAmfRemoval optional,
+    TS29571_CommonData.AmfName    targetAmfFailure optional
+  }
+
+  type set AssignEbiData {
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    set of       TS29571_CommonData.Arp    arpList optional,
+    set of       EpsBearerId    releasedEbiList optional
+  }
+
+  type set AssignedEbiData {
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    set of       TS29502_Nsmf_PDUSession.EbiArpMapping    assignedEbiList optional,
+    set of       TS29571_CommonData.Arp    failedArpList optional,
+    set of       EpsBearerId    releasedEbiList optional
+  }
+
+  type set AssignEbiFailed {
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    set of       TS29571_CommonData.Arp    failedArpList optional
+  }
+
+  type set UEContextRelease {
+    TS29571_CommonData.Supi    supi optional,
+    boolean unauthenticatedSupi optional,
+    TS29571_CommonData.NgApCause    ngapCause
+  }
+
+  type set N2InformationTransferReqData {
+    set of       TS29571_CommonData.Tai    taiList optional,
+    RatSelector    ratSelector optional,
+    set of       TS29571_CommonData.Ecgi    ecgiList optional,
+    set of       TS29571_CommonData.Ncgi    ncgiList optional,
+    set of       TS29571_CommonData.GlobalRanNodeId    globalRanNodeList optional,
+    N2InfoContainer    n2Information,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set NonUeN2InfoSubscriptionCreateData {
+    set of       TS29571_CommonData.GlobalRanNodeId    globalRanNodeList optional,
+    set of       TS29571_CommonData.AccessType    anTypeList optional,
+    N2InformationClass    n2InformationClass,
+    TS29571_CommonData.Uri    n2NotifyCallbackUri,
+    TS29571_CommonData.NfInstanceId    nfId optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set NonUeN2InfoSubscriptionCreatedData {
+    charstring n2NotifySubscriptionId,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeN1N2InfoSubscriptionCreateData {
+    N2InformationClass    n2InformationClass optional,
+    TS29571_CommonData.Uri    n2NotifyCallbackUri optional,
+    N1MessageClass    n1MessageClass optional,
+    TS29571_CommonData.Uri    n1NotifyCallbackUri optional,
+    TS29571_CommonData.NfInstanceId    nfId optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeN1N2InfoSubscriptionCreatedData {
+    charstring n1n2NotifySubscriptionId,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set N2InformationNotification {
+    charstring n2NotifySubscriptionId,
+    N2InfoContainer    n2InfoContainer,
+    set of       TS29571_CommonData.PduSessionId    toReleaseSessionList optional,
+    TS29572_Nlmf_Location.CorrelationID    lcsCorrelationId optional
+  }
+
+  type set N2InfoContainer {
+    N2InformationClass    n2InformationClass,
+    N2SmInformation    smInfo optional,
+    NrppaInformation    nrppaInfo optional,
+    PwsInformation    pwsInfo optional,
+    AreaOfValidity    areaOfValidity optional
+  }
+
+  type set N1MessageNotification {
+    charstring n1NotifySubscriptionId optional,
+    N1MessageContainer    n1MessageContainer,
+    TS29572_Nlmf_Location.CorrelationID    lcsCorrelationId optional,
+    RegistrationContextContainer    registrationCtxtContainer optional
+  }
+
+  type set N1MessageContainer {
+    N1MessageClass    n1MessageClass,
+    RefToBinaryData    n1MessageContent,
+    TS29571_CommonData.NfInstanceId    nfId optional
+  }
+
+  type set N1N2MessageTransferReqData {
+    N1MessageContainer    n1MessageContainer optional,
+    N2InfoContainer    n2InfoContainer optional,
+    boolean skipInd optional,
+    boolean lastMsgIndication optional,
+    charstring sessionId optional,
+    Ppi    ppi optional,
+    TS29571_CommonData.Arp    arp optional,
+    TS29571_CommonData.FiveQi    fiveqi optional,
+    TS29571_CommonData.Uri    n1n2FailureTxfNotifURI optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  } with {
+    variant (fiveqi) "name as '5qi'"
+  }
+
+  type set N1N2MessageTransferRspData {
+    N1N2MessageTransferCause    cause,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set RegistrationContextContainer {
+    UeContext    ueContext,
+    TS29571_CommonData.TimeZone    localTimeZone optional,
+    TS29571_CommonData.AccessType    anType,
+    integer anN2ApId,
+    TS29571_CommonData.NgRanIdentifier    ranNodeId,
+    TS29571_CommonData.Ipv4Addr    anN2IPv4Addr optional,
+    TS29571_CommonData.Ipv6Addr    anN2IPv6Addr optional,
+    TS29531_Nnssf_NSSelection.AllowedNssai    allowedNssai optional,
+    set of       TS29531_Nnssf_NSSelection.ConfiguredSnssai    configuredNssai optional,
+    set of       TS29571_CommonData.Snssai    rejectedNssaiInPlmn optional,
+    set of       TS29571_CommonData.Snssai    rejectedNssaiInTa optional
+  }
+
+  type set AreaOfValidity {
+    set of       TS29571_CommonData.Tai    taiList optional
+  }
+
+  type set RefToBinaryData {
+    charstring contentId
+  }
+
+  type set UeContextTransferReqData {
+    TransferReason    reason,
+    N1MessageContainer    regRequest optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeContextTransferRspData {
+    UeContext    ueContext,
+    TS29571_CommonData.Uri    regCompleteNotifyUri,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeContext {
+    TS29571_CommonData.Supi    supi optional,
+    boolean supiUnauthInd optional,
+    set of       TS29571_CommonData.Gpsi    gpsiList optional,
+    TS29571_CommonData.Pei    pei optional,
+    set of       TS29571_CommonData.GroupId    groupList optional,
+    DrxParameter    drxParameter optional,
+    TS29571_CommonData.RfspIndex    subRfsp optional,
+    TS29571_CommonData.RfspIndex    usedRfsp optional,
+    TS29571_CommonData.Ambr    subUeAmbr optional,
+    SmsSupport    smsSupport,
+    TS29571_CommonData.NfInstanceId    smsfId optional,
+    SeafData    seafData optional,
+    FivegmmCapability    fivegmmCapability optional,
+    TS29571_CommonData.NfInstanceId    pcfId optional,
+    TS29571_CommonData.Uri    pcfAmPolicyUri optional,
+    set of       AMPolicyReqTrigger    amPolicyReqTriggerList optional,
+    TS29571_CommonData.NfInstanceId    hpcfId optional,
+    set of       TS29571_CommonData.RatType    restrictedRatList optional,
+    set of       TS29571_CommonData.Area    forbiddenAreaList optional,
+    TS29571_CommonData.ServiceAreaRestriction    serviceAreaRestriction optional,
+    set of       TS29571_CommonData.CoreNetworkType    restrictedCoreNwTypeList optional,
+    set of       TS29518_Namf_EventExposure.AmfEventSubscription    eventSubscriptionList optional,
+    set of       MmContext    mmContextList optional,
+    set of       PduSessionContext    sessionContextList optional,
+    TS29571_CommonData.TraceData    traceData optional
+  } with {
+    variant (fivegmmCapability) "name as '5gmmCapability'"
+  }
+
+
+  type set N2SmInformation {
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    N2InfoContent    n2InfoContent optional,
+    N1MessageContainer    nasPdu optional,
+    TS29571_CommonData.Snssai    sNssai optional,
+    boolean subjectToHo optional
+  }
+
+  type set N2InfoContent {
+    TS29571_CommonData.Uinteger    ngapMessageType optional,
+    NgapIeType    ngapIeType,
+    RefToBinaryData    ngapData
+  }
+
+  type set NrppaInformation {
+    TS29571_CommonData.NfInstanceId    nfId optional,
+    N2InfoContent    nrppaPdu
+  }
+
+  type set PwsInformation {
+    TS29571_CommonData.Uint16    messageIdentifier,
+    TS29571_CommonData.Uint16    serialNumber,
+    N2InfoContent    pwsContainer,
+    boolean sendN2Container optional,
+    OmcIdentifier    omcId optional
+  }
+
+  type set N1N2MsgTxfrFailureNotification {
+    N1N2MessageTransferCause    cause,
+    TS29571_CommonData.Uri    n1n2MsgDataUri
+  }
+
+  type set N1N2MessageTransferError {
+    TS29571_CommonData.ProblemDetails    error_,
+    N1N2MsgTxfrErrDetail    errInfo optional
+  } with {
+    variant (error_) "name as 'error'"
+  }
+
+  type set N1N2MsgTxfrErrDetail {
+    TS29571_CommonData.Uinteger    retryAfter optional,
+    TS29571_CommonData.Arp    highestPrioArp optional
+  }
+
+  type set N2InformationTransferRspData {
+    N2InformationTransferResult    result,
+    PWSResponseData    pwsRspData optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set MmContext {
+    TS29571_CommonData.AccessType    accessType,
+    NasSecurityMode    nasSecurityMode optional,
+    NasCount    nasDownlinkCount optional,
+    NasCount    nasUplinkCount optional,
+    UeSecurityCapability    ueSecurityCapability optional,
+    S1UeNetworkCapability    s1UeNetworkCapability optional,
+    set of       TS29571_CommonData.Snssai    allowedNssaiList optional,
+    set of       NssaiMapping    nssaiMappingList optional,
+    set of       TS29531_Nnssf_NSSelection.NsiId    nsInstanceList optional,
+    ExpectedUeBehavior    expectedUEbehavior optional
+  }
+
+  type set SeafData {
+    NgKsi    ngKsi,
+    KeyAmf    keyAmf,
+    charstring nh, // (pattern "^[A-Fa-f0-9]+$") optional,
+    TS29571_CommonData.Uinteger    ncc optional,
+    boolean keyAmfChangeInd optional
+  }
+
+  type set NasSecurityMode {
+    IntegrityAlgorithm    integrityAlgorithm,
+    CipheringAlgorithm    cipheringAlgorithm
+  }
+
+  type set PduSessionContext {
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    TS29571_CommonData.Uri    smContextRef,
+    TS29571_CommonData.Snssai    sNssai,
+    TS29571_CommonData.Dnn    dnn,
+    TS29571_CommonData.AccessType    accessType,
+    set of       TS29502_Nsmf_PDUSession.EbiArpMapping    allocatedEbiList,
+    TS29571_CommonData.NfInstanceId    hsmfId optional,
+    TS29571_CommonData.NfInstanceId    vsmfId optional,
+    TS29531_Nnssf_NSSelection.NsiId    nsInstance optional
+  }
+
+  type set NssaiMapping {
+    TS29571_CommonData.Snssai    mappedSnssai,
+    TS29571_CommonData.Snssai    hSnssai
+  }
+
+  type set UeRegStatusUpdateReqData {
+    UeContextTransferStatus    transferStatus,
+    set of       TS29571_CommonData.PduSessionId    toReleaseSessionList optional
+  }
+
+  type set UeRegStatusUpdateRspData {
+    boolean regStatusTransferComplete
+  }
+
+  type set AssignEbiError {
+    TS29571_CommonData.ProblemDetails    error_,
+    AssignEbiFailed    failureDetails
+  } with {
+    variant (error_) "name as 'error'"
+  }
+
+
+  type set UeContextCreateData {
+    UeContext    ueContext,
+    NgRanTargetId    targetId,
+    N2InfoContent    sourceToTargetData,
+    set of       N2SmInformation    pduSessionList optional,
+    TS29571_CommonData.Uri    n2NotifyUri optional,
+    TS29571_CommonData.NgApCause    ngapCause optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeContextCreatedData {
+    UeContext    ueContext,
+    N2InfoContent    targetToSourceData,
+    set of       N2SmInformation    pduSessionList optional,
+    TS29571_CommonData.NgApCause    ngapCause optional,
+    set of       TS29571_CommonData.PduSessionId    failedSessionList optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeContextCreateError {
+    TS29571_CommonData.ProblemDetails    error_,
+    TS29571_CommonData.NgApCause    ngapCause optional
+  } with {
+    variant (error_) "name as 'error'"
+  }
+
+
+  type set NgRanTargetId {
+    TS29571_CommonData.NgRanIdentifier    ranNodeId,
+    TS29571_CommonData.Tai    tai
+  }
+
+  type set PWSResponseData {
+    TS29571_CommonData.Uinteger    ngapMessageType,
+    TS29571_CommonData.Uint16    serialNumber,
+    integer messageIdentifier,
+    set of       TS29571_CommonData.Tai    unknownTaiList optional
+  }
+
+  type set PWSErrorData {
+    integer namfCause
+  }
+
+  type set N2InformationTransferError {
+    TS29571_CommonData.ProblemDetails    error_,
+    PWSErrorData    pwdErrorInfo optional
+  } with {
+    variant (error_) "name as 'error'"
+  }
+
+
+  type set NgKsi {
+    ScType    tsc,
+    TS29571_CommonData.Uinteger    ksi
+  }
+
+  type set KeyAmf {
+    KeyAmfType    keyType,
+    charstring keyVal
+  }
+
+  type set ExpectedUeBehavior {
+    set of       TS29571_CommonData.UserLocation    expMoveTrajectory,
+    TS29571_CommonData.DateTime    validityTime
+  }
+
+  type TS29571_CommonData.Uinteger    EpsBearerId
+
+  type TS29571_CommonData.Uinteger    Ppi
+
+  type TS29571_CommonData.Uinteger    NasCount
+
+  type TS29571_CommonData.Bytes    FivegmmCapability
+
+  type TS29571_CommonData.Bytes    UeSecurityCapability
+
+  type TS29571_CommonData.Bytes    S1UeNetworkCapability
+
+  type TS29571_CommonData.Bytes    DrxParameter
+
+  type charstring OmcIdentifier
+
+  type enumerated StatusChange_enum { AMF_UNAVAILABLE, AMF_AVAILABLE}
+
+  type union StatusChange {
+    StatusChange_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated N2InformationClass_enum { SM, NRPPa, PWS, PWS_BCAL, PWS_RF}
+  with {
+    variant "text 'PWS_BCAL' as 'PWS-BCAL'"
+    variant "text 'PWS_RF' as 'PWS-RF'"
+  
+  }
+
+  type union N2InformationClass {
+    N2InformationClass_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated N1MessageClass_enum { FIVEGMM, SM, LPP, SMS, UPDP}
+  with {variant "text 'FIVEGMM' as '5GMM'"}
+
+  type union N1MessageClass {
+    N1MessageClass_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated N1N2MessageTransferCause_enum { ATTEMPTING_TO_REACH_UE, N1_N2_TRANSFER_INITIATED, WAITING_FOR_ASYNCHRONOUS_TRANSFER, UE_NOT_RESPONDING, N1_MSG_NOT_TRANSFERRED}
+
+  type union N1N2MessageTransferCause {
+    N1N2MessageTransferCause_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated UeContextTransferStatus_enum { TRANSFERRED, NOT_TRANSFERRED}
+
+  type union UeContextTransferStatus {
+    UeContextTransferStatus_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated N2InformationTransferResult_enum { N2_INFO_TRANSFER_INITIATED}
+
+  type union N2InformationTransferResult {
+    N2InformationTransferResult_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated CipheringAlgorithm_enum { NEA0, NEA1, NEA2, NEA3}
+
+  type union CipheringAlgorithm {
+    CipheringAlgorithm_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated IntegrityAlgorithm_enum { NIA0, NIA1, NIA2, NIA3}
+
+  type union IntegrityAlgorithm {
+    IntegrityAlgorithm_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated SmsSupport_enum { THREEGPP, NON_3GPP, BOTH, NONE}
+  with {variant "text 'THREEGPP' as '3GPP'"}
+
+  type union SmsSupport {
+    SmsSupport_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated ScType_enum { NATIVE, MAPPED}
+
+  type union ScType {
+    ScType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated KeyAmfType_enum { KAMF, KPRIMEAMF}
+
+  type union KeyAmfType {
+    KeyAmfType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated TransferReason_enum { INIT_REG, MOBI_REG, MOBI_REG_UE_VALIDATED}
+
+  type union TransferReason {
+    TransferReason_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated AMPolicyReqTrigger_enum { LOCATION_CHANGE, PRA_CHANGE, SARI_CHANGE, RFSP_INDEX_CHANGE}
+
+  type union AMPolicyReqTrigger {
+    AMPolicyReqTrigger_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated RatSelector_enum { E_UTRA, NR}
+  with {variant "text 'E_UTRA' as 'E-UTRA'"}
+
+  type union RatSelector {
+    RatSelector_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated NgapIeType_enum { PDU_RES_SETUP_REQ, PDU_RES_REL_CMD, PDU_RES_MOD_REQ, PDU_RES_MOD_CFM, PATH_SWITCH_REQ_ACK, PATH_SWITCH_REQ_FAIL, HANDOVER_CMD, HANDOVER_PREP_FAIL, SRC_TO_TAR_CONTAINER, TAR_TO_SRC_CONTAINER, NRPPA_PDU}
+
+  type union NgapIeType {
+    NgapIeType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}
diff --git a/src/TS29518_Namf_EventExposure.ttcn b/src/TS29518_Namf_EventExposure.ttcn
new file mode 100644
index 0000000..894cd9b
--- /dev/null
+++ b/src/TS29518_Namf_EventExposure.ttcn
@@ -0,0 +1,257 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29518_Namf_EventExposure.ttcn
+//  Description:	      Type definitions for 3GPP TS29518
+//  Prodnr:             CNL 113 890
+/////////////////////////////////////////////// 
+module TS29518_Namf_EventExposure {
+
+  import from TS29571_CommonData all
+
+  external function f_enc_AmfCreateEventSubscription(in AmfCreateEventSubscription pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_AmfCreateEventSubscription(in octetstring stream, out AmfCreateEventSubscription pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_AmfCreatedEventSubscription(in AmfCreatedEventSubscription pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_AmfCreatedEventSubscription(in octetstring stream, out AmfCreatedEventSubscription pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_AmfEventNotification(in AmfEventNotification pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_AmfEventNotification(in octetstring stream, out AmfEventNotification pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_AmfUpdateEventSubscriptionItem(in AmfUpdateEventSubscriptionItem pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_AmfUpdateEventSubscriptionItem(in octetstring stream, out AmfUpdateEventSubscriptionItem pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_AmfUpdatedEventSubscription(in AmfUpdatedEventSubscription pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_AmfUpdatedEventSubscription(in octetstring stream, out AmfUpdatedEventSubscription pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set AmfEventSubscription {
+    set of       AmfEvent    eventList optional,
+    TS29571_CommonData.Uri    eventNotifyUri,
+    charstring notifyCorrelationId,
+    TS29571_CommonData.NfInstanceId    nfId,
+    TS29571_CommonData.Uri    subsChangeNotifyUri optional,
+    charstring subsChangeNotifyCorrelationId optional,
+    TS29571_CommonData.Supi    supi optional,
+    TS29571_CommonData.GroupId    groupId optional,
+    TS29571_CommonData.Gpsi    gpsi optional,
+    TS29571_CommonData.Pei    pei optional,
+    boolean anyUE optional,
+    AmfEventMode    options optional
+  }
+
+  type set AmfEvent {
+    AmfEventType    type_,
+    boolean immediateFlag optional,
+    set of       AmfEventArea    areaList optional,
+    set of       LocationFilter    locationFilterList optional,
+    set of       SubscribedDataFilter    subscribedDataFilterList optional
+  } with {
+    variant (type_) "name as 'type'"
+  }
+
+  type set AmfEventNotification {
+    charstring subscriptionId,
+    charstring notifyCorrelationId,
+    set of       AmfEventReport    reportList optional
+  }
+
+  type set AmfEventReport {
+    AmfEventType    type_,
+    AmfEventState    state,
+    TS29571_CommonData.DateTime    timeStamp,
+    boolean anyUe optional,
+    TS29571_CommonData.Supi    supi optional,
+    set of       AmfEventArea    areaList optional,
+    TS29571_CommonData.Gpsi    gpsi optional,
+    TS29571_CommonData.Pei    pei optional,
+    TS29571_CommonData.UserLocation    location optional,
+    TS29571_CommonData.TimeZone    timezone optional,
+    set of       TS29571_CommonData.AccessType    accessTypeList optional,
+    set of       RmInfo    rmInfoList optional,
+    set of       CmInfo    cmInfoList optional,
+    UeReachability    reachability optional,
+    SubscribedData    subscribedData optional,
+    CommunicationFailure    commFailure optional,
+    integer numberOfUes optional
+  } with {
+    variant (type_) "name as 'type'"
+  }
+
+
+  type set AmfEventMode {
+    AmfEventTrigger    trigger_,
+    integer maxReports optional,
+    TS29571_CommonData.DateTime    expiry optional
+  } with {
+    variant (trigger_) "name as 'trigger'"
+  }
+
+  type set AmfEventState {
+    boolean active,
+    integer remainReports optional,
+    TS29571_CommonData.DurationSec    remainDuration optional
+  }
+
+  type set RmInfo {
+    RmState    rmState,
+    TS29571_CommonData.AccessType    accessType
+  }
+
+  type set CmInfo {
+    CmState    cmState,
+    TS29571_CommonData.AccessType    accessType
+  }
+
+  type set SubscribedData {
+    Sari    sari optional,
+    RfspIndex    rfspIndex optional
+  }
+
+  type set CommunicationFailure {
+    charstring nasReleaseCode optional,
+    TS29571_CommonData.NgApCause    ranReleaseCode optional
+  }
+
+  type set AmfCreateEventSubscription {
+    AmfEventSubscription    subscription,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set AmfCreatedEventSubscription {
+    AmfEventSubscription    subscription,
+    set of       AmfEventReport    reportList optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set AmfUpdateEventSubscriptionItem_item {
+      enumerated { add, remove, replace_} op,
+      charstring path, // (pattern "\/events\/[0-]$|\/events\/[1-9][0-9]*$"),
+      AmfEvent    value_ optional
+  } with {
+    variant (op) "text 'replace_' as 'replace'"
+    variant (value_) "name as 'value'"
+  }
+  
+  type set of AmfUpdateEventSubscriptionItem_item AmfUpdateEventSubscriptionItem
+
+  type set AmfUpdatedEventSubscription {
+    AmfEventSubscription    subscription
+  }
+
+  type set AmfEventArea {
+    TS29571_CommonData.PresenceInfo    presenceInfo optional,
+    LadnInfo    ladnInfo optional
+  }
+
+  type set LadnInfo {
+    charstring ladn,
+    TS29571_CommonData.PresenceState    presence optional
+  }
+
+  type charstring FivegGuti
+
+  type TS29571_CommonData.Bytes    Sari
+
+  type integer RfspIndex
+
+  type enumerated AmfEventType_enum { LOCATION_REPORT, PRESENCE_IN_AOI_REPORT, TIMEZONE_REPORT, ACCESS_TYPE_REPORT, REGISTRATION_STATE_REPORT, CONNECTIVITY_STATE_REPORT, REACHABILITY_REPORT, SUBSCRIBED_DATA_REPORT, COMMIUNICATION_FAILURE_REPORT, UES_IN_AREA_REPORT}
+
+  type union AmfEventType {
+    AmfEventType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated AmfEventTrigger_enum { ONE_TIME, CONTINUOUS}
+
+  type union AmfEventTrigger {
+    AmfEventTrigger_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated LocationFilter_enum { TAI, CELL_ID, N3IWF, UE_IP, UDP_PORT}
+
+  type union LocationFilter {
+    LocationFilter_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated SubscribedDataFilter_enum { SARI, RFSP_INDEX}
+
+  type union SubscribedDataFilter {
+    SubscribedDataFilter_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated UeReachability_enum { UNREACHABLE, REACHABLE, REGULATORY_ONLY}
+
+  type union UeReachability {
+    UeReachability_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated RmState_enum { REGISTERED, DEREGISTERED}
+
+  type union RmState {
+    RmState_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated CmState_enum { IDLE, CONNECTED}
+
+  type union CmState {
+    CmState_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}
diff --git a/src/TS29518_Namf_Location.ttcn b/src/TS29518_Namf_Location.ttcn
new file mode 100644
index 0000000..f3eff95
--- /dev/null
+++ b/src/TS29518_Namf_Location.ttcn
@@ -0,0 +1,142 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29518_Namf_Location.ttcn
+//  Description:	      Type definitions for 3GPP TS29518
+/////////////////////////////////////////////// 
+module TS29518_Namf_Location {
+
+  import from TS29572_Nlmf_Location all
+  import from TS29571_CommonData all
+
+  external function f_enc_RequestPosInfo(in RequestPosInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_RequestPosInfo(in octetstring stream, out RequestPosInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_ProvidePosInfo(in ProvidePosInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_ProvidePosInfo(in octetstring stream, out ProvidePosInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_NotifiedPosInfo(in NotifiedPosInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_NotifiedPosInfo(in octetstring stream, out NotifiedPosInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_RequestLocInfo(in RequestLocInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_RequestLocInfo(in octetstring stream, out RequestLocInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_ProvideLocInfo(in ProvideLocInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_ProvideLocInfo(in octetstring stream, out ProvideLocInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set RequestPosInfo {
+    TS29572_Nlmf_Location.ExternalClientType    lcsClientType,
+    LocationType    lcsLocation,
+    TS29571_CommonData.Supi    supi optional,
+    TS29571_CommonData.Gpsi    gpsi optional,
+    TS29572_Nlmf_Location.LcsPriority    priority optional,
+    TS29572_Nlmf_Location.LocationQoS    lcsQoS optional,
+    TS29572_Nlmf_Location.VelocityRequested    velocityRequested optional,
+    TS29572_Nlmf_Location.SupportedGADShapes    lcsSupportedGADShapes optional,
+    TS29571_CommonData.Uri    locationNotificationUri optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set ProvidePosInfo {
+    TS29572_Nlmf_Location.GeographicArea    locationEstimate optional,
+    TS29572_Nlmf_Location.AccuracyFulfilmentIndicator    accuracyFulfilmentIndicator optional,
+    TS29572_Nlmf_Location.AgeOfLocationEstimate    ageOfLocationEstimate optional,
+    TS29572_Nlmf_Location.VelocityEstimate    velocityEstimate optional,
+    set of       TS29572_Nlmf_Location.PositioningMethodAndUsage    positioningDataList optional,
+    set of       TS29572_Nlmf_Location.GnssPositioningMethodAndUsage    gnssPositioningDataList optional,
+    TS29571_CommonData.Ecgi    ecgi optional,
+    TS29571_CommonData.Ncgi    ncgi optional,
+    TS29571_CommonData.NfInstanceId    targetServingNode optional,
+    TS29572_Nlmf_Location.CivicAddress    civicAddress optional,
+    BarometricPressure    barometricPressure optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set NotifiedPosInfo {
+    LocationEvent    locationEvent,
+    TS29571_CommonData.Supi    supi optional,
+    TS29571_CommonData.Gpsi    gpsi optional,
+    TS29571_CommonData.Pei    pei optional,
+    TS29572_Nlmf_Location.GeographicArea    locationEstimate optional,
+    TS29572_Nlmf_Location.AgeOfLocationEstimate    ageOfLocationEstimate optional,
+    TS29572_Nlmf_Location.VelocityEstimate    velocityEstimate optional,
+    set of       TS29572_Nlmf_Location.PositioningMethodAndUsage    positioningDataList optional,
+    set of       TS29572_Nlmf_Location.GnssPositioningMethodAndUsage    gnssPositioningDataList optional,
+    TS29571_CommonData.Ecgi    ecgi optional,
+    TS29571_CommonData.Ncgi    ncgi optional,
+    TS29571_CommonData.NfInstanceId    servingNode optional,
+    TS29572_Nlmf_Location.CivicAddress    civicAddress optional,
+    BarometricPressure    barometricPressure optional
+  }
+
+  type set RequestLocInfo {
+    boolean req5gsLoc optional,
+    boolean reqCurrentLoc optional,
+    boolean reqRatType optional,
+    boolean reqTimeZone optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set ProvideLocInfo {
+    boolean currentLoc optional,
+    TS29571_CommonData.UserLocation    location optional,
+    TS29572_Nlmf_Location.GeographicArea    geoInfo optional,
+    TS29572_Nlmf_Location.AgeOfLocationEstimate    locatoinAge optional,
+    TS29571_CommonData.RatType    ratType optional,
+    TS29571_CommonData.TimeZone    timezone optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type integer BarometricPressure
+
+  type enumerated LocationType_enum { CURRENT_LOCATION, CURRENT_OR_LAST_KNOWN_LOCATION, INITIAL_LOCATION}
+
+  type union LocationType {
+    LocationType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated LocationEvent_enum { EMERGENCY_CALL_ORIGINATION, EMERGENCY_CALL_RELEASE, EMERGENCY_CALL_HANDOVER}
+
+  type union LocationEvent {
+    LocationEvent_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}
diff --git a/src/TS29518_Namf_MT.ttcn b/src/TS29518_Namf_MT.ttcn
new file mode 100644
index 0000000..4fa1632
--- /dev/null
+++ b/src/TS29518_Namf_MT.ttcn
@@ -0,0 +1,72 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29518_Namf_MT.ttcn
+//  Description:	      Type definitions for 3GPP TS29518
+/////////////////////////////////////////////// 
+module TS29518_Namf_MT {
+
+  import from TS29518_Namf_EventExposure all
+  import from TS29571_CommonData all
+
+  external function f_enc_UeContextInfo(in UeContextInfo pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_UeContextInfo(in octetstring stream, out UeContextInfo pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_EnableUeReachabilityReqData(in EnableUeReachabilityReqData pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_EnableUeReachabilityReqData(in octetstring stream, out EnableUeReachabilityReqData pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_EnableUeReachabilityRspData(in EnableUeReachabilityRspData pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_EnableUeReachabilityRspData(in octetstring stream, out EnableUeReachabilityRspData pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set EnableUeReachabilityReqData {
+    TS29518_Namf_EventExposure.UeReachability    reachability,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set EnableUeReachabilityRspData {
+    TS29518_Namf_EventExposure.UeReachability    reachability,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set UeContextInfo {
+    boolean supportVoPS optional,
+    TS29571_CommonData.DateTime    lastActTime optional,
+    TS29571_CommonData.RatType    ratType optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type enumerated UeContextInfoClass_enum { TADS}
+
+  type union UeContextInfoClass {
+    UeContextInfoClass_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}
