diff --git a/doc/NS_v7.3.0_CNL113578_FS.pdf b/doc/NS_v7.3.0_CNL113578_FS.pdf
new file mode 100644
index 0000000..0f5ea5f
--- /dev/null
+++ b/doc/NS_v7.3.0_CNL113578_FS.pdf
Binary files differ
diff --git a/doc/NS_v7.3.0_CNL113578_UG.pdf b/doc/NS_v7.3.0_CNL113578_UG.pdf
new file mode 100644
index 0000000..c818f1a
--- /dev/null
+++ b/doc/NS_v7.3.0_CNL113578_UG.pdf
Binary files differ
diff --git a/doc/NS_v7.3_PRI.pdf b/doc/NS_v7.3_PRI.pdf
new file mode 100644
index 0000000..ae5248d
--- /dev/null
+++ b/doc/NS_v7.3_PRI.pdf
Binary files differ
diff --git a/src/NS_Types.ttcn b/src/NS_Types.ttcn
new file mode 100644
index 0000000..4424e10
--- /dev/null
+++ b/src/NS_Types.ttcn
@@ -0,0 +1,464 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2017 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               NS_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 578
+//  Updated:            2008-01-22
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 48.016 7.3.0
+ 
+module NS_Types
+{    // beginning of module
+
+// This module contains the Base Station System (BSS) Serving GPRS Support
+// Node (SGSN) interface  Network Sevice protocol
+//  48.016 v7.3.0 with attributes for RAW encoding/decoding.
+// 
+                 
+// History:
+// ********
+
+import from General_Types all;
+
+external function enc_PDU_NS(in PDU_NS pdu) return octetstring
+with { extension "prototype(convert)"
+       extension "encode(RAW)"
+     } 
+                
+external function dec_PDU_NS(in octetstring stream) return PDU_NS
+with { extension "prototype(convert)"
+       extension "decode(RAW)"
+     }
+
+type record CauseNS
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+OCT1                     cause
+}  with { 
+        variant (lengthIndicator) "LENGTHTO (cause)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }
+
+type record NS_VCI  
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+OCT2                     nS_VCI
+} with { 
+        variant (lengthIndicator) "LENGTHTO (nS_VCI)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }
+
+type record NS_PDU  
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+octetstring              ns_PDU
+} with { 
+        variant (lengthIndicator) "LENGTHTO (ns_PDU)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }
+ 
+type record BVCI_NS 
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+OCT2                     bVCI
+} with { 
+        variant (lengthIndicator) "LENGTHTO (bVCI)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }       
+
+type record ListofIP4Elements 
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+IP4_Elements             iP4_Elements
+}  with { 
+        variant (lengthIndicator) "LENGTHTO (iP4_Elements)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }       
+
+type record IP4_Element
+{
+OCT4                     ipAddress,
+OCT2                     uDP_Port,
+OCT1                     signallingWeight,
+OCT1                     dataWeight
+}
+
+type record of IP4_Element IP4_Elements;
+
+type record ListofIP6Elements 
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+IP6_Elements             iP6_Elements
+}  with { 
+        variant (lengthIndicator) "LENGTHTO (iP6_Elements)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }       
+
+type record IP6_Element
+{
+OCT16                    ipAddress,
+OCT2                     uDP_Port,
+OCT1                     signallingWeight,
+OCT1                     dataWeight
+}
+
+type record of IP6_Element IP6_Elements;
+
+type record IP_Address_NS
+{
+OCT1                     iEI, 
+OCT1                     addressType,
+IPAddress                ipAddress
+}with {
+  variant (ipAddress) "CROSSTAG
+    (
+      ip4Address,    addressType = '01'O;
+      ip6Address,    addressType = '02'O; 
+    )"
+}; 
+     
+type union IPAddress 
+{
+OCT4                     ip4Address,
+OCT16                    ip6Address
+}
+
+type record EndFlag
+{
+BIT1                     eBIT,
+BIT7                     spare
+}
+
+type record ResetFlag
+{
+OCT1                     iEI, 
+BIT1                     resetBIT,
+BIT7                     spare
+}
+
+type record MaxNumberOfNSVCs
+{
+OCT1                     iEI, 
+OCT2                     maxNumberOfNSVCs 
+}
+
+type record NumberOfIP_Endpoints 
+{
+OCT1                     iEI, 
+OCT2                     numberOfIP_Endpoints 
+}
+
+
+type record NSEI_NS
+{
+OCT1                     iEI, 
+BIT1                     ext,
+LIN1_2                   lengthIndicator,
+OCT2                     nSEI
+} with { 
+        variant (lengthIndicator) "LENGTHTO (nSEI)";
+        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                             length2,         ext = '0'B;)";
+        variant (ext,lengthIndicator) "FIELDORDER(msb)";
+       }       
+
+type record NS_SDU_ControlBits
+{
+BIT1                     rBit,
+BIT1                     cBit,
+BIT6                     spare
+}
+
+//same type def as LIN2_2a in BSSGP but named differently 
+type union LIN1_2
+{
+integer length1,
+integer length2
+} with {
+        variant (length1) "FIELDLENGTH(7)";
+        variant (length2) "FIELDLENGTH(15)";
+        variant (length2) "BYTEORDER(last)";
+        variant (length1,length2) "FIELDORDER(msb)"
+      }        
+
+
+// PDUs ************************************************************
+
+
+type record PDU_NS_Alive
+{
+OCT1                     nsPduType 
+}
+
+type record PDU_NS_Alive_Ack
+{
+OCT1                     nsPduType
+}
+
+type record PDU_NS_Block
+{
+OCT1                     nsPduType,
+CauseNS                  causeNS,                        //TLV
+NS_VCI                   nS_VCI                          //TLV
+}
+
+type record PDU_NS_Block_Ack
+{
+OCT1                     nsPduType,
+NS_VCI                   nS_VCI                          //TLV
+}
+
+type record PDU_NS_Reset
+{
+OCT1                     nsPduType,
+CauseNS                  causeNS,                        //TLV
+NS_VCI                   nS_VCI,                         //TLV
+NSEI_NS                  nSEI_NS                         //TLV      
+}
+
+type record PDU_NS_Reset_Ack
+{
+OCT1                     nsPduType,
+NS_VCI                   nS_VCI,                         //TLV
+NSEI_NS                  nSEI_NS                         //TLV      
+}
+
+type record PDU_NS_Status
+{
+OCT1                     nsPduType,
+CauseNS                  causeNS,                        //TLV
+NS_VCI                   nS_VCI              optional,   //TLV   
+NS_PDU                   nS_PDU              optional,   //TLV
+BVCI_NS                  bVCI_NS             optional,   //TLV
+ListofIP4Elements        listofIP4Elements   optional,   //TLV
+ListofIP6Elements        listofIP6Elements   optional    //TLV
+} with { 
+  variant "TAG (
+                nS_VCI,                        iEI = '01'O;
+                nS_PDU,                        iEI = '02'O;
+                bVCI_NS,                       iEI = '03'O;
+                listofIP4Elements,             iEI = '05'O;
+		listofIP6Elements,             iEI = '06'O                 
+        )"
+}
+
+type record PDU_NS_Unblock
+{
+OCT1                     nsPduType
+}
+
+type record PDU_NS_Unblock_Ack
+{
+OCT1                     nsPduType
+}
+
+type record PDU_NS_Unitdata
+{
+OCT1                     nsPduType,
+NS_SDU_ControlBits       nS_SDU_ControlBits,              //V
+OCT2                     bVCI,                            //V
+octetstring              nS_SDU                           //V
+// decoder interprets all octets after the 
+// first 4 octets as NS SDU
+}
+
+type record PDU_SNS_Ack
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                           //TLV
+integer                  transactionID,                     //V
+CauseNS                  causeNS             optional,      //TLV
+IP_Address_NS            iP_Address_NS       optional,      //TV
+ListofIP4Elements        listofIP4Elements   optional,      //TLV
+ListofIP6Elements        listofIP6Elements   optional       //TLV
+} with {
+        variant (transactionID) "FIELDLENGTH(8)";
+        variant "TAG (
+                causeNS,                           iEI = '00'O;
+                iP_Address_NS,                   iEI = '0B'O;
+                listofIP4Elements,          iEI = '05'O;
+                listofIP6Elements,          iEI = '06'O              
+        )"
+}
+
+type record PDU_SNS_Add
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                          //TLV
+integer                  transactionID,                    //V
+ListofIP4Elements        listofIP4Elements optional,       //TLV
+ListofIP6Elements        listofIP6Elements optional        //TLV
+} with {
+        variant (transactionID) "FIELDLENGTH(8)";
+        variant "TAG (
+                listofIP4Elements,          iEI = '05'O;
+                listofIP6Elements,          iEI = '06'O
+         )"              
+}
+
+type record PDU_SNS_ChangeWeight
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                         //TLV
+integer                  transactionID,                   //V
+ListofIP4Elements        listofIP4Elements optional,      //TLV
+ListofIP6Elements        listofIP6Elements optional       //TLV
+} with {
+        variant (transactionID) "FIELDLENGTH(8)";
+        variant "TAG (
+                listofIP4Elements,          iEI = '05'O;
+                listofIP6Elements,          iEI = '06'O
+         )" 
+}
+
+type record PDU_SNS_Config
+{
+OCT1                     nsPduType,
+EndFlag                  endFlag,                           //V
+NSEI_NS                  nSEI_NS,                           //TLV
+ListofIP4Elements        listofIP4Elements optional,        //TLV
+ListofIP6Elements        listofIP6Elements optional         //TLV
+} with { 
+      variant "TAG (
+                listofIP4Elements,          iEI = '05'O;
+                listofIP6Elements,          iEI = '06'O
+         )" 
+}
+
+
+
+type record PDU_SNS_Config_Ack
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                               //TLV
+CauseNS                  causeNS               optional         //TLV
+} with { 
+      variant "TAG (causeNS,                   iEI = '00'O;)"
+}
+
+
+
+type record PDU_SNS_Delete
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                              //TLV
+integer                  transactionID,                        //V
+IP_Address_NS            iP_Address_NS         optional,       //TV
+ListofIP4Elements        listofIP4Elements     optional,       //TLV
+ListofIP6Elements        listofIP6Elements     optional        //TLV
+} with {
+        variant (transactionID) "FIELDLENGTH(8)";
+        variant "TAG (
+                iP_Address_NS,                        iEI = '0B'O;
+                listofIP4Elements,                iEI = '05'O;
+                listofIP6Elements,               iEI = '06'O
+        )"
+}
+
+type record PDU_SNS_Size
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,                            //TLV
+ResetFlag                resetFlag,                          //TV
+MaxNumberOfNSVCs         maxNumberOfNSVCs,                   //TV
+NumberOfIP_Endpoints     numberOfIP4_Endpoints    optional,  //TV
+NumberOfIP_Endpoints     numberOfIP6_Endpoints    optional   //TV
+} with { 
+      variant "TAG (
+                    numberOfIP4_Endpoints,                   iEI = '08'O;      
+                    numberOfIP6_Endpoints,                   iEI = '09'O;
+      )"  
+}
+
+
+type record PDU_SNS_Size_Ack
+{
+OCT1                     nsPduType,
+NSEI_NS                  nSEI_NS,    
+CauseNS                  causeNS             optional       //TLV
+} with { 
+      variant "TAG (causeNS,                   iEI = '00'O;)"
+}
+
+
+
+type union PDU_NS
+{
+
+PDU_NS_Alive                  pDU_NS_Alive,
+PDU_NS_Alive_Ack              pDU_NS_Alive_Ack,
+PDU_NS_Block                  pDU_NS_Block,
+PDU_NS_Block_Ack              pDU_NS_Block_Ack,
+PDU_NS_Reset                  pDU_NS_Reset,
+PDU_NS_Reset_Ack              pDU_NS_Reset_Ack,
+PDU_NS_Status                 pDU_NS_Status,
+PDU_NS_Unblock                pDU_NS_Unblock,
+PDU_NS_Unblock_Ack            pDU_NS_Unblock_Ack,
+PDU_NS_Unitdata               pDU_NS_Unitdata,
+PDU_SNS_Ack                   pDU_SNS_Ack,
+PDU_SNS_Add                   pDU_SNS_Add,
+PDU_SNS_ChangeWeight          pDU_SNS_ChangeWeight,
+PDU_SNS_Config                pDU_SNS_Config,
+PDU_SNS_Config_Ack            pDU_SNS_Config_Ack,
+PDU_SNS_Delete                pDU_SNS_Delete,
+PDU_SNS_Size                  pDU_SNS_Size,
+PDU_SNS_Size_Ack              pDU_SNS_Size_Ack
+
+} with { variant "TAG (              
+                
+                pDU_NS_Alive,           nsPduType ='0A'O;
+                pDU_NS_Alive_Ack,       nsPduType ='0B'O;
+                pDU_NS_Block,           nsPduType ='04'O;
+                pDU_NS_Block_Ack,       nsPduType ='05'O;
+                pDU_NS_Reset,           nsPduType ='02'O;
+                pDU_NS_Reset_Ack,       nsPduType ='03'O;
+                pDU_NS_Status,          nsPduType ='08'O;
+                pDU_NS_Unblock,         nsPduType ='06'O;
+                pDU_NS_Unblock_Ack,     nsPduType ='07'O;
+                pDU_NS_Unitdata,        nsPduType ='00'O;
+                pDU_SNS_Ack,            nsPduType ='0C'O;
+                pDU_SNS_Add,            nsPduType ='0D'O;
+                pDU_SNS_ChangeWeight,   nsPduType ='0E'O;
+                pDU_SNS_Config,         nsPduType ='0F'O;
+                pDU_SNS_Config_Ack,     nsPduType ='10'O;
+                pDU_SNS_Delete,         nsPduType ='11'O;
+                pDU_SNS_Size,           nsPduType ='12'O;
+                pDU_SNS_Size_Ack,       nsPduType ='13'O
+
+              )"
+}
+
+
+}with{ encode "RAW"} // end of module
