Initial commit
diff --git a/MobileL3_v13.4.0_CNL113832.tpd b/MobileL3_v13.4.0_CNL113832.tpd
new file mode 100644
index 0000000..0863ff2
--- /dev/null
+++ b/MobileL3_v13.4.0_CNL113832.tpd
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2017 Ericsson
+
+  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:               MobileL3_v13.4.0_CNL113832.tpd
+   Description:        tpd project file
+   Rev:                R2A
+   Prodnr:             CNL 113 832
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>MobileL3_v13.4.0_CNL113832</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="MAP_Current_CNL113745_1_HLR" projectLocationURI="../MAP_Current_CNL113745_1/MAP_Current_CNL113745_1_HLR.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/MobileL3_CC_Types.ttcn" relativeURI="src/MobileL3_CC_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_CommonIE_Types.ttcn" relativeURI="src/MobileL3_CommonIE_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_GMM_SM_Types.ttcn" relativeURI="src/MobileL3_GMM_SM_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_MM_Types.ttcn" relativeURI="src/MobileL3_MM_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_RRM_Types.ttcn" relativeURI="src/MobileL3_RRM_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_SMS_Types.ttcn" relativeURI="src/MobileL3_SMS_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_SS_Types.ttcn" relativeURI="src/MobileL3_SS_Types.ttcn"/>
+    <FileResource projectRelativePath="src/MobileL3_Types.ttcn" relativeURI="src/MobileL3_Types.ttcn"/>
+    <FileResource projectRelativePath="src/SS_DataTypes.asn" relativeURI="src/SS_DataTypes.asn"/>
+    <FileResource projectRelativePath="src/SS_Errors.asn" relativeURI="src/SS_Errors.asn"/>
+    <FileResource projectRelativePath="src/SS_Operations.asn" relativeURI="src/SS_Operations.asn"/>
+    <FileResource projectRelativePath="src/SS_PDU_Defs.asn" relativeURI="src/SS_PDU_Defs.asn"/>
+    <FileResource projectRelativePath="src/SS_Protocol.asn" relativeURI="src/SS_Protocol.asn"/>
+    <FileResource projectRelativePath="src/SS_Types.ttcn" relativeURI="src/SS_Types.ttcn"/>  
+    <FileResource projectRelativePath="src/SS_EncDec.cc" relativeURI="src/SS_EncDec.cc"/>        
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/MobileL3_v13.4.0_CNL113832</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+      <FolderProperties>
+        <FolderResource>
+          <FolderPath>doc</FolderPath>
+          <FolderProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+      </FolderProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/doc/MobileL3_v13.4.0_CNL113832_1551.pdf b/doc/MobileL3_v13.4.0_CNL113832_1551.pdf
new file mode 100644
index 0000000..4125b71
--- /dev/null
+++ b/doc/MobileL3_v13.4.0_CNL113832_1551.pdf
Binary files differ
diff --git a/doc/MobileL3_v13.4_PRI.pdf b/doc/MobileL3_v13.4_PRI.pdf
new file mode 100644
index 0000000..2997f45
--- /dev/null
+++ b/doc/MobileL3_v13.4_PRI.pdf
Binary files differ
diff --git a/src/MobileL3_CC_Types.ttcn b/src/MobileL3_CC_Types.ttcn
new file mode 100644
index 0000000..15ff564
--- /dev/null
+++ b/src/MobileL3_CC_Types.ttcn
@@ -0,0 +1,1648 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_CC_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+
+module  MobileL3_CC_Types
+{
+
+import from General_Types           all;
+import from MobileL3_CommonIE_Types all;
+
+//============================================================================
+// 24.008/ 10.5.4 Call control information elements
+//============================================================================
+
+// 10.5.4.1 Extensions of codesets
+//--
+
+// 10.5.4.2 Locking shift procedure
+//--
+
+// 10.5.4.3 Non-locking shift procedure
+//--
+
+// 10.5.4.4 Auxiliary states
+type record AuxiliaryStates_TLV
+{
+  OCT1  elementIdentifier, //24'O
+  LIN1  lengthIndicator,
+  BIT2  mPTYAuxiliaryState,
+  BIT2  holdAuxState,
+  BIT3  spare_3,
+  BIT1  ext //'1'B
+} with { variant (lengthIndicator) "LENGTHTO(mPTYAuxiliaryState,holdAuxState,
+                                             spare_3,ext)"};
+
+type record AuxiliaryStates_LV
+{
+  LIN1  lengthIndicator,
+  BIT2  mPTYAuxState,
+  BIT2  holdAuxiliaryState,
+  BIT3  spare_3,
+  BIT1  ext //'1'B
+}with { variant (lengthIndicator) "LENGTHTO(mPTYAuxState,holdAuxiliaryState,
+                                            spare_3,ext)"};
+         
+//24.008/ 10.5.4.4a Backup Bearer Capacity (BBC)
+type record BBC_octet3
+{
+  BIT3  informationTransferCapability,  //     '000'speech  B
+                                        //     '001'B UDI
+                                        //     '010'B 3.audio  1kHz
+                                        //     '101'oITC B (see octet 5a)
+                                        //     '110'B speech  auxiliary
+                                        //     '111'B reserved
+  BIT1  transferMode, //    '0'B mode  circuit
+                      //    '1'B packet  mode
+  BIT1  codingStandard, //   '0'B GSM/PCS coding  standardized
+                        //   '1'B  reserved
+  BIT2  radioChannelRequirement, // '01'B MSC/VLR to MS;
+        // '00'B MS (supports) towards MSC/VLR rate dual (half preferred)
+        // '01'B MS (supports) towards MSC/VLR full only  rate
+                           // '10'B rate  dual  (half preferred)
+                           // '11'B rate  dual  (full preferred)
+  BIT1 extension_octet_3
+     //'0'B or '1'B (THe RAW encoder will overwrite this bit)
+} with { variant "EXTENSION_BIT (yes)"};
+
+// "type record BC_octet4" is the same as "type record BC_octet4"
+
+type record BBC_octet5
+{
+  BIT3  signallingAccessProtocol, //        '001'B I.440/450
+        //        '010'B X.21
+        //        '011'B X.28 dedicated PID, ind. NUI
+        //        '100'B X.28 dedicated PID, uni. NUI
+        //        '101'B X.28 PID  non_dedicated
+        //        '110'B X.32
+  BIT2  rateAdaptation, //     '00'B no adaptation  rate  (RA)
+        //     '01'B V.110/X.30 adaptation  rate
+        //     '10'B CCITT X.31 flag stuffing
+        //     '11'B RA  other  (see octet 5a)
+  BIT2  accessId, //  '00'B identifier  octet
+  BIT1  extension_octet_5, // '0'B or '1'B (if no octet 5A following)
+
+  //octet 5a
+  BIT3  spare2_3  optional, // B'...._000
+  BIT2  otherRateAdaptation  optional, // B'.._00.._ V.interworking  120
+  BIT2  otherInformationTransferCapability optional,
+                              // B'_00...._ interworking RDI
+  BIT1  extension_octet_5a  optional // '1'B 
+} with { variant "EXTENSION_BIT (yes)"};
+
+// BBC_octet6, BBC_octet7 not required
+
+type record BackupBearerCapacity
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,      
+  // the following octet fields representing an octet group
+  BBC_octet3 octet3,  // 1-
+  BC_octet4  octet4 optional, //1 octet; opt. by def, but always fill in!!!
+  BBC_octet5 octet5 optional, //1-2 octets
+  BC_octet6  octet6 optional, //1-8 octets
+  BC_octet7  octet7 optional  //1 octet
+} with { variant (lengthIndicator) "LENGTHTO(octet3,octet4,octet5,octet6,
+                                             octet7)"};
+
+// 10.5.4.5 Bearer Capacity
+type record BC_octet7
+{
+  BIT5  userInformationLayer2Protocol, //octet 7:
+                                      // '00110'B  rec. X.25, level link
+                                      // '01000'B  ISO 6429
+                                      // '01001'B  X.75 (teletex)
+                                      // '01010'B  profile  Videotext
+                                      // '01011'B  FAX group 3
+                                      // '01100'COPnoF1Ct  B
+                                      // '01101'B  X.75 (CAPI)
+  BIT2  layer2Id, // '10'B  identifier  octet
+  BIT1  extension_octet_7  // '1'B
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record BC_octet6
+{
+  BIT1  synchronous_asynchronous, //              '0'synchronous  B
+             //              '1'B asynchronous
+  BIT4  userInformationLayer1Protocol, // '0000'B default layer protocol 1
+  BIT2  layer1Id, //       '01'B identifier  octet
+  BIT1  extension_octet_6, // '0'B (octet 6a following) or '1'B
+
+  // OCTET 6a:
+  BIT4  userRate optional, //     '0001'B  0.kbps  3  (X.1 and V.110)
+                           //      '0010'B  1.kbps  2  (X.1 and V.110)
+                           //      '0011'B  2.kbps  4  (X.1 and V.110)
+                           //      '0100'B  4.kbps  8  (X.1 and V.110)
+                           //      '0101'B  9.kbps  6  (X.1 and V.110)
+                           //      '0110'B  12.0 transparent  kbps
+                           //      '0111'B  1.2 kbps/75bps asymmetric
+  BIT1  numberDataBits optional, //    '0'B bits  7  (data)
+                                 //    '1'B bits  8  (data)
+  BIT1  negotiation optional, // '0'B inband negotiation possible not
+  BIT1  numberStopBits optional, // '0'B bit 1
+                                 //   '1'B 2 bits
+  BIT1  extension_octet_6a optional, //   '0'B or '1'B
+
+  // OCTET 6b:
+  BIT3  parity optional, //      '000'odd  B  (number)
+                         //       '010'even  B
+                         //       '011'B  none
+                         //       '100'B  forced 0  to
+                         //       '101'B  forced to 1
+  BIT1  nicOnRX optional,   //     '0'B  no data accepted clock  with
+                            //     '1'B       data accepted with clock
+  BIT1  nicOnTX optional,   //     '0'B  no data required clock  with
+                            //     '1'B       data required with clock
+  BIT2  intermediateRate optional, //  '00'reserved  B
+                                   //  '01'B  reserved
+                                   //  '10'B  kbps  8
+                                   //  '11'B 16 kbps
+  BIT1  extension_octet_6b optional, // '0'B or '1'B
+
+  // OCTET 6c:
+  BIT5  modemType optional, //      '00000'none  B
+     //      '00001'B  V.21
+     //      '00010'B  V.22
+     //      '00011'B  V.22bis
+     //      '00100'B  V.23
+     //      '00101'B  V.26ter
+     //      '00110'B  V.32
+     //      '00111'B  modem for interfaces  undefined
+     //      '01000'B  autobauding type 1
+     //      '11111'B  V.42
+  BIT2  connectionElement optional, //   '00'transparent  B  (T)
+                                    //   '01'non_transparent  B  (NT)
+                                    //   '10'B  both,  preferred  T
+                                    //   '11'B  both, NT preferred
+  BIT1  extension_octet_6c optional,//'0'B or '1'B no octet following 6d
+
+  // OCTET 6d:
+  BIT5  fixedNetworkUserRate  optional, //  '00000'B  FNUR applicable not
+                      //     '00001'B   9.kbps  6  (X.1 and V.110)
+                      //     '00010'B  14.kbps  4  (X.1 and V.110)
+                      //     '00011'B  19.kbps  2  (X.1 and V.110)
+                      //     '00100'B  28.kbps  8  (X.1 and V.110)
+                      //     '00101'B  38.kbps  4  (X.1 and V.110)
+                      //     '00110'B  48.kbps  0  (X.1 and V.110)
+                      //     '00111'B  56.kbps  0  (X.1 and V.110)
+                      //     '01000'B  64.0 transparent  kbps
+  BIT2  otherModemType  optional, //'00'B  no other modem specified  type
+                                  // '11'B  V.34
+  BIT1  extension_octet_6d optional,//'0'B or '1'B no octet following 6e
+
+  // OCTET 6e:
+  BIT3  maxNumberOfTrafficChannels  optional, //         '000'B  TCH  1
+                                 //         '001'B  2 TCH
+                                 //         '010'B  TCH  3
+                                 //         '011'B  4 TCH
+                                 //         '100'B  TCH  5
+                                 //         '110'B  6 TCH
+                                 //         '101'B  TCH  7
+                                 //         '111'B  8 TCH
+  BIT4  acceptableChannelCodings  optional,//'0'B TCH/F4.8 not acceptable
+                                     // '1'B  TCH/F4.8      acceptable
+                                     // '0'B  TCH/F9.6  not acceptable
+                                     // '1'B  TCH/F9.6      acceptable
+                                     // '0'spare  B
+                                     // '0'B  TCH/F14.4 not acceptable
+                                     // '1'B  TCH/F14.acceptable  4
+  BIT1 extension_octet_6e optional,//'0'B or '1'B _ no octet following 6d
+
+  // OCTET 6f:
+  BIT4 wantedAirInterfaceUserRate optional,
+                                 //octet 6f (MS to MSC/VLR only):
+                                 // '0000'B  WAIUR applicable  not
+                                 // '0001'B   9.6 kbps
+                                 // '0010'B  14.kbps  4
+                                 // '0011'B  19.2 kbps
+                                 // '0100'B  19.kbps  2
+                                 // '0101'B  28.8 kbps
+                                 // '0110'B  38.kbps  4
+                                 // '0111'B  43.2 kbps
+                                 // '1000'B  57.kbps  6
+                                 // '1001'B  38.4 kbps
+                                 // '1010'B  38.kbps  4
+                                 // '1011'B  38.4 kbps
+                                 // '1101'B  38.kbps  4
+  BIT3  uimi optional,        //  '000'B  user initiated mod. allowed  not
+                     //       '001'B  UIMI allowed upto 1 TCH/F
+                     //       '010'B  UIMI allowed upto 2 TCH/F
+                     //       '011'B  UIMI allowed upto 3 TCH/F
+                     //       '100'B  UIMI allowed upto 4 TCH/F
+  BIT1  extension_octet_6f optional,// '0'B or '1'B _ no octet following 6f
+
+  BIT2  spare optional, //'00'B
+  BIT2  asymetryIndication optional, // spare
+  BIT3  acceptableChannelCodingsExt optional, // spare, set to 0
+  BIT1  extension_octet_6g optional // '1'B;               
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record BC_octet5
+{
+  BIT3  signallingAccessProtocol, //        '001'B I.440/450
+        //        '010'B X.21
+        //        '011'B X.28 dedicated PID, ind. NUI
+        //        '100'B X.28 dedicated PID, uni. NUI
+        //        '101'B X.28 PID  non_dedicated
+        //        '110'B X.32
+  BIT2  rateAdaptation, //     '00'B no adaptation  rate  (RA)
+        //     '01'B V.110/X.30 adaptation  rate
+        //     '10'B CCITT X.31 flag stuffing
+        //     '11'B RA  other  (see octet 5a)
+  BIT2  accessId, //  '00'B identifier  octet
+  BIT1  extension_octet_5, // '0'B or '1'B (if no octet 5A following)
+
+  BIT3  spare2_3  optional, // B'...._000
+  BIT2  otherRateAdaptation  optional, // B'.._00.._ V.interworking  120
+  BIT2  otherInformationTransferCapability optional,
+                              // B'_00...._ interworking RDI
+  BIT1  extension_octet_5a  optional, // B'x......_
+
+  BIT1  spare3_1  optional, // B'......_0
+  BIT1  inbandNegotiation  optional,
+  BIT1  assignor_assignee  optional,
+  BIT1  lli  optional,
+  BIT1  mode  optional,
+  BIT1  multiframe  optional,
+  BIT1  hdrNohdr  optional,
+  BIT1  extension_octet_5b  optional // B'x......_
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record BC_octet4
+{
+  BIT1  establishment, //            '0'demand  B
+  BIT1  nirr, //          '0'B no associated  meaning
+         //         '1'B data 4.8, FR, NT, 6.0
+  BIT1  configuration, //        '0'B point point  to
+  BIT1  duplexMode, //      '0'B duplex  half
+          //     '1'B full duplex
+  BIT2  structure, //   '00'B service data integrity  unit
+         //   '11'B unstructured
+  BIT1  compresion, //  '0'B no DC possible/allowed
+         //  '1'B    DC possible/allowed
+  BIT1  extension_octet_4 // '1'B
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record Speech_AuxiliarySpeech
+{
+   BIT4  speechVersionIndication, //octet 3a (speech MS to MSC/VLR):
+        // B'....0000 speech full rate 1  version
+        // B'....0010 speech full rate version 2
+        // B'....0100 speech full rate 3  version
+        // B'....0001 speech half rate version 1
+        // B'....0011 speech half rate 2  version
+        // B'....0101 speech half rate version 3
+  BIT1  spare1_1, // B'..00....
+  BIT1  cTM_or_Spare, // CTM text telephony supported '1'B, not supported '0'B, or spare
+  BIT1  coding, // B'_0...... extension octet  ITC
+       // B'_1...... other extension octet
+  BIT1  extension_octet_3a_3b   // B'x......_
+} with { variant "EXTENSION_BIT (yes)"};
+
+type set of Speech_AuxiliarySpeech Speech_AuxiliarySpeech_List with { variant "EXTENSION_BIT (yes)"};
+ 
+type record BC_octet3
+{
+  BIT3  informationTransferCapability,  //     '000'speech  B
+                                        //     '001'B UDI
+                                        //     '010'B 3.audio  1kHz
+                                        //     '101'oITC B (see octet 5a)
+                                        //     '110'B speech  auxiliary
+                                        //     '111'B reserved
+  BIT1  transferMode, //    '0'B mode  circuit
+                      //    '1'B packet  mode
+  BIT1  codingStandard, //   '0'B GSM/PCS coding  standardized
+                        //   '1'B  reserved
+  BIT2  radioChannelRequirement, // '01'B MSC/VLR to MS;
+        // '00'B MS (supports) towards MSC/VLR rate dual (half preferred)
+        // '01'B MS (supports) towards MSC/VLR full only  rate
+                           // '10'B rate  dual  (half preferred)
+                           // '11'B rate  dual  (full preferred)
+  BIT1 extension_octet_3,
+     //'0'B or '1'B (THe RAW encoder will overwrite this bit)
+  Speech_AuxiliarySpeech_List  speech_aux_3a_3b     optional                
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record BearerCapability_TLV
+{
+  OCT1  elementIdentifier, // '04'O
+  LIN1  lengthIndicator,   // 1..12
+  // the following octet fields representing an octet group
+  BC_octet3 octet3,  // 1-
+  BC_octet4 octet4 optional,  // 1 octet
+  BC_octet5 octet5 optional,  // 1-3 octets
+  BC_octet6 octet6 optional,  // 1-8 octets
+  BC_octet7 octet7 optional   // 1 octet
+} with { variant (lengthIndicator) "LENGTHTO (octet3, octet4, octet5, octet6,
+                 octet7)"};
+
+type record BearerCapability_LV
+{
+  LIN1  lengthIndicator,   // 1..12
+  // the following octet fields representing an octet group
+  BC_octet3 octet3,  // 1-
+  BC_octet4 octet4 optional,  // 1 octet
+  BC_octet5 octet5 optional,  // 1-3 octets
+  BC_octet6 octet6 optional,  // 1-8 octets
+  BC_octet7 octet7 optional   // 1 octet
+} with { variant (lengthIndicator) "LENGTHTO (octet3, octet4, octet5, octet6,
+                 octet7)"};
+
+//10.5.4.5a Call Control Capabilities
+type record CallControlCapabilities
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,  
+  BIT1  dTMF,
+  BIT1  pCP,
+  BIT1  eNICM,
+  BIT1  mcat,
+  BIT4  maxNumberOfSupportedBearers,
+  BIT4  maxNumberOfSpeechBearers,
+  BIT4  spare2   // '0000'B
+} with { variant (lengthIndicator) "LENGTHTO (dTMF,pCP,eNICM,mcat,
+                                        maxNumberOfSupportedBearers,spare2)" };
+
+
+//10.5.4.6 Call State
+type record CallState_V
+{
+  BIT6  callStateValue,
+  BIT2  codingStd
+};
+   
+type record CallState_TV
+{
+  OCT1  elementIdentifier,
+  BIT6  callStateValue,
+  BIT2  codingStd
+};         
+
+//24.008/10.5.4.7 Called Party BCD Number
+type record CalledPartyBCD_Number
+{
+  OCT1  elementIdentifier, // '5E'O
+  LIN1  lengthIndicator, // 1..15
+  BIT4  numberingPlanIdentification, //       '0000'unknown  B
+              //       '0001'B ISDN/telephony
+              //       '0011'data  B
+              //       '0100'B telex
+              //       '1000'national  B
+              //       '1001'B private
+              //       '1111'B reserved extension  for
+  BIT3  typeOfNumber, //  '000'unknown  B
+              //  '001'B international number
+              //  '010'B        number  national
+              //  '011'B network specific number
+              //  '100'B dedicated access code  short
+              //  '101'B reserved
+              //  '110'reserved  B
+              //  '111'B reserved for extension
+  BIT1  ext1,  // '0'B or '1'B
+  hexstring   digits    optional
+} with { variant (lengthIndicator) "LENGTHTO (numberingPlanIdentification,
+                                       typeOfNumber, ext1, digits)";
+         variant (digits) "PADDING(yes)";
+         variant (digits) "PADDING_PATTERN('1'B)"};
+
+//24.008/10.5.4.8 Called Party SubAddress
+type record CalledPartySubAddress
+{
+  OCT1  elementIdentifier, // H'6D
+  LIN1  lengthIndicator, // 0..21
+  BIT3  spare1_3                optional, // B'...._000
+  BIT1  odd_evenIndicator       optional, 
+                        // B'....0.._ even number of digits  address
+                        // B'....1.._ odd  number of address digits
+  BIT3  typeOfSubAddress        optional, // B'_000.... NSAP
+                                    // B'_010.... specified  user
+  BIT1  ext1                    optional, // B'1......_
+  OCTN  subAddressInformation   optional
+} with { variant (lengthIndicator) "LENGTHTO (spare1_3, odd_evenIndicator,
+                        typeOfSubAddress, ext1, subAddressInformation)"};
+
+
+//10.5.4.9 Calling Party BCD Number
+type record CallingOrCalled_Number_oct3
+{
+  BIT4  numberingPlanIdentification, // Applies for type number  of
+                               // = 000, 001, 010 and 100
+                               // B'....Unknown  0000
+                               // B'....0001 ISDN/telephony number plan
+                               // B'....0011 data numbering plan
+                               // B'....0100 telex numbering plan
+                               // B'....1000 national numbering plan
+                               // B'....1001 private numbering plan
+                               // B'....1111 reserved for extension
+  BIT3  typeOfNumber, // B'_000.... Unknown
+                               // B'_001.... international number
+                               // B'_010.... national number
+                               // B'_011.... network specific number
+                               // B'_100.... dedicated access, short code
+                               // B'_101.... reserved
+                               // B'_110.... reserved
+                               // B'_111.... reserved for extension
+  BIT1  ext1, // B'1......_
+  BIT2  screeningIndicator  optional,
+      // B'......00 User_provided, not screened
+      // B'......01 User_provided, verified and passed
+      // B'......10 User_provided, verified and failed
+      // B'......11 Network provided
+  BIT3  spare1_3  optional, // B'.._000..
+  BIT2  presentationIndicator  optional,
+      // B'_00 Presentation allowed
+      // B'_01 Presentation restricted
+      // B'_10 Number not available due to interworking
+      // B'_11 Reserved
+  BIT1  ext2  optional // B'1......_
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record CallingPartyBCD_Number {
+  OCT1  elementIdentifier, // '5C'O -table 9.70
+  LIN1  lengthIndicator, // 1..12
+  CallingOrCalled_Number_oct3   oct3,
+  hexstring  digits  optional
+} with { variant (lengthIndicator) "LENGTHTO (oct3,digits)";
+         variant (digits) "PADDING(yes)";
+         variant (digits) "PADDING_PATTERN('1'B)"};
+
+//10.5.4.10 Calling Party SubAddress
+type record CallingPartySubAddress
+{
+  OCT1  elementIdentifier, // H'5D
+  LIN1  lengthIndicator, // 0..21
+  BIT3  spare1_3  optional, // B'...._000
+  BIT1  odd_evenIndicator  optional,
+     // B'....0.._ even number of digits  address
+     // B'....1.._ odd  number of address digits
+  BIT3  typeOfSubAddress  optional, // B'_000.... NSAP
+                    // B'_010.... specified  user
+  BIT1  ext1  optional, // B'1......_
+  OCTN  subAddressInformation  optional
+} with { variant (lengthIndicator) "LENGTHTO (spare1_3, odd_evenIndicator,
+                typeOfSubAddress, ext1, subAddressInformation)"};
+
+//24.008/10.5.4.11 Cause
+//moved into MobileL3_CommonIE_Types
+
+//24.008/10.5.4.11a/b
+type record CLIR
+{
+  OCT1  elementIdentifier
+};
+
+//24.008/10.5.4.12 Congestion level
+type record CongestionLevel
+{
+  BIT4 congestionLevel, // '0000'B receiver ready
+                        // '1111'B receiver not ready 
+  BIT4 elementIdentifier
+};
+
+type BIT4 CongestionLevelV;
+
+//24.008/10.5.4.13 Connected Number
+type record ConnectedNumber
+{
+  OCT1  elementIdentifier, // H'4C
+  LIN1  lengthIndicator, // 2..12
+  CallingOrCalled_Number_oct3   oct3,
+  hexstring    digits  optional
+} with { variant (lengthIndicator) "LENGTHTO (oct3,digits)";
+         variant (digits) "PADDING(yes)";
+         variant (digits) "PADDING_PATTERN('1'B)"};
+
+//****************************************************************************
+type record ConnectedSubAddress
+{
+  OCT1  elementIdentifier, // H'4D
+  LIN1  lengthIndicator, // 0..21
+  BIT3  spare1_3                optional, // B'...._000
+  BIT1  odd_evenIndicator       optional,
+    // B'....0.._ even number of digits address
+    // B'....1.._ odd  number of address digits
+  BIT3  typeOfSubAddress        optional, // B'_000.... NSAP
+                      // B'_010.... specified  user
+  BIT1  ext1                    optional, // B'1......_
+  OCTN  subAddressInformation   optional
+} with { variant (lengthIndicator) "LENGTHTO (spare1_3, odd_evenIndicator,
+                        typeOfSubAddress, ext1, subAddressInformation)" };
+
+//10.5.4.15 Facility IE (see also 24.080/3.6
+// moved to Mobile_L3_CommonIE_Types , because it is used by SS and CC
+ 
+// 10.5.4.16 HighLayerCompatibility
+type record HLC_octet3
+{
+  BIT2  presentationMethod, 
+  BIT3  interpretation,
+  BIT2  codingStandard,
+  BIT1  extension_octet_3 //  '1'B  octet4 should follow
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record HLC_octet4
+{
+  BIT7 highLayerCharId,
+  BIT1 extension_octet_4,
+  //octet4a:
+  BIT7 extendedHighLayerCharId optional,
+  BIT1 extension_octet_4a      optional // '1'B
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record HighLayerCompatibility
+{
+  OCT1        elementIdentifier, // H'7D
+  LIN1        lengthIndicator, // 0..3
+  HLC_octet3  octet3 optional, 
+  HLC_octet4  octet4 optional // if octet3 used, octet4 should use, see 10.5.4.16.1
+  //replaced this: octetstring  highLayerCompatibilityContents  length(1..3) optional
+} with { variant (lengthIndicator) "LENGTHTO (octet3, octet4)"};
+
+//10.5.4.17 Keypad Facility
+type record KeypadFacility
+{
+  OCT1  elementIdentifier, //
+  BIT7  keypadInformation, //IA5 char
+  BIT1  spare_1
+};
+
+//10.5.4.18 Low Layer Compatibility
+// see also ITU Q.931
+type record LowLayerCompatibility
+{
+  OCT1         elementIdentifier, // H'7C
+  LIN1         lengthIndicator,   // 0..13
+  octetstring  lowLayerCompatibilityContents  length(2..16) optional
+
+//commented out to simplify the type
+/*  BIT5  informationTransferCapability  optional,
+  BIT2  codingStandard  optional,
+  BIT1  ext1  optional, // B'x........
+  BIT6  spare1_6  optional, // B'..0000000
+  BIT1  negotiationIndicator  optional,
+  BIT1  ext2  optional, // B'x........
+  BIT5  informationTransferRate  optional,
+  BIT2  transferMode  optional,
+  BIT1  ext3  optional, // B'x........
+  BIT2  establishment  optional,
+  BIT2  configuration  optional,
+  BIT3  structure  optional,
+  BIT1  ext4  optional, // B'x........
+  BIT5  informationTransferRateDestOrig  optional,
+  BIT2  symetry  optional,
+  BIT1  ext5  optional, // B'x........
+  BIT5  userInformationLayer1Protocol  optional,
+  BIT2  layer1Identity  optional,
+  BIT1  ext6  optional, // B'x........
+  BIT5  userRate  optional,
+  BIT1  negotiation  optional,
+  BIT1  synchronous_asynchronous  optional,
+  BIT1  ext7  optional, // B'x........
+  BIT1  spare2_1  optional, // B'........0
+  BIT1  flowControlOnRX  optional,
+  BIT1  flowControlOnTX  optional,
+  BIT1  nicOnRX  optional,
+  BIT1  nicOnTX  optional,
+  BIT2  intermediateRate  optional,
+  BIT1  ext8  optional, // B'x........
+  BIT1  spare3_1  optional, // B'........0
+  BIT1  inband_outbandNegotiation  optional,
+  BIT1  assignor_assignee  optional,
+  BIT1  lliNegotiation  optional,
+  BIT1  mode  optional,
+  BIT1  multiFrameSupport  optional,
+  BIT1  hdrNohdr  optional,
+  BIT1  ext9  optional, // B'x........
+  BIT3  parity  optional,
+  BIT2  numberDataBits  optional,
+  BIT2  numberStopBits  optional,
+  BIT1  ext10  optional, // B'x........
+  BIT6  modemType  optional,
+  BIT1  duplexMode  optional,
+  BIT1  ext11  optional, // B'x........
+  BIT5  userInformationLayer2Protocol  optional,
+  BIT2  layer2Id  optional,
+  BIT1  ext12  optional, // B'x........
+  BIT5  userInformationLayer3Protocol  optional,
+  BIT2  layer3Id  optional,
+  BIT1  ext13  optional, // B'x........
+  BIT7  optionalLayer3ProtocolInformation  optional,
+  BIT1  ext14  optional  // B'x........
+*/
+} with { variant (lengthIndicator) "LENGTHTO (lowLayerCompatibilityContents)"};
+
+//10.5.4.19 More Data
+/*
+type record MoreData
+{
+  OCT1  elementIdentifier //'A0'O
+};
+*/
+
+//10.5.4.20 NotificationIndicator
+type record NotificationIndicator
+{
+//  OCT1  elementIdentifier,
+  OCT1  notificationDescription // '80'O : user suspended
+                                // '81'O : user resumed
+                                // '82'O : bearer change
+};
+
+//10.5.4.21 Progress Indicator
+type record ProgressIndicator_LV
+{
+  LIN1  lengthIndicator, // '02'O
+  BIT4  location,          // '0000'user  B
+              // '0001'B private network, local user
+              // '0010'B public  network, user  local
+              // '0100'B public  network, remote user
+              // '0101'B private network, user  remote
+              // '1010'B Network beyond interworking pt.
+  BIT1  spare1_1, //      '0'B
+  BIT2  codingStandard, //  '00'B coding according Q.931
+      //  '01'B reserved for standards  other
+      //  '10'B National standard
+      //  '11'B standard  other
+  BIT1  ext1, // '1'B
+  BIT7  progressDescription, //'0000001'B call is not end_to_end PLMN/ISDN
+     //  '0000010'B destination address is not PLMN/ISDN
+     //  '0000011'B origination address is not PLMN/ISDN
+     //  '0000100'B call has returned to the PLMN/ISDN
+     //  '0001000'B inband info available PLMN/ISDN
+     //  '0100000'B call is end_to_end PLMN/ISDN
+  BIT1  ext2  // '1'B
+} with { variant (lengthIndicator) "LENGTHTO (location, spare1_1,
+                                              codingStandard, ext1, 
+                                              progressDescription, ext2)"};
+
+type record  ProgressIndicator_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator, // '02'O
+  BIT4  location,          // '0000'user  B
+              // '0001'B private network, local user
+              // '0010'B public  network, user  local
+              // '0100'B public  network, remote user
+              // '0101'B private network, user  remote
+              // '1010'B Network beyond interworking pt.
+  BIT1  spare1_1, //      '0'B
+  BIT2  codingStandard, //  '00'B coding according Q.931
+      //  '01'B reserved for standards  other
+      //  '10'B National standard
+      //  '11'B standard  other
+  BIT1  ext1, // '1'B
+  BIT7  progressDescription, //'0000001'B call is not end_to_end PLMN/ISDN
+     //  '0000010'B destination address is not PLMN/ISDN
+     //  '0000011'B origination address is not PLMN/ISDN
+     //  '0000100'B call has returned to the PLMN/ISDN
+     //  '0001000'B inband info available PLMN/ISDN
+     //  '0100000'B call is end_to_end PLMN/ISDN
+  BIT1  ext2  // '1'B
+  // removed by ethbaat:ProgressIndicator_LV  progressIndicator_LV
+} with { variant (lengthIndicator) "LENGTHTO (location, spare1_1,
+                                              codingStandard, ext1, 
+                                              progressDescription, ext2)"};
+
+//24.008/10.5.4.21a Recall Type
+type record RecallType
+{
+  OCT1  elementIdentifier,
+  BIT3  recallType,
+  BIT5  spare_5
+}; 
+
+//24.008/10.5.4.21b Redirecting party BCD number
+type record RedirectingPartyBCDNumberTLV
+{
+  OCT1                         elementIdentifier,
+  LIN1                         lengthIndicator,
+  CallingOrCalled_Number_oct3  oct3,  
+  hexstring                    digits  optional
+} with { variant (lengthIndicator) "LENGTHTO (oct3,digits)";
+         variant (digits) "PADDING(yes)";
+         variant (digits) "PADDING_PATTERN('1'B)"
+          
+};
+
+//24.008/10.5.4.21c Redirecting party Subaddress
+type record RedirectingPartySubaddressTLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  BIT3  spare1_3  optional, // B'...._000
+  BIT1  odd_evenIndicator  optional,
+     // B'....0.._ even number of digits  address
+     // B'....1.._ odd  number of address digits
+  BIT3  typeOfSubAddress  optional, // B'_000.... NSAP
+                    // B'_010.... specified  user
+  BIT1  ext1  optional, // B'1......_
+  OCTN  subAddressInformation  optional
+} with { variant (lengthIndicator) "LENGTHTO (spare1_3, odd_evenIndicator,
+                typeOfSubAddress, ext1, subAddressInformation)"};  
+
+//24.008/10.5.4.22 Repeat Indicator
+type record RepeatIndicator
+{
+  BIT4  RepeatIndication,
+  BIT4  elementIdentifier        
+};
+
+//10.5.4.22a Reverse Call Setup Direction
+type record ReverseCallSetupDirection
+{
+  OCT1  elementIdentifier
+}; 
+
+//10.5.4.22b Setup Contatiner CCBS
+type record SetupContatinerCCBS
+{
+  OCT1  elementIdentifier, 
+  LIN1  lengthIndicator, 
+  OCTN  setupMessage
+} with { variant (lengthIndicator) "LENGTHTO (setupMessage)"}; 
+
+type record SetupContatinerCCBS_LV
+{ 
+  LIN1  lengthIndicator, 
+  OCTN  setupMessage      
+} with { variant (lengthIndicator) "LENGTHTO (setupMessage)"}; 
+
+//10.5.4.23 Signal
+type record ML3_Signal
+{
+  OCT1  elementIdentifier, // H'34
+  OCT1  signalValue   // B'00000000  0. Dial tone on
+                      // B'00000001  1. Ring back on  tone
+                      // B'00000010  2. Intercept tone on
+                      // B'00000011  3. Network congestion on  tone
+                      // B'00000100  4. Busy tone on
+                      // B'00000101  5. Confirm on  tone
+                      // B'00000110  6. Answer tone on
+                      // B'00000111  7. Call waiting on  tone
+                      // B'00001001  9. Off_hook warning tone on
+                      // B'00111111 63. off  Tones
+                      // B'01001111 79. Alerting off
+};
+
+//10.5.4.24 SS Version Indicator
+//moved to MobileL3_CommonIE_Types
+
+//10.5.4.25 User-user
+type record User_user_LV
+{
+  LIN1 lengthIndicator,
+  OCT1  user_userProtocolDiscriminator,
+  octetstring user_userInformation length(0..129) //transparent
+} with { variant (lengthIndicator) "LENGTHTO(user_userInformation)" };
+
+type record User_user_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCT1  user_userProtocolDiscriminator,
+  octetstring user_userInformation length(0..128) //transparent
+} with { variant (lengthIndicator) "LENGTHTO(user_userInformation)" };
+
+type record User_userShort
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCT1  user_userProtocolDiscriminator,
+  octetstring user_userInformation length(0..32)
+} with { variant (lengthIndicator) "LENGTHTO(user_userInformation)" };
+
+//10.5.4.26 Alerting Pattern
+type record  AlertingPattern
+{
+  OCT1  elementIdentifier, //'19'O  
+  LIN1  lengthIndicator,
+  BIT4  alertingPattern_FIELD,
+  BIT4  spare
+} with { variant (lengthIndicator) "LENGTHTO (alertingPattern_FIELD,spare )"}; 
+
+//10.5.4.27 Allowed Actions
+type record AllowedActions
+{
+  OCT1  elementIdentifier, //'19'O  
+  LIN1  lengthIndicator,
+  BIT7  spare_7,
+  BIT1  ccbsActivation //'0'B activation is not possible
+                       //'1'B activation is possible
+} with { variant (lengthIndicator) "LENGTHTO (spare_7,ccbsActivation)"};
+
+//10.5.4.28 Stream Identifier
+type record StreamIdentifier
+{
+  OCT1     elementIdentifier, // '2D'O
+  integer  lengthf, // '01'O
+  OCT1     streamIdentifierValue  // value 0..255
+} with { variant (lengthf) "LENGTHTO (streamIdentifierValue)"};
+
+// 24.008/10.5.4.29 Network Call Control Capabilities
+type record NetworkCallControlCapabilities
+{
+  OCT1  elementIdentifier, //'2F'O
+  LIN1  lengthIndicator,  
+  BIT1  mcs, // multicall support '0'B: no support
+            //                   '1'B :support
+  BIT7  spare
+} with { variant (lengthIndicator) "LENGTHTO (mcs,spare)"};
+
+//10.5.4.30 CauseofNoCli
+type record CauseofNoCli
+{
+  OCT1  elementIdentifier,  //'3A'O
+  LIN1  lengthIndicator,
+  OCT1  causeofNoCli_FIELD  
+} with { variant (lengthIndicator) "LENGTHTO (causeofNoCli_FIELD)"};
+
+//10.5.4.31 Immediate Modification Indicator
+// VOID
+
+// 10.5.4.33 Service Category (TLV)
+type record ServiceCategory
+{
+  OCT1      elementIdentifier,
+  LIN1      lengthIndicator,
+  BIT7      emergencyServiceCategory,
+  BIT1      spare_1
+} with { variant (lengthIndicator) "LENGTHTO( emergencyServiceCategory, spare_1 )"}; 
+
+// 10.5.4.34 REDIAL (T)
+type Type2 Redial;
+ 
+//10.5.4.35 Network Initiated Service Upgrade Indicator
+type record NetworkInitiatedServiceUpgradeIndicator
+{
+  OCT1  elementIdentifier
+}; 
+
+//============================================================================
+// 20.008/9.3 Messages for circuit-switched call control (CC)
+//============================================================================
+
+// 9.3.1.1 Alerting (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Alerting_NW_MS
+{
+  BIT6  messageType, //     '000001'Alerting  B
+  BIT2  nsd,
+  Facility_TLV          facility            optional,
+  ProgressIndicator_TLV progressIndicator   optional,
+  User_user_TLV         user_user           optional
+} with { variant "TAG (
+                facility,           elementIdentifier = '1C'O;
+                progressIndicator,  elementIdentifier = '1E'O;
+                user_user,          elementIdentifier = '7E'O ) "}
+
+// 9.3.1.2 Alerting (MS->NW)
+//****************************************************************************
+type record PDU_ML3_Alerting_MS_NW
+{
+  BIT6  messageType, // B'..000001 (Alerting)
+  BIT2  nsd,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional,
+  SS_VersionIndicator   ss_VersionIndicator optional
+} with { variant "TAG (
+                facility,            elementIdentifier = '1C'O;
+                user_user,           elementIdentifier = '7E'O;
+                ss_VersionIndicator, elementIdentifier = '7F'O ) "};
+                
+// 9.3.2 Call confirmed (MS->NW)
+//****************************************************************************
+type record PDU_ML3_CallConfirmed
+{
+  BIT6  messageType, //    '001000'CallConfirmed  B
+  BIT2  nsd,
+  RepeatIndicator       repeatIndicator     optional, // successive selection:
+                                              //only present also  if
+                                              //BC1&BC2 are present
+                                              // H'circular  D1
+                                              // H'D3 sequential
+  BearerCapability_TLV  bearerCapability1   optional,
+  BearerCapability_TLV  bearerCapability2   optional,
+  ML3_Cause_TLV         cause               optional,
+  CallControlCapabilities cC_Capabilities   optional,
+  StreamIdentifier      streamIdentifier    optional,
+  SupportedCodecList    supportedCodecs     optional
+} with { variant "TAG (
+                repeatIndicator,   elementIdentifier = '1101'B;
+                bearerCapability1, elementIdentifier = '04'O;
+                bearerCapability2, elementIdentifier = '04'O;
+                cause,             elementIdentifier = '08'O;
+                cC_Capabilities,   elementIdentifier = '15'O;
+                streamIdentifier,  elementIdentifier = '2D'O;) "};
+
+// 9.3.3 Call Proceeding (NW->MS) 
+//****************************************************************************
+type record PDU_ML3_CallProceeding
+{
+  BIT6  messageType, //   '000010'CallProceeding  B
+  BIT2  nsd,
+  RepeatIndicator       repeatIndicator     optional, //successive selection:
+                                              //only present also  if
+                                              //BC1&BC2 are present
+                                              // H'circular  D1
+                                              // H'D3 sequential
+  BearerCapability_TLV  bearerCapability1   optional,
+  BearerCapability_TLV  bearerCapability2   optional,
+  Facility_TLV          facility            optional,
+  ProgressIndicator_TLV progressIndicator   optional,
+  PriorityLevel_ML3     priorityGranted     optional,
+  NetworkCallControlCapabilities  networkCCCapabilities optional //10.5.4.29
+} with { variant "TAG (
+                repeatIndicator,   elementIdentifier = '1101'B;
+                bearerCapability1, elementIdentifier = '04'O;
+                bearerCapability2, elementIdentifier = '04'O;
+                facility,          elementIdentifier = '1C'O;
+                progressIndicator, elementIdentifier = '1E'O;
+                priorityGranted,   elementIdentifier = '1000'B;
+                networkCCCapabilities,  elementIdentifier = '2F'O;) "};
+
+// 9.3.4 Congestion Control (NW->MS) 
+//****************************************************************************
+type record PDU_ML3_CongestionControl
+{
+  BIT6  messageType, //   '111001'B CongestionControl
+  BIT2  nsd,
+  CongestionLevelV      congestionLevel,
+  BIT4                  spare_4, 
+  ML3_Cause_TLV         cause               optional
+ } with { variant "TAG ( cause, elementIdentifier = '08'O )"};
+
+
+// 9.3.5 Connect
+//**************************************************************************** 
+// 9.3.5.1 Connect (NW->MS)
+type record PDU_ML3_Connect_NW_MS
+{
+  BIT6  messageType, // '000111'B (Connect)
+  BIT2  nsd,
+  Facility_TLV          facility            optional,
+  ProgressIndicator_TLV progressIndicator   optional,
+  ConnectedNumber       connectedNumber     optional,
+  ConnectedSubAddress   connectedSubAddress optional,
+  User_user_TLV         user_user           optional
+} with { variant "TAG (
+                facility,            elementIdentifier = '1C'O;
+                progressIndicator,   elementIdentifier = '1E'O;
+                connectedNumber,     elementIdentifier = '4C'O;
+                connectedSubAddress, elementIdentifier = '4D'O;
+                user_user,           elementIdentifier = '7E'O ) "};
+
+// 9.3.5.2 Connect (MS->NW)
+
+type record PDU_ML3_Connect_MS_NW 
+{
+  BIT6  messageType, // '000111'B (Connect)
+  BIT2  nsd,
+  Facility_TLV          facility            optional,
+  ConnectedSubAddress   connectedSubAddress optional,
+  User_user_TLV         user_user           optional,
+  SS_VersionIndicator   ss_VersionIndicator optional,
+  StreamIdentifier      streamIdentifier    optional
+} with { variant "TAG (
+                facility,              elementIdentifier = '1C'O;
+                connectedSubAddress,   elementIdentifier = '4D'O;
+                user_user,             elementIdentifier = '7E'O;
+                ss_VersionIndicator,   elementIdentifier = '7F'O;
+                streamIdentifier,      elementIdentifier = '2D'O ) "};
+                
+// 9.3.6 Connect Ack (NW->MS) (MS->NW)
+//****************************************************************************                      
+type record PDU_ML3_ConnectAck
+{
+  BIT6  messageType, // '001111'B (ConnectAck)
+  BIT2  nsd
+};
+
+// 9.3.7 Disconnect
+//****************************************************************************  
+// 9.3.7.1 Disconnect (NW-MS)
+type record PDU_ML3_Disconnect_NW_MS
+{
+  BIT6  messageType, //   '100101'B  (Disconnect)
+  BIT2  nsd,
+  ML3_Cause_LV          cause,
+  Facility_TLV          facility            optional,
+  ProgressIndicator_TLV progressIndicator   optional,
+  User_user_TLV         user_user           optional,
+  AllowedActions        allowedActions      optional
+} with { variant "TAG (
+                facility,           elementIdentifier = '1C'O;
+                progressIndicator,  elementIdentifier = '1E'O;
+                user_user,          elementIdentifier = '7E'O;
+                allowedActions,     elementIdentifier = '7B'O ) "};
+
+// 9.3.7.2 Disconnect (MS->NW)
+type record PDU_ML3_Disconnect_MS_NW
+{
+  BIT6  messageType,  //    '100101'B (Disconnect)
+  BIT2  nsd,
+  ML3_Cause_LV          cause,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional,
+  SS_VersionIndicator   ss_VersionIndicator optional
+} with { variant "TAG (
+                facility,             elementIdentifier = '1C'O;
+                user_user,            elementIdentifier = '7E'O;
+                ss_VersionIndicator,  elementIdentifier = '7F'O ) "};
+
+// 9.3.8 Emergency Setup (MS->NW )
+//****************************************************************************  
+type record PDU_ML3_EmergencySetup
+{
+  BIT6  messageType,  // '001110'B
+  BIT2  nsd, 
+  BearerCapability_TLV  bearerCapability    optional,
+  StreamIdentifier      streamIdentifier    optional,
+  SupportedCodecList    supportedCodecs     optional,
+  ServiceCategory       emergencyCategory   optional
+} with { variant "TAG ( 
+     bearerCapability,  elementIdentifier = '04'O;
+     streamIdentifier,  elementIdentifier = '2D'O; 
+     emergencyCategory, elementIdentifier = '2E'O; ) "};
+     
+// 9.3.9.1 (NW->MS) and 9.3.9.2 (MS->NW) Facility (CallControl!!!)
+//****************************************************************************
+type record PDU_ML3_Facility
+{
+  BIT6  messageType, // facilityIEI
+  BIT2  nsd,
+  Facility_LV           facility, //10.5.4.15
+  SS_VersionIndicator   ss_version          optional // only for MS->NW
+} with { variant "TAG (  ss_version,  elementIdentifier = '7F'O ) "};  
+
+//9.3.10 Hold (MS->NW)
+//****************************************************************************
+type record PDU_ML3_Hold
+{
+  BIT6  messageType,    //    '011000'Hold  B
+  BIT2  nsd
+};
+
+//9.3.11 Hold Acknowledge (NW->MS)
+//****************************************************************************
+type record PDU_ML3_HoldAcknowledge
+{
+  BIT6  messageType,    //   '011001'B   Acknowledge  Hold
+  BIT2  nsd
+};
+
+//9.3.12 Hold Reject (NW->MS)
+//****************************************************************************
+type record PDU_ML3_HoldReject
+{
+  BIT6  messageType, //'011010'B
+  BIT2  nsd,
+  ML3_Cause_LV          cause
+};
+
+//9.3.13 Modify (MS->NW) (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Modify
+{
+  BIT6  messageType, //'010111'B
+  BIT2  nsd,
+  BearerCapability_LV       bearerCapability,
+  LowLayerCompatibility     lowLayerCompatibility     optional,
+  HighLayerCompatibility    highLayerCompatibility    optional,
+  ReverseCallSetupDirection reverseCallSetupDirection optional,
+  NetworkInitiatedServiceUpgradeIndicator  networkInitiatedServiceUpgradeIndicator  optional 
+} with { variant "TAG (
+      lowLayerCompatibility,     elementIdentifier = '7C'O;
+      highLayerCompatibility,    elementIdentifier = '7D'O;
+      reverseCallSetupDirection, elementIdentifier = 'A3'O;
+      networkInitiatedServiceUpgradeIndicator,     elementIdentifier = 'A4'O ) "};  
+
+//9.3.14 Modify Complete (MS->NW) (NW->MS)
+//****************************************************************************
+type record PDU_ML3_ModifyComplete
+{
+  BIT6  messageType, //'011111'B
+  BIT2  nsd,
+  BearerCapability_LV       bearerCapability,
+  LowLayerCompatibility     lowLayerCompatibility     optional,
+  HighLayerCompatibility    highLayerCompatibility    optional,
+  ReverseCallSetupDirection reverseCallSetupDirection optional
+} with { variant "TAG (
+      lowLayerCompatibility,     elementIdentifier = '7C'O;
+      highLayerCompatibility,    elementIdentifier = '7D'O;
+      reverseCallSetupDirection, elementIdentifier = 'A3'O;) "}; 
+      
+//9.3.15 Modify Reject (MS->NW) (NW->MS)
+//****************************************************************************
+type record PDU_ML3_ModifyReject
+{
+  BIT6  messageType, //'010011'B
+  BIT2  nsd,
+  BearerCapability_LV     bearerCapability,
+  ML3_Cause_LV            cause,
+  LowLayerCompatibility   lowLayerCompatibility     optional,
+  HighLayerCompatibility  highLayerCompatibility    optional
+} with { variant "TAG (
+      lowLayerCompatibility,     elementIdentifier = '7C'O;
+      highLayerCompatibility,    elementIdentifier = '7D'O;) "}; 
+
+//9.3.16 Notify (MS->NW) (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Notify
+{
+  BIT6  messageType, //'111110'B
+  BIT2  nsd,
+  NotificationIndicator notificationIndicator
+};
+    
+// 9.3.17 Progress (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Progress
+{
+  BIT6  messageType,    //  '000011'Progress  B
+  BIT2  nsd,
+  ProgressIndicator_LV  progressIndicator,
+  User_user_TLV         user_user             optional      
+} with { variant "TAG (user_user, elementIdentifier = '7E'O; ) "};
+
+// 9.3.17a CC Establishment (NW->MS)
+//****************************************************************************
+type record PDU_ML3_CC_Establishment
+{
+  BIT6  messageType,    //  '000100'
+  BIT2  nsd,
+  SetupContatinerCCBS_LV  container  
+}
+
+// 9.3.17b CC Establishment Confirmed (MS->NW)
+//****************************************************************************
+type record PDU_ML3_CC_EstablishmentConf
+{
+  BIT6  messageType,    //  'CC_EstablishmentConf'
+  BIT2  nsd,
+  RepeatIndicator       repeatIndicator     optional,
+  BearerCapability_TLV  bearerCapability1,
+  BearerCapability_TLV  bearerCapability2   optional,    
+  ML3_Cause_TLV         cause               optional,
+  SupportedCodecList    supportedCodecs     optional
+} with { variant "TAG (
+                repeatIndicator,    elementIdentifier = '1101'B;
+                bearerCapability2,  elementIdentifier = '04'O;
+                cause,              elementIdentifier = '08'O; ) "};
+
+// 9.3.18.1 Release (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Release_NW_MS 
+{
+  BIT6  messageType, //    '101101'Release  B
+  BIT2  nsd,
+  ML3_Cause_TLV         cause               optional,
+  ML3_Cause_TLV         secondCause         optional,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional
+} with { variant "TAG (
+                cause,        elementIdentifier = '08'O;
+                secondCause,  elementIdentifier = '08'O;
+                facility,     elementIdentifier = '1C'O;
+                user_user,    elementIdentifier = '7E'O ) "};
+
+// 9.3.18.2 Release (MS->NW)
+//****************************************************************************
+type record PDU_ML3_Release_MS_NW
+{
+  BIT6  messageType, //    '101101'Release  B
+  BIT2  nsd,
+  ML3_Cause_TLV         cause               optional,
+  ML3_Cause_TLV         secondCause         optional,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional,
+  SS_VersionIndicator   ss_VersionIndicator optional
+} with { variant "TAG (
+                cause,                elementIdentifier = '08'O;
+                secondCause,          elementIdentifier = '08'O;
+                facility,             elementIdentifier = '1C'O;
+                user_user,            elementIdentifier = '7E'O;
+                ss_VersionIndicator,  elementIdentifier = '7F'O ) "};
+
+// 9.3.18a Recall (CCBS) (NW->MS)
+//****************************************************************************
+type record PDU_ML3_Recall
+{
+  BIT6  messageType, //    '001011'Recall    
+  BIT2  nsd,
+  RecallType            recallType,
+  Facility_LV           facility
+};
+
+// 9.3.19.1 Release Complete (NW->MS)
+//****************************************************************************
+type record PDU_ML3_ReleaseComplete_NW_MS
+{
+  BIT6  messageType, //    '101010'B ReleaseComplete  
+  BIT2  nsd,
+  ML3_Cause_TLV         cause               optional,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional
+} with { variant "TAG (
+                cause,      elementIdentifier = '08'O;
+                facility,   elementIdentifier = '1C'O ;
+                user_user,  elementIdentifier = '7E'O ) "};
+
+// 9.3.19.2 Release Complete (MS->NW)
+//****************************************************************************
+type record PDU_ML3_ReleaseComplete_MS_NW
+{
+  BIT6  messageType, //   '101010'B  (ReleaseComplete)
+  BIT2  nsd,
+  ML3_Cause_TLV         cause               optional,
+  Facility_TLV          facility            optional,
+  User_user_TLV         user_user           optional,
+  SS_VersionIndicator   ss_VersionIndicator optional
+} with { variant "TAG (
+                cause,                elementIdentifier = '08'O;
+                facility,             elementIdentifier = '1C'O;
+                user_user,            elementIdentifier = '7E'O;
+                ss_VersionIndicator,  elementIdentifier = '7F'O ) "};
+
+//9.3.20 Retrieve (MS->NW)
+//****************************************************************************
+type record PDU_ML3_Retrieve
+{
+  BIT6  messageType, //'011100'B
+  BIT2  nsd
+};
+
+//9.3.21 Retrieve Acknowledge (NW->MS)
+//****************************************************************************
+type record PDU_ML3_RetrieveAck
+{
+  BIT6  messageType, //'011101'B
+  BIT2  nsd
+};
+
+//9.3.22 Retrieve Reject (NW->MS)
+//****************************************************************************
+type record PDU_ML3_RetrieveRej
+{
+  BIT6  messageType, //'011110'B
+  BIT2  nsd,
+  ML3_Cause_LV cause
+};
+
+// 9.3.23.1  Setup NW->MS 
+//****************************************************************************
+type record PDU_ML3_Setup_NW_MS
+{
+  BIT6  messageType,   // '000101'B  (Setup)
+  BIT2  nsd,
+  RepeatIndicator       bcRepeatIndicator       optional, // successive selection:
+                                                 // only present also  if
+                                                 // BC1&BC2 are present
+                                                 // H'circular  D1
+                                                 // H'D3 sequential
+  BearerCapability_TLV  bearerCapability1        optional,
+  BearerCapability_TLV  bearerCapability2        optional,
+  Facility_TLV          facility                 optional,
+  ProgressIndicator_TLV progressIndicator        optional,
+  ML3_Signal            signal                   optional,
+  CallingPartyBCD_Number callingPartyBCD_Number  optional,
+  CallingPartySubAddress callingPartySubAddress  optional,
+  CalledPartyBCD_Number calledPartyBCD_Number    optional,
+  CalledPartySubAddress calledPartySubAddress    optional,
+  RedirectingPartyBCDNumberTLV   redirectingPartyBCDNumber   optional,
+  RedirectingPartySubaddressTLV  redirectingPartySubaddress  optional,
+  RepeatIndicator       llc_RepeatIndicator      optional, // H'circular  D1
+                                                            // H'D3 sequential
+  LowLayerCompatibility lowLayerCompatibility1   optional,
+  LowLayerCompatibility lowLayerCompatibility2   optional,
+  RepeatIndicator       hlc_RepeatIndicator      optional, // H'circular  D1
+                                                            // H'D3 sequential
+  HighLayerCompatibility highLayerCompatibility1 optional,
+  HighLayerCompatibility highLayerCompatibility2 optional,
+  User_userShort        user_user                optional,
+  PriorityLevel_ML3     priority                 optional,
+  AlertingPattern       alert                    optional, //10.5.4.26
+  NetworkCallControlCapabilities  networkCCCapabilities optional, //10.5.4.29
+  CauseofNoCli          causeofNoCli             optional, //10.5.4.30
+  BackupBearerCapacity  backupBearerCapacity     optional  //10.5.4.4a
+} with { variant "TAG (
+                bcRepeatIndicator,        elementIdentifier = '1101'B;
+                bearerCapability1,        elementIdentifier = '04'O;
+                bearerCapability2,        elementIdentifier = '04'O;
+                facility,                 elementIdentifier = '1C'O;
+                progressIndicator,        elementIdentifier = '1E'O;
+                signal,                   elementIdentifier = '34'O;
+                callingPartyBCD_Number,   elementIdentifier = '5C'O;
+                callingPartySubAddress,   elementIdentifier = '5D'O;
+                calledPartyBCD_Number,    elementIdentifier = '5E'O;
+                calledPartySubAddress,    elementIdentifier = '6D'O;
+                redirectingPartyBCDNumber,   elementIdentifier = '74'O;               
+                redirectingPartySubaddress,  elementIdentifier = '75'O; 
+                llc_RepeatIndicator,      elementIdentifier = '1101'B;
+                lowLayerCompatibility1,   elementIdentifier = '7C'O;
+                lowLayerCompatibility2,   elementIdentifier = '7C'O;
+                hlc_RepeatIndicator,      elementIdentifier = '1101'B;
+                highLayerCompatibility1,  elementIdentifier = '7D'O;
+                highLayerCompatibility2,  elementIdentifier = '7D'O;
+                user_user,                elementIdentifier = '7E'O;
+                priority,                 elementIdentifier = '1000'B;
+                alert,                    elementIdentifier = '19'O;
+                networkCCCapabilities,    elementIdentifier = '2F'O;
+                causeofNoCli,             elementIdentifier = '3A'O;
+                backupBearerCapacity,     elementIdentifier = '41'O ) "}; 
+                
+// 9.3.23.2 Setup MS->NW
+//****************************************************************************
+type record PDU_ML3_Setup_MS_NW
+{
+  BIT6  messageType,   //     '000101'B  (Setup)
+  BIT2  nsd,
+  RepeatIndicator         bcRepeatIndicator       optional, // successive selection:
+                                                 // only present also  if
+                                                 // BC1&BC2 are present
+                                                 // H'circular  D1
+                                                 // H'D3 sequential
+  BearerCapability_TLV    bearerCapability1,        //mandatory!!
+  BearerCapability_TLV    bearerCapability2       optional,
+  Facility_TLV            facility                optional,
+  CallingPartySubAddress  callingPartySubAddress  optional,
+  CalledPartyBCD_Number   calledPartyBCD_Number,  //mandatory!!
+  CalledPartySubAddress   calledPartySubAddress   optional,
+  RepeatIndicator         llc_RepeatIndicator     optional, // H'circular  D1
+                        // H'D3 sequential
+  LowLayerCompatibility   lowLayerCompatibility1  optional,
+  LowLayerCompatibility   lowLayerCompatibility2  optional,
+  RepeatIndicator         hlc_RepeatIndicator     optional, // H'circular  D1
+                          // H'D3 sequential
+  HighLayerCompatibility  highLayerCompatibility1 optional,
+  HighLayerCompatibility  highLayerCompatibility2 optional,
+  User_userShort          user_user               optional,
+  SS_VersionIndicator     ss_VersionIndicator     optional,
+  CLIR                    clir_Suppression        optional, // H'A1
+  CLIR                    clir_Invocation         optional, // H'A2
+  CallControlCapabilities cC_Capabilities         optional,
+  Facility_TLV            facility_ccbs1          optional,
+  Facility_TLV            facility_ccbs2          optional,
+  StreamIdentifier        streamIdentifier        optional,
+  SupportedCodecList      supportedCodecs         optional,
+  Redial                  redial                  optional
+} with { variant "TAG (
+                bcRepeatIndicator,        elementIdentifier = '1101'B;
+                //bearerCapability1,        elementIdentifier = '04'O;
+                bearerCapability2,        elementIdentifier = '04'O;
+                facility,                 elementIdentifier = '1C'O;
+                callingPartySubAddress,   elementIdentifier = '5D'O;
+                //calledPartyBCD_Number,    elementIdentifier = '5E'O;
+                calledPartySubAddress,    elementIdentifier = '6D'O;
+                llc_RepeatIndicator,      elementIdentifier = '1101'B;
+                lowLayerCompatibility1,   elementIdentifier = '7C'O;
+                lowLayerCompatibility2,   elementIdentifier = '7C'O;
+                hlc_RepeatIndicator,      elementIdentifier = '1101'B;
+                highLayerCompatibility1,  elementIdentifier = '7D'O;
+                highLayerCompatibility2,  elementIdentifier = '7D'O;
+                user_user,                elementIdentifier = '7E'O;
+                ss_VersionIndicator,      elementIdentifier = '7F'O;
+                clir_Suppression,         elementIdentifier = 'A1'O;
+                clir_Invocation,          elementIdentifier = 'A2'O;
+                cC_Capabilities,          elementIdentifier = '15'O;
+                facility_ccbs1,           elementIdentifier = '1D'O;
+                facility_ccbs2,           elementIdentifier = '1B'O;
+                streamIdentifier,         elementIdentifier = '2D'O;
+                redial,                   elementIdentifier = 'A3'O; ) "};
+
+//9.3.23a StartCC  (MS->NW)
+//****************************************************************************
+type record PDU_ML3_StartCC
+{
+  BIT6  messageType, //''B;
+  BIT2  nsd,
+  CallControlCapabilities cC_Capabilities optional
+} with { variant "TAG (cC_Capabilities, elementIdentifier = '15'O;) "};
+
+// 9.3.24  Start DTMF (MS->NW)
+//****************************************************************************
+type record PDU_ML3_StartDTMF
+{
+  BIT6  messageType, //'110101'B;
+  BIT2  nsd,
+  KeypadFacility        keypadFacility  
+};
+
+// 9.3.25  Start DTMF Acknowledge (NW->MS)
+//****************************************************************************
+type record PDU_ML3_StartDTMFAck
+{
+  BIT6  messageType, //'110110'B;
+  BIT2  nsd,
+  KeypadFacility        keypadFacility  
+};
+
+// 9.3.26  Start DTMF Reject (NW->MS)
+//****************************************************************************
+type record PDU_ML3_StartDTMFRej
+{
+  BIT6  messageType, //'110111'B;
+  BIT2  nsd,
+  ML3_Cause_LV          cause    
+};
+
+// 9.3.27  Status (NW->MS) (MS->NW)
+//****************************************************************************
+type record PDU_ML3_Status
+{
+  BIT6  messageType, //'111101'B;   
+  BIT2  nsd,
+  ML3_Cause_LV          cause,
+  CallState_V           callState,
+  AuxiliaryStates_TLV   auxiliaryStates optional //'24'O
+} with { variant "TAG (auxiliaryStates,elementIdentifier ='24'O ) " };
+
+// 9.3.28  Status enquiry (NW->MS) (MS->NW)
+//****************************************************************************
+type record PDU_ML3_StatusEnquiry
+{
+  BIT6  messageType, //'110100'B;   
+  BIT2  nsd
+};
+
+// 9.3.29 Stop DTMF (MS->NW)
+//****************************************************************************
+type record PDU_ML3_StopDTMF
+{
+  BIT6  messageType, //'110001'B;   
+  BIT2  nsd
+};
+
+// 9.3.30 Stop DTMF Ack (NW->MS)
+//****************************************************************************
+type record PDU_ML3_StopDTMFAck
+{
+  BIT6  messageType, //'110010'B;   
+  BIT2  nsd
+};
+
+// 9.3.31.1   User Information 
+//****************************************************************************
+type record PDU_ML3_UserInformation
+{
+  BIT6  messageType, //'010000'B;
+  BIT2  nsd,
+  User_user_LV          user_user,
+  OCT1                  moreData optional 
+};
+
+
+// **************************************************************************
+// *  9.3 Call Control Messages (MS->MSC)
+//  * Ref:(24.008/Table 9.54 (order) and Table 10.3(messageType values) )
+// **************************************************************************
+type union PDU_ML3_CC_MS_NW
+{
+  PDU_ML3_Alerting_MS_NW           alerting_MS_NW, //Call establishment
+  PDU_ML3_CallConfirmed            callConfirmed,
+  PDU_ML3_Connect_MS_NW            connect_MS_NW,
+  PDU_ML3_ConnectAck               connectAck,
+  PDU_ML3_EmergencySetup           emergencySetup, 
+  PDU_ML3_CC_EstablishmentConf     cc_EstablishmentConf, 
+  PDU_ML3_StartCC                  startCC,
+  PDU_ML3_Setup_MS_NW              setup_MS_NW,
+
+  PDU_ML3_Modify                   modify,         //call information phase msg
+  PDU_ML3_ModifyComplete           modifyComplete,
+  PDU_ML3_ModifyReject             modifyReject,
+  PDU_ML3_UserInformation          userInformation,
+
+  PDU_ML3_Disconnect_MS_NW         disconnect_MS_NW,//call clearing
+  PDU_ML3_Release_MS_NW            release_MS_NW,
+  PDU_ML3_ReleaseComplete_MS_NW    releaseComplete_MS_NW,
+
+  PDU_ML3_Facility                 facility,//for Suppl.Service contr.
+  PDU_ML3_Hold                     hold,
+  PDU_ML3_Retrieve                 retrieve, 
+
+  PDU_ML3_Notify                   notify,//misc
+  PDU_ML3_StartDTMF                startDTMF,
+  PDU_ML3_Status                   status,
+  PDU_ML3_StatusEnquiry            statusEnquiry,
+  PDU_ML3_StopDTMF                 stopDTMF
+} with { variant "TAG (
+                alerting_MS_NW,         messageType ='000001'B;//call establish
+                callConfirmed,          messageType ='001000'B;
+                connect_MS_NW,          messageType ='000111'B;
+                connectAck,             messageType ='001111'B;
+                emergencySetup,         messageType ='001110'B;
+                cc_EstablishmentConf,   messageType ='000110'B; 
+                startCC,                messageType ='001001'B;          
+                setup_MS_NW,            messageType ='000101'B;
+
+                modify,                 messageType ='010111'B;//call inf.ph.msg
+                modifyComplete,         messageType ='011111'B;
+                modifyReject,           messageType ='010011'B;
+                userInformation,        messageType ='010000'B;
+
+                disconnect_MS_NW,       messageType ='100101'B;//call clearing
+                release_MS_NW,          messageType ='101101'B;                
+                releaseComplete_MS_NW,  messageType ='101010'B;
+                                
+                facility,               messageType ='111010'B;//messages for SS
+                hold,                   messageType ='011000'B;
+                retrieve,               messageType ='011100'B;                                                  
+
+                notify,                 messageType ='111110'B; //misc    
+                startDTMF,              messageType ='110101'B;
+                status,                 messageType ='111101'B;
+                statusEnquiry,          messageType ='110100'B;
+                stopDTMF,               messageType ='110001'B;
+          )" };
+
+// ***************************************************************************
+// *   9.3 Call Control Messages MSC -> MS (24.008/Table 9.54 and Table 10.3)
+// ***************************************************************************
+type union PDU_ML3_CC_NW_MS
+{
+  PDU_ML3_Alerting_NW_MS           alerting_NW_MS, //call establish
+  PDU_ML3_CallConfirmed            callConfirmed,
+  PDU_ML3_CallProceeding           callProceeding,
+  PDU_ML3_Connect_NW_MS            connect_NW_MS,
+  PDU_ML3_ConnectAck               connectAck,
+  PDU_ML3_Progress                 progress,
+  PDU_ML3_CC_Establishment         cc_Establishment, 
+  //PDU_ML3_Recall                   recall,    
+  PDU_ML3_Setup_NW_MS              setup_NW_MS,
+
+  PDU_ML3_Modify                   modify,         //call information phase msg
+  PDU_ML3_ModifyComplete           modifyComplete,
+  PDU_ML3_ModifyReject             modifyReject,
+  PDU_ML3_UserInformation          userInformation,
+
+  PDU_ML3_Disconnect_NW_MS         disconnect_NW_MS,
+  PDU_ML3_Release_NW_MS            release_NW_MS,
+  PDU_ML3_ReleaseComplete_NW_MS    releaseComplete_NW_MS,
+
+  PDU_ML3_Facility                 facility, //for Suppl.Service contr.
+  PDU_ML3_HoldAcknowledge          holdAcknowledge,
+  PDU_ML3_HoldReject               holdReject,
+  PDU_ML3_RetrieveAck              retrieveAck,
+  PDU_ML3_RetrieveRej              retrieveRej,
+
+  PDU_ML3_CongestionControl        congestionControl, //misc
+  PDU_ML3_Notify                   notify,
+  PDU_ML3_StartDTMFAck             startDTMFAck,
+  PDU_ML3_StartDTMFRej             startDTMFRej,
+  PDU_ML3_Status                   status,
+  PDU_ML3_StatusEnquiry            statusEnquiry,
+  PDU_ML3_StopDTMFAck              stopDTMFAck
+} with { variant "TAG (
+                alerting_NW_MS,         messageType ='000001'B;//Call establishment
+                callConfirmed,          messageType ='001000'B;
+                callProceeding,         messageType ='000010'B;
+                connect_NW_MS,          messageType ='000111'B;
+                connectAck,             messageType ='001111'B;
+                progress,               messageType ='000011'B;
+                cc_Establishment,       messageType ='000100'B;
+                //recall,                 messageType ='001011'B;                  
+                setup_NW_MS,            messageType ='000101'B;
+
+                modify,                 messageType ='010111'B;//call inf.ph.msg
+                modifyComplete,         messageType ='011111'B;
+                modifyReject,           messageType ='010011'B;
+                userInformation,        messageType ='010000'B;
+
+                disconnect_NW_MS,       messageType ='100101'B;//call clearing
+                release_NW_MS,          messageType ='101101'B;             
+                releaseComplete_NW_MS,  messageType ='101010'B;
+                
+                facility,               messageType ='111010'B;//for SS contr.
+                holdAcknowledge,        messageType ='011001'B;
+                holdReject,             messageType ='011010'B;
+                retrieveAck,            messageType ='011101'B;
+                retrieveRej,            messageType ='011110'B;
+                
+                congestionControl,      messageType ='111001'B;//misc
+                notify,                 messageType ='111110'B;               
+                startDTMFAck,           messageType ='110110'B;
+                startDTMFRej,           messageType ='110111'B;
+                status,                 messageType ='111101'B;
+                statusEnquiry,          messageType ='110100'B;
+                stopDTMFAck,            messageType ='110010'B;
+              )"
+};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_CommonIE_Types.ttcn b/src/MobileL3_CommonIE_Types.ttcn
new file mode 100644
index 0000000..4b015db
--- /dev/null
+++ b/src/MobileL3_CommonIE_Types.ttcn
@@ -0,0 +1,679 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_CommonIE_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+module  MobileL3_CommonIE_Types {
+
+import from General_Types all;
+
+// This type is a container for all necessary MS related parameters
+type record MS_parameters
+{
+  integer       imsi_length,  //in
+  BIT4          imsi_firstdigit,
+  octetstring   imsi,
+  octetstring   number,
+  integer       SCCP_connId, //connection Id of currently used SCCP connection
+  integer       L3_NSD,  // actual value of L3 NSD
+  BIT1          tiFlag   // '0'B for call originator, '1' for call destination
+  // this is an example how to set the value
+  // tsp_imsi_1_firstdigit := '0010'B
+  // tsp_imsi_1 :=  '26200103000015'O;   // '262021030000051'O;
+  // tsp_calledPartyBCD_Number_digits := '7112300020'O  ;   // '1721030002'O
+}
+
+// Use these Types instead of repeating it !
+
+type record Type1_V
+{
+  BIT4  dummy,
+  BIT4  valuePart
+};
+
+type record Type1_TV
+{
+  BIT4  valuePart,
+  BIT4  elementIdentifier
+};
+
+type record Type2
+{
+  OCT1  elementIdentifier
+};
+
+type record Type3_V
+{
+  OCTN  valuePart
+};
+
+type record Type3_TV
+{
+  OCT1  elementIdentifier,
+  OCTN  valuePart
+};
+
+type record Type4_LV
+{
+  LIN1  lengthIndicator,
+  OCTN  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+type record Type4_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCTN  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+///////////////////////////////////////
+//   IE Type definitions
+///////////////////////////////////////
+
+type record ML3_NotifySS_Arg
+{
+  OCT1  sequenceTag,
+  OCT1  sequenceLength,
+  OCT1  ssCodeTag,
+  OCT1  ssCodeLength,
+  OCT1  ssCodeValue,
+  OCT1  ssIndicatorTag,
+  OCT1  ssIndicatorLength,
+  OCT1  ssIndicatorValue
+};
+
+
+//============================================================================
+// 10.5.1 Common Information elements
+//============================================================================
+
+// 10.5.1.1 Cell Identity
+type record CellIdentity
+{
+  OCT1  elementIdentifier,
+  OCT2  cIvalue
+};
+
+// 10.5.1.2 CipheringKeySequenceNumber
+type record CipheringKeySequenceNumberTV
+{
+  CipheringKeySequenceNumberV  keySequence,
+  BIT4                         elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1000'B)"; };
+
+type record CipheringKeySequenceNumberV
+{
+  BIT3               keySequence,
+  BIT1               spare
+};
+
+//24.008/10.5.1.3 Location Area Identification
+type record LocationAreaIdentification_V
+{
+  OCT3  mcc_mnc,
+  OCT2  lac
+};
+
+type record LocationAreaIdentification_TV
+{
+  OCT1  elementIdentifier,
+  OCT3  mcc_mnc,
+  OCT2  lac
+};
+
+// 24.008/ 10.5.1.4 Mobile Identity
+type record MobileIdentityTLV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare1,
+  MobileIdentityLV   mobileIdentityLV
+};
+
+type record MobileIdentityLV
+{
+  LIN1               lengthIndicator,
+  MobileIdentityV    mobileIdentityV
+} with { variant (lengthIndicator) "LENGTHTO (mobileIdentityV)"};
+
+type record MobileIdentityV
+{
+  BIT3                         typeOfIdentity,
+  OddEvenInd_Identity          oddEvenInd_identity
+} with { variant (oddEvenInd_identity) "CROSSTAG
+  (
+  imei,                     typeOfIdentity ='010'B;
+  imsi,                     typeOfIdentity ='001'B;
+  imei_sv,                  typeOfIdentity ='011'B;
+  tmsi_ptmsi,               typeOfIdentity ='100'B;
+  tmgi_and_MBMS_SessionID,  typeOfIdentity ='101'B;
+  no_identity,              typeOfIdentity ='000'B;
+  )"};
+
+
+type union OddEvenInd_Identity
+{
+  IMSI_L3                  imsi,  // avoid name conflict with RANAP
+  IMEI_L3                  imei,     // avoid name conflict with RANAP
+  IMEI_SV                  imei_sv,
+  TMSI_PTMSI               tmsi_ptmsi,
+  TMGI_and_MBMS_SessionID  tmgi_and_MBMS_SessionID,
+  No_Identity              no_identity
+};
+
+type record IMSI_L3
+{
+  BIT1               oddevenIndicator,       // '1'B or '0'B
+  hexstring          digits  length(5..15),
+  BIT4               fillerDigit  optional   // B'1111, fillerDigit is present
+  // if oddevenIndicator=0
+} with { variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";};
+
+type record IMEI_L3
+{
+  BIT1               oddevenIndicator,   // '1'B
+  hexstring          digits  length(15)
+};
+
+type record TMSI_PTMSI
+{
+  BIT1               oddevenIndicator, // '0'B
+  BIT4               fillerDigit, // B'1111
+  OCT4               octets
+};
+
+type record IMEI_SV
+{
+  BIT1               oddevenIndicator,  // '0'B
+  hexstring          digits length(16),
+  BIT4               fillerDigit    // filler '1111'B
+};
+
+type record TMGI_and_MBMS_SessionID
+{
+  BIT1               oddevenIndicator,
+  BIT1               mCC_MNCIndicator,  // 1: present
+  BIT1               mBMS_SessionIdentityIndicator,  // 1: present
+  BIT2               spare,
+  OCT3               mBMS_ServiceID,
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT1               mBMS_SessionIdentity
+}
+
+type record No_Identity
+{
+  BIT1               oddevenIndicator,  // '0'B (guessed)
+  hexstring          fillerDigits length(5) // length to be "3" if the GMM identification procedure is used
+};
+
+// 24.008/ 10.5.1.5 MobileStationClassmark1
+type record MobileStationClassmark1_TV
+{
+  OCT1   elementIdentifier, //'???'H
+  BIT3   rf_PowerCapability,
+  BIT1   a5_1,
+  BIT1   esind,
+  BIT2   revisionLevel,
+  BIT1   spare1_1
+};
+
+type record MobileStationClassmark1_V
+{
+  BIT3  rf_PowerCapability,
+  // class1 (000) (for GSM+DCS+PCS)
+  // class2 (001) (for GSM+DCS+PCS)
+  // class3 (010) (for GSM+DCS+PCS)
+  // class4 (011) (only for GSM)
+  // class5 (100) (only for GSM)
+  BIT1  a5_1,
+  // encryption algor. A5/available  1  (1)
+  // encryption algor. A5/1 available  not  (0)
+  BIT1  esind,
+  BIT2  revisionLevel,
+  BIT1  spare1_1
+};
+
+// 24.008/ 10.5.1.6 MobileStationClassmark2
+//4th octet:
+type record MobileStationClassmark2_oct4
+{
+  BIT1  fc, // '0'B no MS support of E/R_GSM
+  // '1'B      MS support of E/R_GSM
+  ////BIT2  spare1_2, // '00'B  removed by ethbaat
+  BIT1  vgcs,//'0'B no VGCS capability
+  //'1'B  VGCS capability and notifications wanted
+  BIT1  vbs, //'0'B no VBS capability,
+  //  '1'B VBS capability and notifications wanted
+  BIT1  sm_Capability, // '0'B SM capbility present  not
+  // '1'B SM capbility        present
+  BIT2 ss_ScreenIndicator,
+  // '00'B default value of phase1 (GSM+DCS) reserved or (PCS)
+  // '01'B capability of notation  ellipsis
+  // '10'B for future use
+  // '11'B for use  future
+  BIT1  ps_Capability, // 'x'B  ignored, received  if
+  BIT1  spare2_1   // '0'B
+};
+
+
+//5th octet ( Table 10.5.6a ):
+type record MobileStationClassmark2_oct5
+{
+  BIT1  a5_2,     // '0'B encryption algorithm A5/2 available not(0)
+  // '1'B encryption algorithm A5/available  2  (1)
+  BIT1  a5_3,     // '0'B encryption algorithm A5/3 available not(0)
+  // '1'B encryption algorithm A5/available  3  (1)
+  //removed by ethbaat: BIT5  spare3_5, //   '00000'B
+  BIT1  cmsp,
+  BIT1  solsa,
+  BIT1  ucs2,
+  BIT1  lcsva_cap,
+  BIT1  spare5_7,
+  BIT1  cm3       // '0'B  no additional capability info
+  // '1'B The MS supports options that are indicated in classmark 3 IE
+  //      (additional info  capability)
+};
+
+type record MobileStationClassmark2_LV
+{
+  LIN1  lengthIndicator, // '01'O..'03'O
+  BIT3  rf_PowerCapability, //        '000'B class1 (for GSM+DCS+PCS)
+  //        '001'B class2 (for GSM+DCS+PCS)
+  //        '010'B class3 (for GSM+DCS+PCS)
+  //        '011'class4  B  (only for GSM)
+  //        '100'class5  B  (only for GSM)
+  BIT1  a5_1, // '0'B encryption algorithm A5/1 available (0)
+  // '1'B encryption algorithm A5/1 not available  1  (1)
+  BIT1  esind,
+  // '0'B controlled early classmark sending option implemented not (0)
+  // '1'B controlled early classmark sending implemented option (1)
+  BIT2  revisionLevel, //   '00'B reserved for phase1 (GSM+DCS)
+  //   '00'B reserved for GSM phase 1 (PCS)
+  //   '01'B used by phase2 MSs  (GSM+DCS)
+  //   '01'B used by PCS1900 MSs  phase1  (PCS)
+  //   '10'B used by  MSs  R99  supporting
+  //   '11'B reserved for future use
+  BIT1  spare1_1, // '0'B
+  MobileStationClassmark2_oct4  mobileStationClassmark2_oct4    optional,
+  MobileStationClassmark2_oct5  mobileStationClassmark2_oct5    optional
+} with { variant (lengthIndicator) "LENGTHTO (rf_PowerCapability, a5_1, esind,
+  revisionLevel, spare1_1,
+  mobileStationClassmark2_oct4,
+  mobileStationClassmark2_oct5)"};
+
+type record MobileStationClassmark2_TLV
+{
+  OCT1                        elementIdentifier,
+  MobileStationClassmark2_LV  mobileStationClassmark2LV
+} with {
+  variant "PRESENCE (elementIdentifier = '11'O)";
+};
+
+
+
+//**********************************************************************
+// 24.008/ 10.5.1.6 5th octet ( Table 10.5.6a ):
+// almost the same as MobileStationClassmark2_LV, but
+// _TLV ie elementIdentifier is present
+// oct4 and oct5 is mandatory
+// The record name is inherited from (and used in) old test cases
+//**********************************************************************
+type record ClassmarkInformationType2_forUMTS
+{
+  OCT1  elementIdentifier,
+  //'33'O instead of '12'O (normal Classmark2)
+  LIN1  lengthIndicator,
+  //always '03'O (unlike normal ClassMark2, which can be 2 or 3)
+  BIT3  rf_PowerCapability,   //  '000'B class1 (for GSM+DCS+PCS)
+  //      '001'B class2 (for GSM+DCS+PCS)
+  //      '010'B class3 (for GSM+DCS+PCS)
+  //      '011'class4  B  (only for GSM)
+  //      '100'class5  B  (only for GSM)
+  BIT1  a5_1, //  '0'B encryption algorithm A5/1 available not (0)
+  //  '1'B encryption algorithm A5/available  1  (1)
+  BIT1  esind,
+  //'0'B controlled early classmark sending option implemented not (0)
+  //  '1'B controlled early classmark sending implemented  option  (1)
+  BIT2  revisionLevel, //  '00'B reserved for phase1 (GSM+DCS)
+  //  '00'reserved  B  (PCS)
+  //  '01'B used by phase2 MSs  (GSM+DCS)
+  //  '01'B used by PCS1900 MSs  phase1  (PCS)
+  BIT1  spare1_1, // '0'B
+  BIT1  fc, //         '0'B  no MS' support of E/R_GSM
+  //   '1'B       MS' support of E/R_GSM
+  BIT1  vgcs,//'0'B no VGCS capability
+  //'1'B  VGCS capability and notifications wanted
+  BIT1  vbs, //'0'B no VBS capability,
+  //  '1'B VBS capability and notifications wanted
+  BIT1  sm_Capability, //     '0'B SM capbility present  not
+  // '1'B SM capability     present
+  BIT2  ss_ScreenIndicator, //  '00'B default value of phase1 (GSM+DCS)
+  //  '00'reserved  B  (PCS)
+  //  '01'B capability of notation  ellipsis
+  //  '10'B for future use
+  //  '11'B for use  future
+  BIT1  ps_Capability, // '0'B or '1'B ignored, received  if
+  BIT1  spare2_1,  // '0'B,
+  BIT1  a5_2, // '0'B encryption algorithm A5/2 available  not  (0)
+  // '1'B encryption algorithm A5/available  2  (1)
+  BIT1  a5_3, // '0'B encryption algorithm A5/3 available  not  (0)
+  // '1'B encryption algorithm A5/available  3  (1)
+  //BIT5  spare3_5, // '00000'B
+  BIT1  cmsp,
+  BIT1  solsa,
+  BIT1  ucs2,
+  BIT1  lcsva_cap,
+  BIT1  spare5_7,
+  BIT1  cm3   // '0'B no additional capability info
+  // '1'B   additional info  capability
+} with { variant (lengthIndicator) "LENGTHTO (rf_PowerCapability, a5_1, esind,
+  revisionLevel, spare1_1, fc, vgcs, vbs,
+  sm_Capability, ss_ScreenIndicator,
+  ps_Capability, spare2_1, a5_2, a5_3,
+  //spare3_5,
+  cmsp,solsa,ucs2,lcsva_cap,spare5_7,
+  cm3)"};
+
+
+
+//24.008/ 10.5.1.7
+type record MobileStationClassmark3_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCTN  valuePart
+} with {
+  variant "PRESENCE (elementIdentifier = '20'O)"
+  variant (lengthIndicator) "LENGTHTO (valuePart)"
+};
+
+
+type record MobileStationClassmark3_LV
+{
+  LIN1  lengthIndicator,
+  OCTN  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+// used in: PDU_ML3_Setup_MSC_MS, PDU_ML3_CallProceeding,
+//          PDU_ML3_CMServiceRequest
+
+type record UTRACSGCellsReporting
+{
+  BIT1                  reportingofUTRANCSGCellsSupport
+} with {
+  variant "FIELDORDER(msb)"
+}
+
+type record VAMOSLevel
+{
+  BIT2                  vAMOSSupport
+} with {
+  variant "FIELDORDER(msb)"
+}
+
+//24.008/ 10.5.1.8 Spare half octet ---- not used
+
+//24.008/ 10.5.1.9 Descriptive group or broadcast call reference
+type record DescriptiveGroupOrBroadcastCallReference_V
+{
+  bitstring         binaryCodingOfGroupOrBroadcastCallReference length (27),
+  BIT1              sF,
+  BIT1              aF,
+  BIT3              callPriority,
+  BIT4              cipheringInformation,
+  BIT4              spare
+} with {  variant (binaryCodingOfGroupOrBroadcastCallReference,sF,aF,
+    callPriority,cipheringInformation,spare)  "FIELDORDER(msb)"};
+
+//10.5.1.10 Group Cipher Key Number
+type record groupCipherKeyNumber_TV
+{
+  BIT4 valuePart,
+  BIT4 elementIdentifier
+};
+
+type BIT4 groupCipherKeyNumber_V;
+
+
+//24.008/10.5.1.10a
+type record PdAndSapi
+{
+  BIT4 protocolDiscriminator,
+  BIT2 sapi,
+  BIT2 spare2
+};
+
+//10.5.1.11 Priority Level
+type record PriorityLevel_ML3
+{
+  BIT3  callPriority, // B'...._000 no applied  priority
+  // B'...._001 call priority level 4
+  // B'...._010 call priority level 3
+  // B'...._011 call priority level 2
+  // B'...._100 call priority level 1
+  // B'...._101 call priority level 0
+  // B'...._110 call priority level B
+  // B'...._111 call priority level A
+  BIT1  spare1_1,      // B'....0.._
+  // modified by ethbaat:OCT1  elementIdentifier for...
+  BIT4  elementIdentifier       // B'1000' type 1 IEI Priority level
+};
+//ending "_ML3" added, because ambiguities of (RANAP is also using this name)
+
+
+//10.5.1.12 Core Network System Information
+// not implemented yet
+
+//10.5.1.13 PLMN List
+type record PLMNListTLV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare1,
+  LIN1               lengthIndicator,
+  octetstring        digits  length(3..45) // collapsed into one octetstring
+  // instead of digits
+} with { variant "PRESENCE (elementIdentifier = '1001010'B)";
+  variant (lengthIndicator) "LENGTHTO (digits)"};
+  
+//10.5.1.15
+type record MS_NetworkFeatureSupportTV
+{
+  BIT1      extendedPeriodicTimers,
+  BIT3      spare,
+  BIT4      elementIdentifier
+}
+
+// GPRS Timer3 - 10.5.7.4a
+type record GPRSTimer3TLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  GPRSTimer3V        gprsTimer3V
+} with { 
+   variant (lengthIndicator) "LENGTHTO (gprsTimer3V)"
+}; 
+
+type record GPRSTimer3V
+{
+  BIT5               timerValue,
+  BIT3               unit
+};
+
+//****************************************************************************
+// Common elements in CC and SS:
+//****************************************************************************
+
+//24.008/10.5.4.11 Cause
+type record Diagnostics
+{
+  octetstring data   // to split into pieces????
+} with { variant "EXTENSION_BIT (yes)"};
+
+// This type is added for handling extension bit in octet 3 of Cause IE
+type record ML3_Cause_oct3
+{
+  BIT4  location,   //      '0000'user  B
+  //      '0001'B private network, local user
+  //      '0010'B public  network, user  local
+  //      '0011'B transit network
+  //      '0100'B public  network, user  remote
+  //      '0101'B private network, remote user
+  //      '0111'B network  international
+  //      '1010'B Network beyond interworking pt.
+  BIT1  spare1_1, //     '0'B
+  BIT2  codingStandard, // '00'B coding according Q.931
+  // '01'B reserved for standards  other
+  // '10'B National standard
+  // '11'B standard  other  (e.g. one defined for GSM PLMNs)
+  BIT1  ext1, // '0'B or '1'B
+  //octet3a:
+  BIT7  recommendation  optional,
+  BIT1  ext2            optional // B'1......
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record ML3_Cause_oct4
+{
+  BIT7  causeValue, // see 12/FS
+  BIT1  ext3 // B'1......
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record ML3_Cause_LV
+{
+  LIN1  lengthIndicator, // 2..30
+  ML3_Cause_oct3 oct3,
+  ML3_Cause_oct4 oct4,
+  Diagnostics  diagnostics  optional  // size: 1..27
+} with { variant (lengthIndicator) "LENGTHTO (oct3, oct4, diagnostics) "};
+
+//24.008/10.5.4.11
+type record ML3_Cause_TLV
+{
+  OCT1   elementIdentifier,
+  LIN1  lengthIndicator, // 2..30
+  ML3_Cause_oct3 oct3,
+  ML3_Cause_oct4 oct4,
+  Diagnostics  diagnostics  optional  // size: 1..27
+} with { variant (lengthIndicator) "LENGTHTO (oct3, oct4, diagnostics) "};
+
+//10.5.4.15 Facility IE (see also 24.080/3.6)
+type record Facility_TLV
+{
+  OCT1  elementIdentifier, // H'1C
+  LIN1  lengthIndicator, // 0..?
+  OCTN  facilityInformation  optional //see 24.080/3.6
+} with { variant (lengthIndicator) "LENGTHTO (facilityInformation)"};
+
+type record Facility_LV
+{
+  LIN1  lengthIndicator, // 0..?
+  OCTN  facilityInformation  optional  //see 24.080/3.6
+} with { variant (lengthIndicator) "LENGTHTO (facilityInformation)"};
+
+//24.008/10.5.4.24 SS Version Indicator
+// used by SS and CC
+type record SS_VersionIndicator
+{
+  OCT1  elementIdentifier, // H'7F
+  LIN1  lengthIndicator, // 0..?
+  OCTN  ss_VersionIndicatorContents  optional //see 24.080 !!!
+} with { variant (lengthIndicator) "LENGTHTO (ss_VersionIndicatorContents)"};
+
+//10.5.4.32 Supported Codec List
+type record codec
+{
+  OCT1  systemIdentification1,
+  OCT1  lengthOfBitmap1,
+  OCT1  codecBitmap1_bits1to8,
+  OCT1  codecBitmap1_bits9to16
+}; 
+
+type record of codec CodecList_ML3; 
+
+type record SupportedCodecList
+{
+  OCT1            elementIdentifier,
+  LIN1            lengthIndicator, //  
+  CodecList_ML3   codecList 
+} with {
+  variant "PRESENCE (elementIdentifier = '40'O)";
+  variant (lengthIndicator) "LENGTHTO( codecList )"
+};
+
+// 10.5.7.8
+type record DevicePropertiesTV
+{  
+  BIT1               lowPriority,
+  BIT3               spare,
+  BIT4               elementIdentifier
+}
+
+//****************************************************************************
+// Common elements in GMM and MM:
+//****************************************************************************
+// 10.5.5.8a - P-TMSI Signature 2
+type record P_TMSISignature2TLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  OCT3               valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '19'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+// 10.5.5.29 - P-TMSI Type
+type record P_TMSI_TypeTV
+{
+  BIT1     pTMSI_TypeValue,
+  BIT3     spare,
+  BIT4     elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1110'B)" }; 
+
+//10.5.5.15a - Routing Area Identification
+type record RoutingAreaIdentification2TLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  OCT6               routingAreaIdentification2
+} with {
+  variant "PRESENCE (elementIdentifier = '1B'O)";
+  variant (lengthIndicator) "LENGTHTO (routingAreaIdentification2)"
+};
+
+
+//****************************************************************************
+// Common elements in RRM and MM:
+//****************************************************************************
+
+//10.5.3.14 Additional Update Parameter
+type record AdditionalUpdateParameterTV
+{
+  BIT1               cSMT,
+  BIT1               cSMO,
+  BIT1               spare2,
+  BIT1               spare3,
+  BIT4               elementIdentifier
+} with {
+  variant "PRESENCE (elementIdentifier = '1100'B)"
+}
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_GMM_SM_Types.ttcn b/src/MobileL3_GMM_SM_Types.ttcn
new file mode 100644
index 0000000..b694538
--- /dev/null
+++ b/src/MobileL3_GMM_SM_Types.ttcn
@@ -0,0 +1,2571 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_GMM_SM_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+module MobileL3_GMM_SM_Types
+{
+
+// This module contains the GPRS Mobility Management Messages and
+// GPRS Session Management Messages of Mobile Radio Interface Layer 3 protocol
+// (DTAP) version 24.008 v13.4.0 with attributes for RAW encoding/decoding.
+//
+// Protocol discriminators and other general parts are defined in 24.007 v6.5.0
+// Some deviations added in order to make the module compatible with
+// V97 version of L3. These changes are indicated by 'V97' in comments
+
+import from General_Types all;
+import from MobileL3_CommonIE_Types all;
+import from MobileL3_MM_Types all;
+
+// =============================================================
+// GPRS Mobilty management information elements (chapter 10.5.5)
+// =============================================================
+
+// Additional Update Type - 10.5.5.0, TS 24.301 v13.4.0/9.9.3.0B
+type record AdditionalUpdateTypeTV
+{
+  AdditionalUpdateTypeV additionalUpdateType,
+  BIT4                  elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '0111'B)" };
+
+type record AdditionalUpdateTypeV
+{
+  BIT1        aUTV,
+  BIT3        spare
+};
+
+// Attach Result - 10.5.5.1
+type record AttachResultV
+{
+  BIT3               resultOfAttach,
+  BIT1               fop_l3
+};
+
+
+// Attach Type - 10.5.5.2
+type record  AttachTypeV
+{
+  BIT3               attachType,
+  BIT1               for_l3
+};
+
+
+// Ciphering Algorithm - 10.5.5.3
+type record   CipheringAlgorithmTV
+{
+  CipheringAlgorithmV          cipheringAlgorithm,
+  BIT4                         cipheringAlgorithmIEI
+};
+
+
+type record   CipheringAlgorithmV
+{
+  BIT3               valueField,
+  BIT1               spare
+};
+
+
+// TMSI status - 10.5.5.4
+type record TMSIStatusTV
+{
+  TMSIStatusV        tmsiStatusV,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1001'B)" };
+
+
+type record TMSIStatusV
+{
+  BIT1               tmsiFlag,
+  BIT3               spare // '000'B
+};
+
+
+// Detach Type - 10.5.5.5
+type record DetachTypeTV
+{
+  DetachTypeV        detachTypeV,
+  BIT4               detachTypeIEI
+};
+
+
+type record DetachTypeV
+{
+  BIT3               detachType,
+  BIT1               powerOffFlag
+};
+
+
+// DRX Parameter - 10.5.5.6
+type record DRXParameterTV
+{
+  OCT1               elementIdentifier,
+  DRXParameterV      drxParameter
+} with { variant "PRESENCE (elementIdentifier = '27'O)"; };
+
+
+type record DRXParameterV
+{
+  OCT1               splitPGCycleCode,
+  BIT3               nonDRXTimer,
+  BIT1               splitOnCCCH,
+  BIT4               cnSpecificDRXCycleLength
+};
+
+
+//Force To Standby - 10.5.5.7
+type record ForceToStandbyTV
+{
+  ForceToStandbyV    valueField,
+  BIT4               forceToStandbyIEI
+};
+
+
+type record ForceToStandbyV{
+  BIT3               forceToStandbyValue,
+  BIT1               spare   // '0'B
+};
+
+
+// P-TMSI Signature - 10.5.5.8
+type record P_TMSISignatureTV
+{
+  OCT1               elementIdentifier,
+  OCT3               valueField
+} with { variant "PRESENCE (elementIdentifier = '19'O)"; }
+
+
+//P-TMSI Signature 2 - 10.5.5.8a
+//moved into MobileL3_CommonIE_Types
+
+
+// Identity Type 2 - 10.5.5.9
+type record IdentityType2TV
+{
+  IdentityType2V     valueField,
+  BIT4               identityType2IEI
+};
+
+
+type record IdentityType2V
+{
+  BIT3                valueField,
+  BIT1                spare
+};
+
+
+// IMEISV request - 10.5.5.10
+type record IMEISVRequestTV
+{
+  IMEISVRequestV     imeisvRequest,
+  BIT4               imeisvRequestIEI
+};
+
+
+type record IMEISVRequestV
+{
+  BIT3               valueField,
+  BIT1               spare  //'0'B
+};
+
+
+// Receive N-PDU Numbers list - 10.5.5.11
+type record ReceiveNPDUNumbersListTLV
+{
+  OCT1                         elementIdentifier,
+  LIN1                         lengthIndicator,
+  ReceiveNPDUNumbersListV      numberList
+} with {
+  variant "PRESENCE (elementIdentifier = '26'O)";
+  variant (lengthIndicator) "LENGTHTO (numberList)";
+  variant (numberList)      "PADDING(yes)"// Padding is needed when odd
+  // number of ReceiveNPDUNumber is used
+};
+
+type record length(1..11) of ReceiveNPDUNumber ReceiveNPDUNumbersListV;
+
+type record ReceiveNPDUNumber
+{
+  BIT4               sapi,
+  BIT8               numberValue
+} with { variant "FIELDORDER(msb)" };
+
+
+// MS network capability - 10.5.5.12
+type record  MSNetworkCapabilityTLV
+{
+  OCT1                         elementIdentifier,
+  MSNetworkCapabilityLV        mSNetworkCapabilityLV
+} with { variant "PRESENCE (elementIdentifier = '31'O)"; };
+
+
+type record MSNetworkCapabilityLV
+{
+  LIN1                         lengthIndicator,
+  MSNetworkCapabilityV         msNetworkCapabilityV
+} with { variant (lengthIndicator) "LENGTHTO (msNetworkCapabilityV)";
+  variant (msNetworkCapabilityV)    "PADDING(yes)"
+};
+
+
+type record MSNetworkCapabilityV    //length 3-10 octets
+{
+  BIT1               gea1bit,
+  BIT1               smCapabilitiesviaDedicatedChannels,
+  BIT1               smCapabilitiesviaGPRSChannels,
+  BIT1               ucs2Support,
+  BIT2               ssScreeningIndicator,
+  BIT1               solSACapability            optional, //spare in V97
+  BIT1               revisionLevelIndicatior    optional, //spare in V97
+  BIT1               pFCFeatureMode             optional, //spare in V97(opt)
+  BIT6               extendedGEAbits            optional, //spare in V97(opt)
+  BIT1               lcsVAcapability            optional, //spare in V97(opt)
+  BIT1               pSInterRATHOtoUTRANIuModeCapability optional,
+  BIT1               pSInterRATHOtoEUTRANS1ModeCapability optional,
+  BIT1               eMMCombinedProceduresCapability optional,
+  BIT1               iSRSupport                 optional,
+  BIT1               sRVCCtoGERANUTRANCapability optional,
+  BIT1               ePCCapability              optional,
+  BIT1               nFCapability               optional,
+  BIT1               gERANNertworkSharingCapability optional,
+  octetstring        spare_octets length (0..3) optional
+} with { variant "FIELDORDER(msb)" };
+
+
+//MS Radio Access capability - 10.5.5.12a
+
+// Note: specification allows application of spare bits (even the forming of
+// spare octets), The only limitation is that the MS Radio Access capability IE
+// has maximum length of 51 octets
+type record MSRadioAccessCapabilityLV
+{
+  LIN1                         lengthIndicator,
+  MSRadioAccessCapabilityV     msRadioAccessCapabilityV
+  // Note that spareBits is automatically handled/calculated as padding
+  // so that MSRadioAccessCapabilityLV will be octet aligned when encoded
+  // even if the padding (spareBits) is not visible for the tester.
+  // lengthIndicator value = MSRadioAccessCapabilityV + (virtual) padding.
+} with {
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "LENGTHTO (msRadioAccessCapabilityV )";
+  variant "PADDING(yes)"				
+};
+
+type record of MSRACapabilityValuesRecord MSRadioAccessCapabilityV
+with { variant "EXTENSION_BIT(reverse)";variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValuesRecord
+{
+  MSRACapabilityValues         mSRACapabilityValues,
+  BIT1                         presenceBitMSRACap
+} with { variant "FIELDORDER(msb)" };
+
+
+type union MSRACapabilityValues
+{
+  MSRACapabilityValuesExclude1111        mSRACapabilityValuesExclude1111,
+  MSRACapabilityValues1111               mSRACapabilityValues1111
+} with { variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValuesExclude1111
+{
+  BIT4                         accessTechnType,
+  AccessCapabilitiesStruct     accessCapabilities
+} with {
+  variant "PRESENCE (
+  accessTechnType = '0000'B,     // GSM P
+  accessTechnType = '0001'B,     // GSM E
+  accessTechnType = '0010'B,     // GSM R
+  accessTechnType = '0011'B,     // GSM 1800
+  accessTechnType = '0100'B,     // GSM190
+  accessTechnType = '0101'B,     // GSM 450
+  accessTechnType = '0110'B,     // GSM480
+  accessTechnType = '0111'B,     // GSM 480
+  accessTechnType = '1000'B,     // GSM 700
+  accessTechnType = '1001'B,     // GSM T 310
+  accessTechnType = '1010'B,     // GSM T 410
+  accessTechnType = '1011'B      // GSM T 900
+  )"
+  variant (accessTechnType) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)"
+};
+
+
+// Access Capabilities Struct
+type record AccessCapabilitiesStruct
+{
+  integer                      lengthIndicator,
+  AccessCapabilities           accessCapabilities,
+  // spare_bits "expands to the indicated length",
+  // i.e. 24.008 spec puts no restriction on number
+  // of spare_bits.  The only restriction is that the whole
+  // MS Radio Access Capability  IE is less than 52 octets
+  bitstring                    spare_bits              optional
+} with {
+  variant (lengthIndicator) "FIELDLENGTH(7)";
+  variant (lengthIndicator) "LENGTHTO(accessCapabilities,spare_bits)";
+  variant (lengthIndicator) "UNIT(bits)";
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "BYTEORDER(last)";
+}
+
+
+//Access Capabilities
+type record AccessCapabilities
+{
+  BIT3                         rfPowerCapability,
+  BIT1                         presenceBitA5,
+  A5BITS                       a5bits               optional,
+  BIT1                         esind,
+  BIT1                         psbit,
+  BIT1                         vgcs,
+  BIT1                         vbs,
+  BIT1                         presenceBitMultislot,
+  MultislotCap                 multislotcap         optional,
+  AccessCapAdditionsAfterRel97 accessCapAdditionsAfterRel97 optional //opt because of V97
+  //Note: AccessCapAdditionsAfterRel97 can include:
+  // Rel99 or
+  // Rel99 + Rel4 or
+  // Rel99 + Rel4 + Rel5 or
+  // Rel99 + Rel4 + Rel5  + Rel6
+} with {
+  variant "FIELDORDER(msb)";
+  variant(rfPowerCapability) "BYTEORDER(last)";
+  variant (a5bits)               "PRESENCE(presenceBitA5 = '1'B)";
+  variant (multislotcap)         "PRESENCE(presenceBitMultislot = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel97
+{
+  AccessCapAdditionsRel99                accessCapAdditionsRel99,
+  AccessCapAdditionsAfterRel99           accessCapAdditionsAfterRel99 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel99
+{
+  BIT1               presenceBitPskpow,
+  BIT2               pskpowercap                     optional,
+  BIT1               compactIntMeasurCap,
+  BIT1               revisionLevelInd,
+  BIT1               umtsfddRadAccTechCap,
+  BIT1               umtstddRadAccTechCap,
+  BIT1               cdma2kRadAccTechCap
+} with {
+  variant "FIELDORDER(msb)";
+  variant(pskpowercap) "BYTEORDER(last)";
+  variant (pskpowercap) "PRESENCE(presenceBitPskpow = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel99
+{
+  AccessCapAdditionsRel4       accessCapAdditionsRel4,
+  AccessCapAdditionsAfterRel4  accessCapAdditionsAfterRel4 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel4
+{
+  BIT1               umts128RadAccTechCap,
+  BIT1               geranFeaturePackage,
+  BIT1               presenceBitExtendedDTM,
+  ExtendedDTM        extendedDTM                       optional,
+  BIT1               modulationBasedMultislotClass
+} with {
+  variant "FIELDORDER(msb)";
+  variant (extendedDTM)          "PRESENCE(presenceBitExtendedDTM = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel4
+{
+  AccessCapAdditionsRel5       accessCapAdditionsRel5, 
+  AccessCapAdditionsAfterRel5  accessCapAdditionsAfterRel5 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel5
+{
+  BIT1               presenceBitHighMultislotCapability,
+  BIT2               highMultislotCapability            optional,
+  BIT1               presenceBitGeranIuModeCapability,  // this field is present to make the module compatible with earlier versions; it always must be set to 0, 
+  BIT2               gMSKMultislotPowerProfile,
+  BIT2               eightPSKMultislotPowerProfile
+} with {
+  variant "FIELDORDER(msb)";
+  variant(highMultislotCapability) "BYTEORDER(last)";
+  variant(gMSKMultislotPowerProfile) "BYTEORDER(last)";
+  variant(eightPSKMultislotPowerProfile) "BYTEORDER(last)";
+  variant (highMultislotCapability)
+  "PRESENCE(presenceBitHighMultislotCapability = '1'B)"
+}
+
+
+type record AccessCapAdditionsAfterRel5
+{
+  AccessCapAdditionsRel6        accessCapAdditionsRel6,
+  AccessCapAdditionsAfterRel6   accessCapAdditionsAfterRel6 optional  
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel6
+{
+  AccessCapAdditionsRel7        accessCapAdditionsRel7,
+  //AccessCapAdditionsRel8        accessCapAdditionsAfterRel7 optional 
+  AccessCapAdditionsAfterRel7   accessCapAdditionsAfterRel7 optional 
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel6
+{
+  BIT1               multipleTBFCapability,
+  BIT2               downlinkAdvancedReceiverPerformance,
+  BIT1               extendedRLCMACCtrlMsgSegmentationCap,
+  BIT1               dTMEnhancementsCapability,
+  BIT1               presenceBitDTMGPRSHighMultiSlotClass,
+  DTMGPRSHighMultiSlotClass  dTMGPRSHighMultiSlotClass optional,
+  BIT1               pSHandoverCapability
+} with {
+  variant "FIELDORDER(msb)";
+  variant(downlinkAdvancedReceiverPerformance) "BYTEORDER(last)";
+  variant (dTMGPRSHighMultiSlotClass)
+  "PRESENCE(presenceBitDTMGPRSHighMultiSlotClass = '1'B)"
+}
+
+
+type record DTMGPRSHighMultiSlotClass
+{
+  BIT3               dTMGPRSHighMultiSlotClassValue,
+  BIT1               presenceBitDTMEGPRSHighMultiSlotClass,
+  BIT3               dTMEGPRSHighMultiSlotClassValue optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant(dTMGPRSHighMultiSlotClassValue) "BYTEORDER(last)";
+  variant(dTMEGPRSHighMultiSlotClassValue) "BYTEORDER(last)";
+  variant (dTMEGPRSHighMultiSlotClassValue)
+  "PRESENCE(presenceBitDTMEGPRSHighMultiSlotClass = '1'B)"
+  
+}
+
+
+type record AccessCapAdditionsRel7
+{
+  BIT1                  dTMHandoverCapability,
+  BIT1                  presenceBitDownlinkDualCarrier, 
+  DownlinkDualCarrier   downlinkDualCarrier optional,
+  BIT1                  flexibleTimeslotAssignment,
+  BIT1                  gANPSHandoverCapability,
+  BIT1                  rLCNonPersistentMode,
+  BIT1                  reducedLatencyCapability,
+  BIT2                  uplinkEGPRS2,
+  BIT2                  downlinkEGPRS2
+} with {
+  variant "FIELDORDER(msb)";
+  variant(uplinkEGPRS2) "BYTEORDER(last)";
+  variant(downlinkEGPRS2) "BYTEORDER(last)";
+  variant (downlinkDualCarrier) "PRESENCE(presenceBitDownlinkDualCarrier = '1'B)"
+}
+
+type record AccessCapAdditionsAfterRel7
+{
+  AccessCapAdditionsRel8       accessCapAdditionsRel8,
+  AccessCapAdditionsAfterRel8  accessCapAdditionsAfterRel8
+}
+
+
+type record AccessCapAdditionsRel8
+{
+  BIT1                  eUTRAFDDsupport ,
+  BIT1                  eUTRATDDsupport, 
+  BIT2                  gERANToEUTRASupportInGERANPacketTransferMode,
+  BIT1                  priorityBasedReselectionSupport 
+} with {
+  variant(gERANToEUTRASupportInGERANPacketTransferMode) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel8
+{
+  AccessCapAdditionsRel9       accessCapAdditionsRel9,
+  AccessCapAdditionsAfterRel9  accessCapAdditionsAfterRel9
+}
+
+type record AccessCapAdditionsRel9
+{
+  EnhancedFlexTimeslotAssignment   enhancedFlexTimeslotAssignment,
+  BIT1                             indicationofUpperLayerPDUStartCapabilityforRLCUM,
+  BIT1                             eMSTCapability,
+  BIT1                             mTTICapability,
+  BIT1                             uTRACSGCellsReporting,
+  BIT1                             eUTRACSGCellsReporting
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel9
+{
+  AccessCapAdditionsRel10       accessCapAdditionsRel10,
+  AccessCapAdditionsAfterRel10  accessCapAdditionsAfterRel10
+}
+
+type record AccessCapAdditionsRel10
+{
+  BIT1           dTRCapability,
+  BIT1           eMSRCapability,
+  BIT1           fastDownlinkFrequencySwitchingCapability,
+  BIT2           tIGHTER_Capability  
+} with {
+  variant(tIGHTER_Capability) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel10
+{
+  AccessCapAdditionsRel11       accessCapAdditionsRel11,
+  AccessCapAdditionsAfterRel11  accessCapAdditionsAfterRel11
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel11
+{
+  BIT1           fANRCapability,
+  BIT1           iPACapability,
+  BIT1           gERANNetworkSharingSupport,
+  BIT1           eUTRAWidebandRSRQMeasurementsSupport  
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel11
+{
+  AccessCapAdditionsRel12       accessCapAdditionsRel12,
+  AccessCapAdditionsAfterRel12  accessCapAdditionsAfterRel12
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel12
+{
+  BIT1           uTRAMultipleFrequencyBandIndicatorsSupport,
+  BIT1           eUTRAMultipleFrequencyBandIndicatorsSupport,
+  BIT1           presenceBitDLMCCapability, 
+  DLMCCapability dLMCCapability optional,
+  BIT1           extendedTSCSetCapabilitySupport 
+} with {
+  variant "FIELDORDER(msb)";
+  variant (dLMCCapability) "PRESENCE(presenceBitDLMCCapability = '1'B)"
+}
+
+type record DLMCCapability
+{
+  BIT1               presenceDLMC,
+  DLMCBandReception  dLMCBandReception    optional,
+  BIT2               dLMCMaxBandwidth,
+  BIT6               dLMCMaxNumOfDownlinkTimeslots,
+  BIT3               dLMCMaxNumOfDownlinkCarriers
+} with {
+  variant "FIELDORDER(msb)";
+  variant(dLMCMaxBandwidth) "BYTEORDER(last)";
+  variant(dLMCMaxNumOfDownlinkTimeslots) "BYTEORDER(last)";
+  variant(dLMCMaxNumOfDownlinkCarriers) "BYTEORDER(last)";
+  variant (dLMCBandReception) "PRESENCE(presenceDLMC = '1'B)"
+}
+
+type record DLMCBandReception
+{
+  BIT2  dLMCNonContiguousIntraBandReception,
+  BIT1  dLMCInterBandReception
+} with {
+  variant(dLMCNonContiguousIntraBandReception) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel12
+{
+  AccessCapLateAdditionsRel11   accessCapLateAdditionsRel11,
+  octetstring                   accessCapLateAdditionsAfterRel11
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapLateAdditionsRel11
+{
+  BIT1     extendedEARFCNValueRange
+}
+
+type record EnhancedFlexTimeslotAssignment
+{
+  BIT1                  presenceBitalternativeEFTAMultislotClass,
+  BIT4                  alternativeEFTAMultislotClass,
+  BIT3                  eFTAMultislotCapabilityReductionforDownlinkDualCarrier
+} with {
+  variant(alternativeEFTAMultislotClass) "BYTEORDER(last)";
+  variant(eFTAMultislotCapabilityReductionforDownlinkDualCarrier) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)"
+};
+
+
+type record DownlinkDualCarrier
+{
+  BIT3  multislotCapReductionforDownLinkDualCarrier,
+  BIT1  downlinkDualCarrierforDTMCapability
+} with { variant "FIELDORDER(msb)" };
+
+
+type record  ExtendedDTM
+{
+  BIT2               ExtendedDTM_GPRSMultislot,
+  BIT2               ExtendedDTM_EGPRSMultislot
+} with { variant "FIELDORDER(msb)" };
+
+
+//MultislotCap
+type record  MultislotCap
+{
+  BIT1               presenceBitHscsd,
+  BIT5               hscsdmultislotclass      optional,
+  BIT1               presenceBitGprs,
+  MultislotCap_GPRS  gprsmultislot           optional,
+  BIT1               presenceBitSms,
+  MultislotCap_SMS   multislotCap_SMS        optional,
+  MultislotCapAdditionsAfterRel97 multislotCapAdditionsAfterRel97 optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant (hscsdmultislotclass)     "PRESENCE(presenceBitHscsd = '1'B)";
+  variant(hscsdmultislotclass) "BYTEORDER(last)";
+  variant (gprsmultislot)          "PRESENCE(presenceBitGprs = '1'B)";
+  variant (multislotCap_SMS)       "PRESENCE(presenceBitSms = '1'B)";
+  
+}
+
+
+type record MultislotCapAdditionsAfterRel97
+{
+  BIT1                         presenceBitEcsdmulti,
+  BIT5                         ecsdmultislotclass      optional,
+  BIT1                         presenceBitEgprsmulti,
+  MultislotCap_EGPRS           multislotCap_EGPRS      optional,
+  BIT1                         presenceBitDtmGprsmulti,
+  MultislotCap_dtmgprsmultislotsubclass   multislotCapdtmgprsmultislotsubclass optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant (ecsdmultislotclass)     "PRESENCE(presenceBitEcsdmulti = '1'B)";
+  variant (multislotCap_EGPRS)     "PRESENCE(presenceBitEgprsmulti = '1'B)" ;
+  variant(ecsdmultislotclass) "BYTEORDER(last)";
+  variant (multislotCapdtmgprsmultislotsubclass)
+  "PRESENCE(presenceBitDtmGprsmulti = '1'B)"
+}
+
+
+type record MultislotCap_GPRS
+{
+  BIT5               gprsmultislotclass,
+  BIT1               gprsextendeddynalloccap
+} with {
+  variant "FIELDORDER(msb)" 
+  variant(gprsmultislotclass) "BYTEORDER(last)"
+};
+
+
+type record MultislotCap_SMS
+{
+  BIT4               smsValue,
+  BIT4               smValue
+} with { 
+  variant "FIELDORDER(msb)" 
+  variant(smsValue) "BYTEORDER(last)";
+  variant(smValue) "BYTEORDER(last)"
+};
+
+
+type record  MultislotCap_EGPRS
+{
+  BIT5               egprsmultislotclass,
+  BIT1               egprsextendeddynalloccap
+}  with {
+  variant "FIELDORDER(msb)" 
+  variant(egprsmultislotclass) "BYTEORDER(last)"
+};
+
+type record MultislotCap_dtmgprsmultislotsubclass
+{
+  BIT2               dtmgprsmultislotsubclass,
+  BIT1               singleSlotDTM,
+  BIT1               presenceBitDTM_EGPRSMultiSlot,
+  BIT2               dTM_EGPRSMultiSlot       optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant(dtmgprsmultislotsubclass) "BYTEORDER(last)";
+  variant(dTM_EGPRSMultiSlot) "BYTEORDER(last)";
+  variant (dTM_EGPRSMultiSlot) "PRESENCE(presenceBitDTM_EGPRSMultiSlot = '1'B)"
+};
+
+
+//A5BITS
+type record  A5BITS
+{
+  BIT1       a51 ,
+  BIT1       a52 ,
+  BIT1       a53 ,
+  BIT1       a54 ,
+  BIT1       a55 ,
+  BIT1       a56 ,
+  BIT1       a57
+} with { variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValues1111
+{
+  BIT4               accessTechnType,    //1111
+  integer            lengthIndicator,
+  BIT1               presenceIndicator_AdditionalAccessTechnologiesRepetition,
+  AdditionalAccessTechnologiesRepetition // coded '1'B if list is not empty
+  additionalAccessTechnologiesRepetition           optional,
+  bitstring          spare_bits
+} with {
+  variant "PRESENCE (accessTechnType = '1111'B)";
+  variant (accessTechnType) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "FIELDLENGTH(7)";
+  variant (lengthIndicator) "UNIT(bits)";
+  variant (lengthIndicator) "BYTEORDER(last)";
+  variant (additionalAccessTechnologiesRepetition)
+  "PRESENCE(presenceIndicator_AdditionalAccessTechnologiesRepetition = '1'B)";
+  variant (lengthIndicator)
+  "LENGTHTO(presenceIndicator_AdditionalAccessTechnologiesRepetition,
+  additionalAccessTechnologiesRepetition,spare_bits)";
+};
+
+
+type record of AdditionalAccessTechnologiesRecord
+AdditionalAccessTechnologiesRepetition
+with { variant "EXTENSION_BIT(reverse)" };
+
+
+type record AdditionalAccessTechnologiesRecord
+{
+  AdditionalAccessTechnologies additionalAccessTechnologies,
+  BIT1                         extensionBit
+} with { variant "FIELDORDER(msb)" };
+
+
+type record  AdditionalAccessTechnologies
+{
+  BIT4               accessTechnType,
+  BIT3               gMSKPowerClass,
+  BIT2               psk8PowerClass
+} with { variant "FIELDORDER(msb)" 
+  variant (accessTechnType) "BYTEORDER(last)";
+  variant (gMSKPowerClass) "BYTEORDER(last)";
+  variant (psk8PowerClass) "BYTEORDER(last)";
+};
+
+
+// GMM Cause - 10.5.5.14
+type record GMM_CauseTV
+{
+  OCT1               elementIdentifier,
+  GMM_CauseV         causeValue
+} with { variant "PRESENCE (elementIdentifier = '25'O)"; };
+
+type record GMM_CauseV
+{
+  OCT1               causeValue
+};
+
+
+// Routing Area identification - 10.5.5.15
+type record RoutingAreaIdentificationV
+{
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               lac,
+  OCT1               rac
+};
+
+// Routing Area identification - 10.5.5.15a
+// moved into MobileL3_CommonIE_Types
+
+//Update Result - 10.5.5.17
+type record UpdateResultTV
+{
+  UpdateResultV      valueField,
+  BIT4               elementIdentifier
+};
+
+type record  UpdateResultV
+{
+  BIT3               valueField,
+  BIT1               fOP_l3
+};
+
+
+// Update Type - 10.5.5.18
+type record  UpdateTypeTV
+{
+  UpdateTypeV        valueField,
+  BIT4               elementIdentifier
+};
+
+type record  UpdateTypeV
+{
+  BIT3               valueField,
+  BIT1               for_l3
+};
+
+
+// ACReferenceNumber - 10.5.5.19
+type record   ACReferenceNumberTV
+{
+  ACReferenceNumberV acReferenceNumber,
+  BIT4               acReferenceNumberIEI
+};
+
+type record ACReferenceNumberV
+{
+  BIT4               valueField
+};
+
+
+// Service type - 10.5.5.20
+type record  ServiceTypeV
+{
+  BIT3               serviceType,
+  BIT1               spare  //'0'B
+};
+
+
+// Cell Notification - 10.5.5.21
+type record CellNotificationT
+{
+  OCT1               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '8C'O)"; };
+
+
+// PC_LCSCapability - 10.5.5.22
+type record PC_LCSCapability
+{
+  OCT1                         elementIdentifier,
+  PC_LCSCapabilityLV           pC_LCSCapabilityLV
+} with { variant "PRESENCE (elementIdentifier = '33'O)"; };
+
+
+type record PC_LCSCapabilityLV
+{
+  LIN1               lengthIndicator,       // 3 octets
+  PC_LCSCapabilityV  pC_LCSCapabilityV
+} with { variant (lengthIndicator) "LENGTHTO (pC_LCSCapabilityV)"};
+
+
+type record PC_LCSCapabilityV
+{
+  BIT1               gPS_C,
+  BIT1               gPS_B,
+  BIT1               gPS_A,
+  BIT1               oTD_B,
+  BIT1               oTD_A,
+  BIT1               aPC,
+  BIT2               spare  //'00'B
+};
+
+
+// NetworkFeatureSupportTV - 10.5.5.23
+type record NetworkFeatureSupportTV
+{
+  NetworkFeatureSupportV  networkFeatureSupportV,
+  BIT4                    elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1011'B)"; };
+
+
+type record NetworkFeatureSupportV
+{
+  BIT1               eMCBS,     // 24.008 v9.5.0
+  BIT1               iMSVoPS,
+  BIT1               mBMS,
+  BIT1               lCS_MOLR
+};
+
+// AdditionalNetworkFeatureSupportTLV - 10.5.5.23A
+type record AdditionalNetworkFeatureSupportTLV
+{
+  OCT1                               elementIdentifier,
+  LIN1                               lengthIndicator,
+  AdditionalNetworkFeatureSupportV   additionalNetworkFeatureSupportV
+} with {
+  variant "PRESENCE (elementIdentifier = '66'O)";
+  variant (lengthIndicator) "LENGTHTO (additionalNetworkFeatureSupportV)"
+};
+
+
+type record AdditionalNetworkFeatureSupportV
+{
+  BIT1      gPRS_SMS,
+  BIT7      spare
+};
+
+// 10.5.5.24 Inter RAT information container
+type record InterRATInformationContainerTLV
+{
+  OCT1                      elementIdentifier,
+  LIN1                      lengthIndicator,
+  octetstring               interRATInformationContainerV length(0..248)
+} with {
+  variant "PRESENCE (elementIdentifier = '27'O)";
+  variant (lengthIndicator) "LENGTHTO (interRATInformationContainerV)"
+};
+
+
+// 10.5.5.25 Requested MS information
+type record RequestedMSInformationTV
+{
+  BIT2                     spare,  //'00'B
+  BIT1                     i_RAT2,
+  BIT1                     i_RAT,
+  BIT4                     elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1010'B)"; };
+
+// 10.5.5.26 UE network capability TS 24.301 v13.4.0 / 9.9.3.34
+type record UENetworkCapabilityTLV
+{
+  OCT1                            elementIdentifier,
+  UENetworkCapabilityLV           uENetworkCapabilityLV
+}with {
+  variant "PRESENCE (elementIdentifier = '58'O)"
+} 
+
+type record UENetworkCapabilityLV
+{
+  LIN1                  lengthIndicator,    //2..13
+  UENetworkCapabilityV  uENetworkCapabilityV
+} with {
+  variant (lengthIndicator) "LENGTHTO (uENetworkCapabilityV)"
+}
+
+type record UENetworkCapabilityV
+{
+  BIT8     eEA,
+  BIT8     eIA,  
+  BIT8     uEA      optional,  
+  BIT7     uIA      optional,
+  BIT1     uCS2     optional,//4. octet
+  BIT1     nF       optional,
+  BIT1     sRVCC    optional,
+  BIT1     lCS      optional,
+  BIT1     lPP      optional,
+  BIT1     aCC_CSFB optional,
+  BIT1     h245_ASH optional,
+  BIT1     proSe    optional,
+  BIT1     proSe_dd optional,
+  BIT1     proSe_dc optional,
+  BIT7     spare    optional,//6. octet
+  octetstring     spare4 length (0..7) optional
+}
+
+// 10.5.5.27 E-UTRAN inter RAT information container
+type record EUTRANinterRATInformationContainerTLV
+{
+  OCT1                      elementIdentifier,
+  LIN1                      lengthIndicator,
+  octetstring               eUTRANinterRATInformationContainerV length(0..255)
+} with {
+  variant "PRESENCE (elementIdentifier = '2B'O)";
+  variant (lengthIndicator) "LENGTHTO (eUTRANinterRATInformationContainerV)"
+};
+
+// 10.5.5.28 Voice Domain Preference and UE's Usage Setting
+type record VoiceDomainPreferenceandUEsUsageSettingTLV
+{
+  OCT1                      elementIdentifier,
+  LIN1                      lengthIndicator,
+  VDPaUEsUS_V               informationElement
+} with {
+  variant "PRESENCE (elementIdentifier = '5D'O)"
+  variant (lengthIndicator) "LENGTHTO (informationElement)"
+};
+
+type record VDPaUEsUS_V
+{
+  BIT2                      voiceDomainPreferenceforEUTRAN,
+  BIT1                      uEsUsageSetting,
+  BIT1                      spare1,
+  BIT1                      spare2,
+  BIT1                      spare3,
+  BIT1                      spare4,
+  BIT1                      spare5
+};
+
+// P_TMSI Type 10.5.5.29
+//moved into MobileL3_CommonIE_Types
+
+// 10.5.5.30
+type record LocationAreaIdentification2_TLV
+{
+  OCT1                           elementIdentifier,
+  LIN1                           lengthIndicator, 
+  OCT5                           locationAreaIdentificationValue
+} with {
+  variant "PRESENCE (elementIdentifier = '14'O)";
+  variant (lengthIndicator) "LENGTHTO (locationAreaIdentificationValue)"
+};
+
+// 10.5.5.31
+type record NetworkResourceIdentifierContainerTLV
+{
+  OCT1                                 elementIdentifier,
+  NetworkResourceIdentifierContainerLV networkResourceIdentifierContainerLV
+} with {
+  variant "PRESENCE (elementIdentifier = '10'O)";
+};
+
+type record NetworkResourceIdentifierContainerLV
+{
+  LIN1                                lengthIndicator, 
+  NetworkResourceIdentifierContainerV networkResourceIdentifierContainerV
+} with {
+  variant (lengthIndicator) "LENGTHTO (networkResourceIdentifierContainerV)"
+};
+
+type record NetworkResourceIdentifierContainerV
+{
+  BIT10  nRIContainerValue, 
+  BIT6   spare
+} with {
+  variant (nRIContainerValue) "BITORDER (msb)";
+  variant (nRIContainerValue,spare) "FIELDORDER (msb)";
+};
+
+// 10.5.5.32
+type record ExtendedDRXParametersTLV
+{
+  OCT1                           elementIdentifier,
+  LIN1                           lengthIndicator, 
+  BIT4                           eDRXValue,
+  BIT4                           pagingTimeWindow
+} with {
+  variant "PRESENCE (elementIdentifier = '6E'O)";
+  variant (lengthIndicator) "LENGTHTO (eDRXValue,pagingTimeWindow)"
+};
+// ========================================================
+// Session management information elements (chapter 10.5.6)
+// ========================================================
+
+// Access Point Name - 10.5.6.1
+
+type record AccessPointNameTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,       // 3-102 octets  ,
+  AccessPointNameV   accessPointNameValue
+} with {
+  variant "PRESENCE (elementIdentifier = '28'O)";
+  variant (lengthIndicator) "LENGTHTO (accessPointNameValue)"
+};
+
+type record AccessPointNameLV
+{
+  LIN1               lengthIndicator,       // 3-102 octets  ,
+  AccessPointNameV   accessPointNameValue
+} with { variant (lengthIndicator) "LENGTHTO (accessPointNameValue)"};
+
+type octetstring AccessPointNameV;
+
+
+//NSAPI - 10.5.6.2
+type record NSAPITV
+{
+  OCT1               elementIdentifier,
+  NSAPIV             valueField
+};
+
+type record  NSAPIV
+{
+  BIT4               valueField,
+  BIT4               spare     //'0000'B
+};
+
+
+//Protocol Configuration Options - 10.5.6.3
+type record ProtocolConfigOptionsTLV
+{
+  OCT1                         elementIdentifier,
+  LIN1                         lengthIndicator,
+  ProtocolConfigOptionsV       protocolConfigOptionsV
+} with {
+  variant "PRESENCE (elementIdentifier = '27'O)";
+  variant (lengthIndicator) "LENGTHTO (protocolConfigOptionsV)"
+};
+
+type record ProtocolConfigOptionsV
+{
+  BIT3                         configProtocol,
+  BIT4                         spare , //'0000'B
+  BIT1                         extensionField,   //'1'B
+  ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional
+};
+
+type record of  ProtocolID_or_ContainerID   ProtocolIDs_and_ContainerIDs;
+
+type record ProtocolID_or_ContainerID
+{
+  OCT2               protocolID_or_ContainerID,
+  LIN1               lengthIndicator,
+  octetstring        protID_orContID_Contents
+} with { variant (lengthIndicator) "LENGTHTO (protID_orContID_Contents)"};
+
+
+// PDP Address - 10.5.6.4
+type record PDPAddressTLV
+{
+  OCT1               elementIdentifier,
+  PDPAddressLV       pDPAddressLV
+} with { variant "PRESENCE (elementIdentifier = '2B'O)"; };
+
+
+type record PDPAddressLV
+{
+  LIN1               lengthIndicator,
+  PDPAddressV        pdpAddressV
+} with { variant (lengthIndicator) "LENGTHTO (pdpAddressV)"};
+
+
+type record  PDPAddressV
+{
+  BIT4               pdpTypeOrg,
+  BIT4               spare,   //'0000'B
+  OCT1               pdpTypeNum,
+  octetstring        addressInfo   optional
+};
+
+
+// QoS - 10.5.6.5
+type record  QoSTLV
+{
+  OCT1               elementIdentifier,
+  QoSLV              qoSLV
+} with { variant "PRESENCE (elementIdentifier = '30'O)"; };
+
+
+type record  QoSLV
+{
+  LIN1               lengthIndicator,
+  QoSV               qoSV
+} with { variant (lengthIndicator) "LENGTHTO (qoSV)"};
+
+
+type record QoSV
+{
+  BIT3               reliabilityClass,
+  BIT3               delayClass,
+  BIT2               spare1,  // '00'B
+  BIT3               precedenceClass,
+  BIT1               spare2, //'0'B
+  BIT4               peakThroughput,
+  BIT5               meanThroughput,
+  BIT3               spare3, //'000'B
+  BIT3               deliverErroneusSDU            optional, //opt because of V97
+  BIT2               deliveryOrder                 optional, //opt because of V97
+  BIT3               trafficClass                  optional, //opt because of V97
+  OCT1               maxSDUSize                    optional, //opt because of V97
+  OCT1               maxBitrateUplink              optional, //opt because of V97
+  OCT1               maxBitrateDownlink            optional, //opt because of V97
+  BIT4               sduErrorRatio                 optional, //opt because of V97
+  BIT4               residualBER                   optional, //opt because of V97
+  BIT2               trafficHandlingPriority       optional, //opt because of V97
+  BIT6               transferDelay                 optional, //opt because of V97
+  OCT1               guaranteedBitRateUplink       optional, //opt because of V97
+  OCT1               guaranteedBitRateDownlink     optional, //opt because of V97
+  BIT4               sourceStatisticsDescriptor    optional, //opt because of V97
+  BIT1               signallingIndication          optional, //opt because of V97
+  BIT3               spare4                        optional, //opt because of V97
+  // '000'B
+  OCT1               maxBitrateDownlinkExt         optional, //opt because of V97
+  OCT1               guaranteedBitRateDownlinkExt  optional, //opt because of V97
+  OCT1               maxBitrateUplinkExt           optional, //opt because of V97
+  OCT1               guaranteedBitRateUplinkExt    optional, //opt because of V97 
+  OCT1               maxBitrateDownlinkExt2        optional, //opt because of V97
+  OCT1               guaranteedBitRateDownlinkExt2 optional, //opt because of V97
+  OCT1               maxBitrateUplinkExt2          optional, //opt because of V97
+  OCT1               guaranteedBitRateUplinkExt2   optional  //opt because of V97 
+};
+
+// ReAttemptIndicator - 10.5.6.5a
+type record ReAttemptIndicatorTLV
+{
+  OCT1                 elementIdentifier,
+  ReAttemptIndicatorLV reAttemptIndicatorLV
+} with { variant "PRESENCE (elementIdentifier = '6B'O)"; };
+
+type record ReAttemptIndicatorLV
+{
+  LIN1                lengthIndicator,
+  ReAttemptIndicatorV reAttemptIndicatorV
+} with { variant (lengthIndicator) "LENGTHTO (reAttemptIndicatorV)"};
+
+type record ReAttemptIndicatorV
+{
+  BIT1  rATCValue,
+  BIT1  ePLMNCValue,
+  BIT6  spare
+}
+
+// SM Cause - 10.5.6.6
+type OCT1 SMCauseV;
+
+// SM Cause2 - 10.5.6.6a
+type record SMCause2TLV
+{
+  OCT1               elementIdentifier,
+  SMCause2LV         sMCause2LV
+} with { variant "PRESENCE (elementIdentifier = '39'O)"; };
+
+type record SMCause2LV 
+{
+  LIN1               lengthIndicator,
+  OCT1               sMCause2V
+} with { variant (lengthIndicator) "LENGTHTO (sMCause2V)"};
+
+// Linked TI - 10.5.6.7
+type record LinkedTITLV
+{
+  OCT1               elementIdentifier,
+  LinkedTILV         linkedTILV
+}
+
+type record LinkedTILV
+{
+  LIN1               lengthIndicator,
+  LinkedTIV          valueField
+} with { variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+
+type record LinkedTIV
+{
+  BIT4               spare,  //'0000'B
+  BIT3               tio,
+  BIT1               tiFlag,
+  TI_Extension       tIExtension  optional
+} with { variant (tIExtension)"PRESENCE(tio = '111'B)"};
+
+
+type record        TI_Extension
+{
+  BIT7               tI_Value,
+  BIT1               tI_ExtBit         //'1'B
+};
+
+
+// LLC SAPI - 10.5.6.9
+type record LLC_SAPITV
+{
+  OCT1               elementIdentifier,
+  LLC_SAPIV          valueField
+} with { variant "PRESENCE (elementIdentifier = '32'O)"; };
+
+
+type record  LLC_SAPIV
+{
+  BIT4               valueField,
+  BIT4               spare        //'0000'B
+};
+
+
+// Tear down indicator - 10.5.6.10
+type record  TearDownIndicatorTV
+{
+  TearDownIndicatorV tearDownIndicatorV,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1001'B)"; };
+
+type record TearDownIndicatorV
+{
+  BIT1               tdi_flag,
+  BIT3               spare     //'000'B
+};
+
+
+// Packet Flow Identifier - 10.5.6.11
+type record PacketFlowIDTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  PacketFlowIDV      valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '34'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+
+type record PacketFlowIDV
+{
+  BIT7               valueField,
+  BIT1               spare   // '0'B
+};
+
+
+// Traffic Flow Template - 10.5.6.12
+// when TFT operation is  "delete packet filters from existing TFT"
+// NOTE: will need to use "TAG" variant if both IEI is present within a PDU
+type record TrafficFlowTemplateTLV
+{
+  OCT1                         elementIdentifier,
+  TrafficFlowTemplateLV        trafficFlowTemplateLV
+} with { variant "PRESENCE (elementIdentifier = '31'O,
+  elementIdentifier = '36'O)";
+};
+
+type record TrafficFlowTemplateLV
+{
+  LIN1                         lengthIndicator,
+  TrafficFlowTemplateV         valueField
+} with { variant (lengthIndicator) "LENGTHTO(valueField)"};
+
+
+type union TrafficFlowTemplateV
+{
+  TrafficFlowTemplateV_CreateAddReplaceTFT
+  trafficFlowTemplateV_CreateAddReplaceTFT,
+  TrafficFlowTemplateV_DeletePacketFilter
+  trafficFlowTemplateV_DeletePacketFilter,
+  TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+  trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+};
+
+
+type record TrafficFlowTemplateV_CreateAddReplaceTFT
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT,  //'001'B or
+  PacketFilterList_CreateAddReplaceTFT   packetFilterList_CreateAddReplaceTFT,
+  ParametersList                         parametersList            optional
+} with {
+  variant "PRESENCE (operationCodeTFT  = '001'B, //  Create New TFT
+  operationCodeTFT  = '011'B, //  Add packet filters to existing TFT
+  operationCodeTFT  = '100'B  //  Replace packet filters in existing TFT
+  )";
+  variant(parametersList)       "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_CreateAddReplaceTFT)";
+  variant(numberOfPacketFilters)"UNIT(elements)";
+};
+
+
+type record TrafficFlowTemplateV_DeletePacketFilter
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT,
+  //'101'B or '011'B or '100'B
+  PacketFilterList_DeletePacketFilter    packetFilterList_DeletePacketFilter,
+  ParametersList                         parametersList         optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '101'B)"  // Delete packet filters from existing TFT
+  variant(parametersList) "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_DeletePacketFilter)";
+  variant  (numberOfPacketFilters)"UNIT(elements)";
+};
+
+
+type record TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+{
+  BIT4                         numberOfPacketFilters, //'0000'B
+  // numberOfPacketFilters is meaningless here since there is no PacketFilterList
+  BIT1                         eBIT,
+  BIT3                         operationCodeTFT,      // '010'B  or '110'B
+  ParametersList               parametersList   optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '010'B,  // delete existing TFT
+  operationCodeTFT = '110'B   // No TFT Operation
+  )";
+  variant (parametersList) "PRESENCE(eBIT = '1'B)"
+};
+
+
+type record of PacketFilter PacketFilterList_CreateAddReplaceTFT;
+
+
+type record PacketFilter
+{
+  PacketFilterIdentifier_CreateAddReplaceTFT       identifier,
+  OCT1                         evaluationPrecedence,
+  LIN1                         lengthIndicator,
+  octetstring                  contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+type record PacketFilterIdentifier_CreateAddReplaceTFT
+{
+  BIT4 packetFilterIdentifier,
+  BIT2 packetFilterDirection,
+  BIT2 spare
+}
+
+type record of PacketFilterIdentifier  PacketFilterList_DeletePacketFilter;
+
+
+type record PacketFilterIdentifier
+{
+  BIT4 packetFilterIdentifier,
+  BIT4 spare
+}
+
+
+type record of Parameter ParametersList;
+
+
+type record Parameter
+{
+  OCT1               parameterIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+
+// Temporary Mobile Group Identity - 10.5.6.13
+type record TemporaryMobileGroupIDLV
+{
+  LIN1               lengthIndicator,
+  OCT3               mBMSServiceID,
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2
+}  with { variant (lengthIndicator) "LENGTHTO
+  (mBMSServiceID,mccDigit1,mccDigit2,mccDigit3,
+  mccDigit3,mncDigit1,mncDigit2)"};
+
+
+// MBMS Bearer Capabilities - 10.5.6.14
+type record MBMSBearerCapabilitiesLV
+{
+  LIN1               lengthIndicator,
+  OCT1               maxBitrateDownlink,
+  OCT1               maxBitrateDownlinkExtended optional
+} with { variant (lengthIndicator) "LENGTHTO (maxBitrateDownlink,
+  maxBitrateDownlinkExtended)"};
+
+// MBMS Protocol Configuration Options - 10.5.6.15
+type record MBMSProtocolConfigOptionsTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  OCT1               spare, // '00'O
+  octetstring        valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '35'O)";
+  variant (lengthIndicator) "LENGTHTO (spare,valueField)"
+};
+
+
+//10.5.6.16
+type record EnhancedNetworkSeviveAccessPointIDV  //(V)
+{
+  OCT1               enhancedNetworkSeviveAccessPointIDValue
+}
+
+// 10.5.6.17 Request type
+type record RequestTypeTV {
+  RequestTypeV       requestTypeV,
+  BIT1				 spare,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1010'B)" };
+
+//001 initial request
+//010 Handover
+//011 Unused. If received, the network shall interpret this as "initial request".
+//100 Emergency
+type BIT3 RequestTypeV;
+
+// 10.5.6.18 Notification Indicator
+type record NotificationIndicatorLV
+{
+  LIN1              lengthIndicator,
+  OCT1              valueField
+} with {
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+// 10.5.6.19 Connectivity Type
+type record ConnectivityTypeTV
+{
+  BIT4               connectivityTypeValue,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1011'B)" };
+
+// 10.5.6.20 WLAN Offload Acceptability
+type record WLANOffloadAcceptabilityTV
+{
+  BIT1  eUTRANOffloadAcceptabilityValue,
+  BIT1  uTRANOffloadAcceptabilityValue,
+  BIT2  spare,
+  BIT4  elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1100'B)" };
+
+// 10.5.6.21 NBIFOM container
+type record NBIFOM_ContainerTLV
+{
+  OCT1                   elementIdentifier,
+  LIN1                   lengthIndicator,
+  NBIFOM_ParameterList   contents
+} with { variant "PRESENCE (elementIdentifier = '33'O)";
+  variant (lengthIndicator) "LENGTHTO (contents)" };
+
+// 6.1.1 - TS 24.161 v2.0.0
+type record of NBIFOM_Parameter NBIFOM_ParameterList;
+
+type record NBIFOM_Parameter
+{
+  OCT1         parameterIdentifier,
+  LIN1         lengthIndicator,
+  NBIFOM_ParameterContents parameterContents
+} with {  variant (lengthIndicator) "LENGTHTO (parameterContents)";
+  variant (parameterContents) "CROSSTAG(
+		nBIFOM_Mode, parameterIdentifier = '01'O;
+		nBIFOM_DefaultAccess, parameterIdentifier = '02'O;
+    nBIFOM_Status, parameterIdentifier = '03'O;
+    nBIFOM_RoutingRules, parameterIdentifier = '04'O;
+    nBIFOM_IPFlowMapping, parameterIdentifier = '05'O;
+    nBIFOM_RANRulesHandling, parameterIdentifier = '06'O;
+    nBIFOM_RANRulesStatus, parameterIdentifier = '07'O;
+    nBIFOM_AccessUsabilityIndication, parameterIdentifier = '08'O;
+    unknownParameter, OTHERWISE)"};
+
+type union NBIFOM_ParameterContents
+{
+  OCT1 nBIFOM_Mode,
+  OCT1 nBIFOM_DefaultAccess,
+  OCT1 nBIFOM_Status,
+  NBIFOM_RoutingRules nBIFOM_RoutingRules,
+  NBIFOM_RoutingRules nBIFOM_IPFlowMapping,
+  OCT1 nBIFOM_RANRulesHandling,
+  OCT1 nBIFOM_RANRulesStatus,
+  NBIFOM_AccessUsabilityIndication nBIFOM_AccessUsabilityIndication,
+  octetstring unknownParameter
+};
+
+type record of NBIFOM_RoutingRule NBIFOM_RoutingRules
+type record NBIFOM_RoutingRule
+{
+  LIN1         lengthIndicator,
+  OCT1         routingRuleIdentifier,
+  BIT3         operationCode,
+  BIT3         spare,
+  BIT2         routingAccess,
+  OCT1         routingRulePrioroty,
+  RoutingFilter routingFilter
+} with {  variant (lengthIndicator) "LENGTHTO (routingRuleIdentifier,operationCode,
+  spare,routingAccess,routingRulePrioroty,routingFilter)";}
+
+type record RoutingFilter
+{
+  BIT1 flagA,
+  BIT1 flagB,
+  BIT1 flagC,
+  BIT1 flagD,
+  BIT1 flagE,
+  BIT1 flagF,
+  BIT1 flagG,
+  BIT1 flagH,
+  BIT1 flagI,
+  BIT1 flagJ,
+  BIT1 flagK,
+  BIT1 flagL,
+  BIT1 flagM,
+  BIT1 flagN,
+  bitstring flagsZ length(18),
+  OCT4  sourceIPv4Address optional,
+  OCT4  destinationIPv4Address optional,
+  OCT16 sourceIPv6Address optional,
+  OCT16 destinationIPv6Address optional,
+  OCT1  sourceAddressPrefixLength optional,
+  OCT1  destinationAddressPrefixLength optional,
+  OCT4  iPSecSecurityParameterIndex optional,
+  OCT1  protocolTypeNextHeader optional,
+  OCT4  startSourcePortRange optional,
+  OCT4  endSourcePortRange optional,
+  OCT4  startDestinationPortRange optional,
+  OCT4  endDestinationPortRange optional,
+  OCT1  typeOfService optional,
+  OCT4  flowLabel optional
+}  with { variant (sourceIPv4Address)  "PRESENCE(flagA = '1'B)";
+  variant (destinationIPv4Address)  "PRESENCE(flagB = '1'B)";
+  variant (sourceIPv6Address)  "PRESENCE(flagC = '1'B)";
+  variant (destinationIPv6Address)  "PRESENCE(flagD = '1'B)";
+  variant (sourceAddressPrefixLength)  "PRESENCE(flagE = '1'B)";
+  variant (destinationAddressPrefixLength)  "PRESENCE(flagF = '1'B)";
+  variant (iPSecSecurityParameterIndex)  "PRESENCE(flagG = '1'B)";
+  variant (protocolTypeNextHeader)  "PRESENCE(flagH = '1'B)";
+  variant (startSourcePortRange)  "PRESENCE(flagI = '1'B)";
+  variant (endSourcePortRange)  "PRESENCE(flagJ = '1'B)";
+  variant (startDestinationPortRange)  "PRESENCE(flagK = '1'B)";
+  variant (endDestinationPortRange)  "PRESENCE(flagL = '1'B)";
+  variant (typeOfService)  "PRESENCE(flagM = '1'B)";
+  variant (flowLabel)  "PRESENCE(flagN = '1'B)";
+}
+
+type record NBIFOM_AccessUsabilityIndication
+{
+  BIT2 threeGPPAccessUsableValue,
+  BIT2 wLANAccessUsableValue,
+  BIT4 spare
+}
+// =================================================
+// GPRS Common information elements (chapter 10.5.7)
+// =================================================
+
+//PDPContextStatus - 10.5.7.1
+type record PDPContextStatusTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  OCT2               valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '32'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+
+// Radio priority - 10.5.7.2
+type record RadioPriorityTV
+{
+  RadioPriorityV     valueField,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1000'B)"; };
+
+
+type record RadioPriorityV
+{
+  BIT3               priorityLevelValue,
+  BIT1               spare  // '0'B
+};
+
+
+//GPRS Timer - 10.5.7.3
+type record GPRSTimerTV
+{
+  OCT1               elementIdentifier,
+  GPRSTimerV         gprsTimerV
+} with { variant "PRESENCE (elementIdentifier = '17'O)"; };
+
+
+type record GPRSTimerV
+{
+  BIT5               timerValue,
+  BIT3               unit
+};
+
+// GPRS Timer2 - 10.5.7.4
+type record GPRSTimer2TLV
+{
+  OCT1               elementIdentifier,  //'2A'O or '37'O
+  LIN1               lengthIndicator,
+  GPRSTimerV         gprsTimer2V    // the same as GPRSTimerV
+} with {
+  variant (lengthIndicator) "LENGTHTO (gprsTimer2V)"
+};
+
+// GPRS Timer3 - 10.5.7.4a
+// GPRSTimer3TLV See MobileL3_CommonIE_Types.ttcn
+
+// Radio priority2 - 10.5.7.5
+type record RadioPriority2TV
+{
+  RadioPriority2V    valueField,
+  BIT4               elementIdentifier
+};
+
+
+type record RadioPriority2V
+{
+  BIT3               priorityLevelValue,
+  BIT1               spare   // '0'B
+};
+
+
+// 10.5.7.6 MBMS context status
+type record MBMS_ContextStatusTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        mBMSContextStatusInformation length (0..16)
+} with {
+  variant "PRESENCE (elementIdentifier = '35'O)";
+  variant (lengthIndicator) "LENGTHTO (mBMSContextStatusInformation)"
+};
+
+
+// 10.5.7.7
+type record UplinkDataStatusTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  UplinkDataStatusV  valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '36'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+type record UplinkDataStatusV
+{
+  BIT5               spare,
+  BIT3               nSAPI_5_to_7,
+  BIT8               nSAPI_8_to_15
+}; 
+
+// 10.5.7.8
+// DevicePropertiesTV -> See MobileL3_CommonIE_Types.ttcn
+
+
+// ==============================================
+// GPRS Mobility Management Messages (chapter 9.4)
+// ==============================================
+
+// GMM Attach Request - 9.4.1
+type record PDU_GMM_AttachRequest
+{
+  BIT8                             messageType, // '00000001'B
+  MSNetworkCapabilityLV            msNetworkCapability,
+  AttachTypeV                      attachType,
+  CipheringKeySequenceNumberV      gprsCKSN,
+  DRXParameterV                    drxParam,
+  MobileIdentityLV                 mobileIdentity,
+  RoutingAreaIdentificationV       oldRoutingAreaID,
+  MSRadioAccessCapabilityLV        msRACap,
+  P_TMSISignatureTV                ptmsiSignature                optional,
+  GPRSTimerTV                      reqGPRStimer                  optional,
+  TMSIStatusTV                     tmsiStatus                    optional,
+  PC_LCSCapability                 pC_LCSCapability              optional,
+  MobileStationClassmark2_TLV      mobileStationClassmark2       optional,
+  MobileStationClassmark3_TLV      mobileStationClassmark3       optional,
+  SupportedCodecList               supportedCodecs               optional,
+  UENetworkCapabilityTLV           uENetworkCapability           optional,
+  MobileIdentityTLV                additionalMobileIdentity      optional,
+  RoutingAreaIdentification2TLV    routingAreaIdentification2    optional,
+  VoiceDomainPreferenceandUEsUsageSettingTLV  voiceDomainandUEsUsageSetting optional,
+  DevicePropertiesTV               deviceProperties optional,
+  P_TMSI_TypeTV                    p_TMSI_Type optional,
+  MS_NetworkFeatureSupportTV       mS_NetworkFeatureSupport optional,
+  LocationAreaIdentification2_TLV  oldLocationAreaIdentification optional,
+  AdditionalUpdateTypeTV           additionalUpdateType optional,
+  NetworkResourceIdentifierContainerTLV tMSIBasedNRIcontainer optional,
+  GPRSTimer2TLV                    t3324 optional,
+  GPRSTimer3TLV                    t3312_ExtendedValue optional,
+  ExtendedDRXParametersTLV         extendedDRXParameters optional
+} with {
+  variant "PRESENCE (messageType = '00000001'B)";
+  variant "TAG
+  ( 
+  additionalMobileIdentity,                      elementIdentifier = '0011010'B; 
+  deviceProperties,                              elementIdentifier = '1101'B;  //D
+  mS_NetworkFeatureSupport,                      elementIdentifier = '1100'B;  //C
+  t3324,                      elementIdentifier = '6a'O;
+  t3312_ExtendedValue,        elementIdentifier = '39'O
+  )"
+};
+
+// GMM Attach Accept - 9.4.2
+type record PDU_GMM_AttachAccept
+{
+  BIT8                         messageType,
+  AttachResultV                attachResult,
+  ForceToStandbyV              forceToStandby,
+  GPRSTimerV                   updateTimer,
+  RadioPriorityV               radioPriority,    //SMS
+  RadioPriority2V              radioPriorityTOM8, //  TOM8
+  RoutingAreaIdentificationV   routingAreaIdentification,
+  P_TMSISignatureTV            ptmsiSignature      optional,
+  GPRSTimerTV                  readyTimer          optional,
+  MobileIdentityTLV            allocatedPTMSI      optional,
+  MobileIdentityTLV            msIdentity          optional,
+  GMM_CauseTV                  gmmCause            optional,
+  GPRSTimer2TLV                t3302               optional,
+  CellNotificationT            cellNotification    optional,
+  PLMNListTLV                  equivalentPLMNs     optional,
+  NetworkFeatureSupportTV      networkFeatureSupport     optional,
+  EmergencyNumberListTLV       emergencyNumberList       optional,
+  RequestedMSInformationTV     requestedMSInformation    optional,
+  GPRSTimer2TLV                t3319                     optional,  
+  GPRSTimer2TLV                t3323                     optional,
+  GPRSTimer3TLV                t3312_ExtendedValue       optional,
+  AdditionalNetworkFeatureSupportTLV additionalNetworkFeatureSupport optional,
+  GPRSTimer2TLV                t3324 optional,
+  ExtendedDRXParametersTLV     extendedDRXParameters optional
+} with {
+  variant "PRESENCE (messageType = '00000010'B)";
+  variant "TAG
+  (
+  allocatedPTMSI,             elementIdentifier = '0011000'B;  //'18'O  7 bits
+  msIdentity,                 elementIdentifier = '0100011'B;  //'23'O  7 bits
+  t3302,                      elementIdentifier = '2A'O;  
+  t3319,                      elementIdentifier = '37'O;  
+  t3323,                      elementIdentifier = '38'O;
+  t3312_ExtendedValue,        elementIdentifier = '39'O;
+  t3324,                      elementIdentifier = '6a'O;
+  )"
+};
+
+
+// GMM Attach Complete - 9.4.3
+type record  PDU_GMM_AttachComplete
+{
+  BIT8                             messageType,
+  InterRATInformationContainerTLV  interRATHandoverInformation optional,
+  EUTRANinterRATInformationContainerTLV eUTRANinterRATHandoverInformation optional
+} with { variant "PRESENCE (messageType = '00000011'B)"; };
+
+
+// GMM Attach Reject - 9.4.4
+type record PDU_GMM_AttachReject
+{
+  BIT8                         messageType,
+  GMM_CauseV                   gmmCause,
+  GPRSTimer2TLV                t3302          optional,
+  GPRSTimer2TLV                t3346          optional 
+  
+} with { variant "PRESENCE (messageType = '00000100'B)"; 
+  variant "TAG 
+  ( 
+  t3302,     elementIdentifier = '2A'O;
+  t3346,     elementIdentifier = '3A'O;
+  )" 
+};
+
+// GMM Detach Request - 9.4.5
+
+// GMM Detach Request (mobile terminated detach) - 9.4.5.1
+type record PDU_GMM_DetachRequest_SGSN_MS
+{
+  BIT8                         messageType,
+  DetachTypeV                  detachType,
+  ForceToStandbyV              forceToStandby,
+  GMM_CauseTV                  gmmCause    optional
+} with { variant "PRESENCE (messageType = '00000101'B)"; };
+
+// GMM Detach Request (mobile originating detach) - 9.4.5.2
+type record   PDU_GMM_DetachRequest_MS_SGSN
+{
+  BIT8                         messageType,
+  DetachTypeV                  detachType,
+  BIT4                         spare,
+  MobileIdentityTLV            ptmsi             optional,
+  P_TMSISignature2TLV          ptmsiSignature    optional
+} with {
+  variant "PRESENCE (messageType = '00000101'B)";
+  variant "TAG (ptmsi, elementIdentifier = '0011000'B;)" //'18'O 7 bits
+};
+
+// GMM Detach Accept - 9.4.6
+
+// GMM Detach Accept (mobile terminated detach) 9.4.6.1
+type record  PDU_GMM_DetachAccept_MS_SGSN
+{
+  BIT8  messageType
+} with { variant "PRESENCE (messageType = '00000110'B)"; };
+
+// GMM Detach Accept (mobile originating detach) 9.4.6.2
+type record  PDU_GMM_DetachAccept_SGSN_MS
+{
+  BIT8                         messageType,
+  ForceToStandbyV              forceToStandby,
+  BIT4                         spare
+} with { variant "PRESENCE (messageType = '00000110'B)"; };
+
+// GMM P-TMSI reallocation command - 9.4.7
+type record  PDU_GMM_P_TMSIReallocationCommand
+{
+  BIT8                         messageType,
+  MobileIdentityLV             allocatedPTMSI,
+  RoutingAreaIdentificationV   routingAreaIdentification,
+  ForceToStandbyV              forceToStandby,
+  BIT4                         spare,
+  P_TMSISignatureTV            ptmsiSignature    optional
+} with { variant "PRESENCE (messageType = '00010000'B)"; };
+
+// GMM P-TMSI reallocation complete - 9.4.8
+type record  PDU_GMM_P_TMSIReallocationComplete
+{
+  BIT8              messageType
+} with { variant "PRESENCE (messageType = '00010001'B)"; };
+
+// GMM Authentication and ciphering request - 9.4.9
+type record PDU_GMM_AuthenticationAndCipheringRequest
+{
+  BIT8                                   messageType,
+  CipheringAlgorithmV                    cipheringAlgorithm,
+  IMEISVRequestV                         imeisvRequest,
+  ForceToStandbyV                        forceToStandby,
+  ACReferenceNumberV                     acReferenceNumber,
+  AuthenticationParameterRANDTV          authenticationParameterRAND optional,
+  CipheringKeySequenceNumberTV           cipheringKeySequenceNumber  optional,
+  AuthenticationParameterAUTNTLV         authenticationParameterAUTN optional
+} with { variant "PRESENCE (messageType = '00010010'B)"; 
+  variant "TAG (authenticationParameterAUTN,   elementIdentifier = '28'O)";
+};
+
+// GMM Authentication and ciphering response  - 9.4.10
+type record PDU_GMM_AuthenticationAndCipheringResponse
+{
+  BIT8                                   messageType,
+  ACReferenceNumberV                     acReferenceNumber,
+  BIT4                                   spare,
+  AuthenticationResponseParameterTV      authenticationParResp     optional,
+  MobileIdentityTLV                      imeisv                    optional,
+  AuthenticationResponseParameterUMTSTLV authenticationRespParExt  optional
+} with {
+  variant "PRESENCE (messageType = '00010011'B)";
+  variant "TAG (imeisv,                     elementIdentifier = '0100011'B;)"
+  variant "TAG (authenticationRespParExt,   elementIdentifier = '29'O)";
+};
+
+// GMM Authentication and Ciphering Failure  - 9.4.10a
+type record PDU_GMM_AuthenticationAndCipheringFailure
+{
+  BIT8                                   messageType,
+  GMM_CauseV                             gmmCause,
+  AuthenticationFailureParametersTLV     authenticationFailureParam   optional
+} with { variant "PRESENCE (messageType = '00011100'B)"; 
+  variant "TAG (authenticationFailureParam,   elementIdentifier = '30'O)";
+};
+
+// GMM Authentication and ciphering reject - 9.4.11
+type record PDU_GMM_AuthenticationAndCipheringReject
+{
+  BIT8               messageType
+} with { variant "PRESENCE (messageType = '00010100'B)"; };
+
+// GMM Identity Request - 9.4.12
+type record PDU_GMM_IdentityRequest
+{
+  BIT8               messageType,
+  IdentityType2V     identityType,
+  ForceToStandbyV    forceToStandby
+} with { variant "PRESENCE (messageType = '00010101'B)"; };
+
+// GMM Identity response - 9.4.13
+type record PDU_GMM_IdentityResponse
+{
+  BIT8               messageType,
+  MobileIdentityLV   mobileIdentity
+} with { variant "PRESENCE (messageType = '00010110'B)"; };
+
+// GMM Routing area update request - 9.4.14
+type record PDU_GMM_RoutingAreaUpdateRequest
+{
+  BIT8                         messageType,
+  UpdateTypeV                  updateType,
+  CipheringKeySequenceNumberV  gprsCKSN,
+  RoutingAreaIdentificationV   oldRoutingAreaId,
+  MSRadioAccessCapabilityLV    msRACap,
+  P_TMSISignatureTV            oldPTMSISignature           optional,
+  GPRSTimerTV                  readyTimerValue             optional,
+  DRXParameterTV               drxParameter                optional,
+  TMSIStatusTV                 tmsiStatus                  optional,
+  MobileIdentityTLV            ptmsi                       optional,
+  MSNetworkCapabilityTLV       mSNetworkCapability         optional,
+  PDPContextStatusTLV          pdpContextStatus            optional,
+  PC_LCSCapability             pC_LCSCapability            optional,
+  MBMS_ContextStatusTLV        mBMS_ContextStatus          optional,
+  UENetworkCapabilityTLV       uENetworkCapability         optional,
+  MobileIdentityTLV            additionalMobileIdentity    optional,
+  RoutingAreaIdentification2TLV oldRoutingAreaIdentification2 optional,
+  MobileStationClassmark2_TLV  mobileStationClassmark2     optional,
+  MobileStationClassmark3_TLV  mobileStationClassmark3     optional,
+  SupportedCodecList           supportedCodecs             optional,
+  VoiceDomainPreferenceandUEsUsageSettingTLV  voiceDomainUEUsageSetting  optional,
+  P_TMSI_TypeTV                p_TMSI_Type                 optional,
+  DevicePropertiesTV           deviceProperties            optional,  
+  MS_NetworkFeatureSupportTV   mS_NetworkFeatureSupport    optional,  
+  LocationAreaIdentification2_TLV oldLocationAreaIdentification optional,  
+  AdditionalUpdateTypeTV       additionalUpdateType optional,
+  NetworkResourceIdentifierContainerTLV tMSIBasedNRIcontainer optional,
+  GPRSTimer2TLV                t3324 optional,
+  GPRSTimer3TLV                t3312_ExtendedValue optional,
+  ExtendedDRXParametersTLV     extendedDRXParameters optional
+} with {
+  variant "PRESENCE (messageType = '00001000'B)";
+  variant "TAG (
+  ptmsi,                                  elementIdentifier = '0011000'B; //'18'O 7 bits
+  additionalMobileIdentity,               elementIdentifier = '0011010'B;
+  deviceProperties,                       elementIdentifier = '1101'B;  //D
+  mS_NetworkFeatureSupport,               elementIdentifier = '1100'B;  //C
+  t3324,                                  elementIdentifier = '6a'O;
+  t3312_ExtendedValue,                    elementIdentifier = '39'O
+  )"
+};
+
+// GMM Routing Area update accept  - 9.4.15
+type record PDU_GMM_RoutingAreaUpdateAccept
+{
+  BIT8                         messageType,
+  ForceToStandbyV              forceToStandby,
+  UpdateResultV                updateResult,
+  GPRSTimerV                   raUpdateTimer,
+  RoutingAreaIdentificationV   routingAreaId,
+  P_TMSISignatureTV            ptmsiSignature             optional,
+  MobileIdentityTLV            allocatedPTMSI             optional,
+  MobileIdentityTLV            msIdentity                 optional,
+  ReceiveNPDUNumbersListTLV    receiveNPDUNumbers         optional,
+  GPRSTimerTV                  readyTimer                 optional,
+  GMM_CauseTV                  gmmCause                   optional,
+  GPRSTimer2TLV                t3302                      optional,
+  CellNotificationT            cellNotification           optional,
+  PLMNListTLV                  equivalentPLMNs            optional,
+  PDPContextStatusTLV          pdpContextStatus           optional,
+  NetworkFeatureSupportTV      networkFeatureSupport      optional,
+  EmergencyNumberListTLV       emergencyNumberList        optional,
+  MBMS_ContextStatusTLV        mBMS_ContextStatus         optional,
+  RequestedMSInformationTV     requestedMSInformation     optional,
+  GPRSTimer2TLV                t3319                      optional,
+  GPRSTimer2TLV                t3323                      optional,
+  GPRSTimer3TLV                t3312_ExtendedValue        optional,   
+  AdditionalNetworkFeatureSupportTLV additionalNetworkFeatureSupport optional,
+  GPRSTimer2TLV                t3324 optional,
+  ExtendedDRXParametersTLV     extendedDRXParameters optional
+} with {
+  variant "PRESENCE (messageType = '00001001'B)";
+  variant "TAG
+  (
+  allocatedPTMSI,            elementIdentifier = '0011000'B; //'18'O 7 bits
+  msIdentity,                elementIdentifier = '0100011'B; //'23'O 7 bits
+  t3302,                     elementIdentifier = '2A'O; 
+  t3319,                     elementIdentifier = '37'O;   
+  t3323,                     elementIdentifier = '38'O;
+  t3312_ExtendedValue,       elementIdentifier = '39'O;
+  t3324,                     elementIdentifier = '6a'O;
+  )"
+};
+
+// GMM Routing area update complete - 9.4.16
+type record PDU_GMM_RoutingAreaUpdateComplete
+{
+  BIT8                             messageType,
+  ReceiveNPDUNumbersListTLV        receiveNPDUNumbers     optional,
+  InterRATInformationContainerTLV  interRATHandoverInformation optional,
+  EUTRANinterRATInformationContainerTLV eUTRANinterRATHandoverInformation optional
+} with { variant "PRESENCE (messageType = '00001010'B)"; };
+
+// GMM Routing area update reject - 9.4.17
+type record PDU_GMM_RoutingAreaUpdateReject
+{
+  BIT8                         messageType,
+  GMM_CauseV                   gmmCause,
+  ForceToStandbyV              forceToStandby,
+  BIT4                         spare,
+  GPRSTimer2TLV                t3302                  optional,
+  GPRSTimer2TLV                t3346                  optional
+} with { 
+  variant "PRESENCE (messageType = '00001011'B)"; 
+  variant "TAG
+  (   
+  t3302,                     elementIdentifier = '2A'O; 
+  t3346,                     elementIdentifier = '3A'O;       
+  )"
+};
+
+// GMM GMM Status - 9.4.18
+type record PDU_GMM_GMM_Status
+{
+  BIT8                         messageType,
+  GMM_CauseV                   gmmCause
+} with { variant "PRESENCE (messageType = '00100000'B)"; };
+
+
+// GMM GMM Information - 9.4.19
+type record PDU_GMM_GMM_Information
+{
+  BIT8                         messageType,
+  NetworkNameTLV               fullNetworkName            optional,
+  NetworkNameTLV               shortNetworkName           optional,
+  TimeZoneTV                   networkTimeZone            optional,
+  TimeZoneAndTimeTV            networkTimeAndTimeZone     optional,
+  LSA_IdentifierTLV            lsaIdentity                optional,
+  DaylightSavingTimeTLV        networkDaylightSavingTime  optional
+} with {
+  variant "PRESENCE (messageType = '00100001'B)";
+  variant "TAG
+  (
+  fullNetworkName,           elementIdentifier = '1000011'B;//'43'O  7 bits
+  shortNetworkName,          elementIdentifier = '1000101'B;//'45'O  7 bits
+  )"
+};
+
+// GMM Service Request - 9.4.20
+type record PDU_GMM_ServiceRequest
+{
+  BIT8                         messageType,
+  CipheringKeySequenceNumberV  cipheringKeySeqNum,
+  ServiceTypeV                 serviceType,
+  MobileIdentityLV             ptmsi,
+  PDPContextStatusTLV          pdpContextStatus    optional, // this IE shall be included by the MS
+  MBMS_ContextStatusTLV        mBMS_ContextStatus  optional,
+  UplinkDataStatusTLV          uplinkDataStatus    optional,
+  DevicePropertiesTV           deviceProperties    optional
+} with { variant "PRESENCE (messageType = '00001100'B)"; 
+         variant "TAG (deviceProperties,  elementIdentifier = '1101'B;  //D
+  )"  
+};
+
+// GMM Service Accept - 9.4.21
+type record PDU_GMM_ServiceAccept
+{
+  BIT8                         messageType,
+  PDPContextStatusTLV          pdpContextStatus     optional,
+  MBMS_ContextStatusTLV        mBMS_ContextStatus   optional
+} with { variant "PRESENCE (messageType = '00001101'B)"; };
+
+// GMM Service Reject - 9.4.22
+type record PDU_GMM_ServiceReject
+{
+  BIT8                          messageType,
+  GMM_CauseV                    gmmCause,
+  GPRSTimer2TLV                 t3346 optional
+} with { variant "PRESENCE (messageType = '00001110'B)"; };
+
+
+// ==============================================
+// GPRS Session Management Messages (chapter 9.5)
+// ==============================================
+
+// SM Activate PDP Context Request - 9.5.1
+type record PDU_SM_ActivatePDPContextRequest
+{
+  BIT8                         messageType,
+  NSAPIV                       requestedNSAPI,
+  LLC_SAPIV                    requestedLLCSAPI,
+  QoSLV                        requestedQoS,
+  PDPAddressLV                 requestedPDPaddress,
+  AccessPointNameTLV           accessPointName       optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts    optional,
+  RequestTypeTV                requestType           optional,
+  DevicePropertiesTV           deviceProperties      optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container      optional
+} with { variant "PRESENCE (messageType = '01000001'B)"; 
+         variant "TAG ( deviceProperties,  elementIdentifier = '1100'B;  //C
+  )"    
+};
+
+
+// SM Activate PDP Context Accept - 9.5.2
+type record PDU_SM_ActivatePDPContextAccept
+{
+  BIT8                         messageType,
+  LLC_SAPIV                    negotiatedLLCSAPI,
+  QoSLV                        negotiatedQoS,
+  RadioPriorityV               radioPriority,
+  BIT4                         spare,
+  PDPAddressTLV                pdpAddress            optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts    optional,
+  PacketFlowIDTLV              packetFlowID          optional,
+  SMCause2TLV                  sMCause2              optional,
+  ConnectivityTypeTV           connectivityType      optional,
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container      optional
+} with { variant "PRESENCE (messageType = '01000010'B)"; };
+
+
+// SM Activate PDP Context Reject - 9.5.3
+type record PDU_SM_ActivatePDPContextReject
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  ProtocolConfigOptionsTLV     protocolConfigOpts     optional,
+  GPRSTimer3TLV                backOffTimer           optional,
+  ReAttemptIndicatorTLV        reAttemptIndicator     optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container       optional
+} with { variant "PRESENCE (messageType = '01000011'B)"; 
+         variant "TAG (backOffTimer,  elementIdentifier = '37'O)"
+};
+
+
+// SM Activate Secondary PDP Context - 9.5.4
+type record PDU_SM_ActivateSecondaryPDPContextRequest
+{
+  BIT8                         messageType,
+  NSAPIV                       requestedNSAPI,
+  LLC_SAPIV                    requestedLLC_SAPI,
+  QoSLV                        requestedQoS,
+  LinkedTILV                   linkedTI,
+  TrafficFlowTemplateTLV       tft                     optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  DevicePropertiesTV           deviceProperties        optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional          
+} with { variant "PRESENCE (messageType = '01001101'B)";     
+         variant "TAG (deviceProperties,   elementIdentifier = '1100'B;  //C
+  )" 
+};
+// SM Activate Secondary PDP Context Accept - 9.5.5
+type record PDU_SM_ActivateSecondaryPDPContextAccept
+{
+  BIT8                         messageType,
+  LLC_SAPIV                    negotiatedLLC_SAPI,
+  QoSLV                        negotiatedQoS,
+  RadioPriorityV               radioPriority,
+  BIT4                         spare,
+  PacketFlowIDTLV              packetFlowIdentifier     optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts       optional,
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication    optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container         optional
+} with { variant "PRESENCE (messageType = '01001110'B)"; };
+
+
+// SM Activate Secondary PDP Context Reject - 9.5.6
+type record PDU_SM_ActivateSecondaryPDPContextReject
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  GPRSTimer3TLV                backOffTimer            optional,
+  ReAttemptIndicatorTLV        reAttemptIndicator      optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional
+} with  { variant "PRESENCE (messageType = '01001111'B)"; 
+          variant "TAG (backOffTimer,  elementIdentifier = '37'O)"
+};
+
+
+// SM Request PDP context activation -  9.5.7
+type record PDU_SM_RequestPDPContextActivation
+{
+  BIT8                         messageType,
+  PDPAddressLV                 offeredPDPAdress,
+  AccessPointNameTLV           accessPointName         optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional
+} with { variant "PRESENCE (messageType = '01000100'B)"; };
+
+
+// SM Request PDP context activation reject - 9.5.8
+type record PDU_SM_RequestPDPContextActivationReject
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional
+} with { variant "PRESENCE (messageType = '01000101'B)"; };
+
+
+// SM Modify PDP context request (Network to MS direction) - 9.5.9
+type record PDU_SM_ModifyPDPContextRequest_SGSN_MS
+{
+  BIT8                         messageType ,
+  RadioPriorityV               radioPriority,
+  BIT4                         spare,
+  LLC_SAPIV                    requestedLLC_SAPI,
+  QoSLV                        newQoS,
+  PDPAddressTLV                pdpAddress              optional,
+  PacketFlowIDTLV              packetFlowIdentifier    optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  TrafficFlowTemplateTLV       tFT                     optional,  
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication   optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional
+} with { variant "PRESENCE (messageType = '01001000'B)"; };
+
+
+// SM Modify PDP context request (MS to network direction) - 9.5.10
+type record PDU_SM_ModifyPDPContextRequest_MS_SGSN
+{
+  BIT8                         messageType,
+  LLC_SAPITV                   requestedLLC_SAPI      optional,
+  QoSTLV                       requestedNewQoS        optional,
+  TrafficFlowTemplateTLV       newTFT                 optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts     optional,
+  DevicePropertiesTV           deviceProperties       optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container       optional           
+} with { variant "PRESENCE (messageType = '01001010'B)"; 
+         variant "TAG (deviceProperties, elementIdentifier = '1100'B;  //C
+    )"     
+};
+
+
+// SM Modify PDP context accept (MS to network direction) - 9.5.11
+type record PDU_SM_ModifyPDPContextAccept_MS_SGSN
+{
+  BIT8                         messageType,
+  ProtocolConfigOptionsTLV     protocolConfigOpts     optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container       optional
+} with { variant "PRESENCE (messageType = '01001001'B)"; };
+
+
+// SM Modify PDP context accept (Network to MS direction) - 9.5.12
+type record PDU_SM_ModifyPDPContextAccept_SGSN_MS
+{
+  BIT8                         messageType,
+  QoSTLV                       negotiatedQoS          optional,
+  LLC_SAPITV                   negotiatedLLC_SAPI     optional,
+  RadioPriorityTV              newRadioPriority       optional,
+  PacketFlowIDTLV              packetFlowIdentifier   optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts     optional,
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication  optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container       optional
+} with { variant "PRESENCE (messageType = '01001011'B)"; };
+
+
+// SM Modify PDP Context reject - 9.5.13
+type record PDU_SM_ModifyPDPContextReject
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  ProtocolConfigOptionsTLV     protocolConfigOpts     optional,
+  GPRSTimer3TLV                backOffTimer           optional,
+  ReAttemptIndicatorTLV        reAttemptIndicator     optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container       optional
+} with { variant "PRESENCE (messageType = '01001100'B)"; 
+         variant "TAG (backOffTimer,  elementIdentifier = '37'O)"
+};
+
+
+// SM Deactivate PDP Context Request - 9.5.14
+type record PDU_SM_DeactivatePDPContextRequest
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  TearDownIndicatorTV          tearDownIndicator         optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts        optional,
+  MBMSProtocolConfigOptionsTLV mBMSprotocolConfigOptions optional,
+  GPRSTimer3TLV                t3396                     optional,
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication     optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container          optional
+} with { variant "PRESENCE (messageType = '01000110'B)";
+  variant "TAG (t3396,  elementIdentifier = '37'O)"
+};
+
+
+// SM Deactivate PDP Context Accept 3GPP - 9.5.15
+type record PDU_SM_DeactivatePDPContextAccept
+{
+  BIT8                         messageType,
+  ProtocolConfigOptionsTLV     protocolConfigOpts        optional,
+  MBMSProtocolConfigOptionsTLV mBMSprotocolConfigOptions optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container          optional
+} with { variant "PRESENCE (messageType = '01000111'B)"; };
+
+
+// Request Secondary PDP Context Activation - 9.5.15a
+type record PDU_SM_RequestSecondaryPDPContextActivation
+{
+  BIT8                         messageType,
+  QoSLV                        requiredQoS,
+  LinkedTILV                   linkedTI,
+  TrafficFlowTemplateTLV       tFT                     optional,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,  
+  WLANOffloadAcceptabilityTV   wLANOffloadIndication   optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional
+} with { variant "PRESENCE (messageType = '01011011'B)"; };
+
+
+// Request Secondary PDP Context Activation Reject - 9.5.15b
+type record PDU_SM_RequestSecondaryPDPContextActivationReject
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause,
+  ProtocolConfigOptionsTLV     protocolConfigOpts      optional,
+  NBIFOM_ContainerTLV          nBIFOM_Container        optional  
+} with { variant "PRESENCE (messageType = '01011100'B)"; };
+
+// Notification - 9.5.16a
+type record PDU_SM_Notification
+{
+  BIT8                         messageType,
+  NotificationIndicatorLV      notificationIndicator
+} with { variant "PRESENCE (messageType = '01011101'B)"; };
+
+// SM SM Status - 9.5.21
+type record PDU_SM_SM_Status
+{
+  BIT8                         messageType,
+  SMCauseV                     smCause
+} with { variant "PRESENCE (messageType = '01010101'B)"; };
+
+
+// Activate MBMS Context Request - 9.5.22
+type record PDU_SM_ActivateMBMSContextRequest
+{
+  BIT8                                   messageType,
+  EnhancedNetworkSeviveAccessPointIDV    requestedMBMS_NSAPI,
+  LLC_SAPIV                              requestedLLCSAPI,
+  MBMSBearerCapabilitiesLV               supportdMBMSBearerCapabilities,
+  PDPAddressLV                           requestedMulticastAddress,
+  AccessPointNameLV                      accessPointName,
+  MBMSProtocolConfigOptionsTLV           mBMSprotocolConfigOptions optional,
+  DevicePropertiesTV                     deviceProperties optional
+} with { variant "PRESENCE (messageType = '01010110'B)";    
+         variant "TAG(deviceProperties,  elementIdentifier = '1100'B;  //C
+  )"        
+};
+
+
+// Activate MBMS Context Accept - 9.5.23
+type record PDU_SM_ActivateMBMSContextAccept
+{
+  BIT8                                   messageType,
+  TemporaryMobileGroupIDLV               temporaryMobileGroupIDLV,
+  LLC_SAPIV                              negotiatedLLCSAPI,
+  MBMSProtocolConfigOptionsTLV           mBMSprotocolConfigOptions optional
+} with { variant "PRESENCE (messageType = '01010111'B)"; };
+
+
+// Activate MBMS Context Reject - 9.5.24
+type record PDU_SM_ActivateMBMSContextReject
+{
+  BIT8                                   messageType,
+  SMCauseV                               smCause,
+  MBMSProtocolConfigOptionsTLV           mBMSprotocolConfigOptions optional,
+  GPRSTimer3TLV                          backOffTimer optional,
+  ReAttemptIndicatorTLV                  reAttemptIndicator     optional
+} with { variant "PRESENCE (messageType = '01011000'B)"; 
+         variant "TAG (backOffTimer,  elementIdentifier = '37'O)"
+};
+
+
+// Request MBMS Context Activation - 9.5.25
+type record PDU_SM_RequestMBMSContextActivation
+{
+  BIT8                                   messageType,
+  NSAPIV                                 linkedNSAPI,
+  PDPAddressLV                           offeredMulticastAddress,
+  AccessPointNameLV                      accessPointName,
+  MBMSProtocolConfigOptionsTLV           mBMSprotocolConfigOptions optional
+} with { variant "PRESENCE (messageType = '01011001'B)"; };
+
+
+// Request MBMS Context Activation Reject - 9.5.26
+type record PDU_SM_RequestMBMSContextActivationReject
+{
+  BIT8                                   messageType,
+  SMCauseV                               smCause,
+  MBMSProtocolConfigOptionsTLV           mBMSprotocolConfigOptions optional
+} with { variant "PRESENCE (messageType = '01011010'B)"; };
+
+
+//==============================================================================
+//==============================================================================
+// GPRS SESSION MANAGEMENT MESSAGES Messages MS TO SGSN
+//==============================================================================
+//==============================================================================
+type union L3_GSM_MS_SGSN
+{
+  PDU_SM_ActivatePDPContextRequest          activatePDPContextRequest,
+  PDU_SM_ActivateSecondaryPDPContextRequest activateSecondaryPDPContextRequest,
+  PDU_SM_RequestPDPContextActivationReject  requestPDPContextActivationReject,
+  PDU_SM_ModifyPDPContextRequest_MS_SGSN    modifyPDPContextRequest_MS_SGSN,
+  PDU_SM_ModifyPDPContextAccept_MS_SGSN     modifyPDPContextAccept_MS_SGSN,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_DeactivatePDPContextRequest        deactivatePDPContextRequest,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_DeactivatePDPContextAccept         deactivatePDPContextAccept,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_SM_Status                          sM_Status,
+  PDU_SM_ActivateMBMSContextRequest         activateMBMSContextRequest,
+  PDU_SM_RequestMBMSContextActivationReject requestMBMSContextActivationReject,
+  PDU_SM_RequestSecondaryPDPContextActivationReject  requestSecondaryPDPContextActivationReject,
+  PDU_SM_Notification                       notification
+};
+
+//==============================================================================
+//==============================================================================
+// GPRS SESSION MANAGEMENT MESSAGES Messages SGSN -> MS
+//==============================================================================
+//==============================================================================
+type union L3_GSM_SGSN_MS
+{
+  PDU_SM_ActivatePDPContextAccept           activatePDPContextAccept,
+  PDU_SM_ActivatePDPContextReject           activatePDPContextReject,
+  PDU_SM_ActivateSecondaryPDPContextAccept  activateSecondaryPDPContextAccept,
+  PDU_SM_ActivateSecondaryPDPContextReject  activateSecondaryPDPContextReject,
+  PDU_SM_RequestPDPContextActivation        requestPDPContextActivation,
+  PDU_SM_ModifyPDPContextRequest_SGSN_MS    modifyPDPContextRequest_SGSN_MS,
+  PDU_SM_ModifyPDPContextAccept_SGSN_MS     modifyPDPContextAccept_SGSN_MS,
+  PDU_SM_ModifyPDPContextReject             modifyPDPContextReject,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_DeactivatePDPContextRequest        deactivatePDPContextRequest,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_DeactivatePDPContextAccept         deactivatePDPContextAccept,
+  //SGSN_MS, MS_SGSN
+  PDU_SM_SM_Status                          sM_Status,
+  PDU_SM_ActivateMBMSContextAccept          activateMBMSContextAccept,
+  PDU_SM_ActivateMBMSContextReject          activateMBMSContextReject,
+  PDU_SM_RequestMBMSContextActivation       requestMBMSContextActivation,
+  PDU_SM_RequestSecondaryPDPContextActivation  requestSecondaryPDPContextActivation
+};
+
+//==============================================================================
+//==============================================================================
+// GPRS Mobility Management Messages MS TO SGSN
+//==============================================================================
+//==============================================================================
+type union L3_GMM_MS_SGSN
+{
+  PDU_GMM_AttachRequest                     attachRequest,
+  PDU_GMM_AttachComplete                    attachComplete,
+  PDU_GMM_DetachRequest_MS_SGSN             detachRequest_MS_SGSN,
+  PDU_GMM_DetachAccept_MS_SGSN              detachAccept_MS_SGSN,
+  PDU_GMM_P_TMSIReallocationComplete        p_TMSIReallocationComplete,
+  PDU_GMM_AuthenticationAndCipheringResponse  authenticationAndCipheringResponse,
+  PDU_GMM_AuthenticationAndCipheringFailure authenticationAndCipheringFailure,
+  PDU_GMM_IdentityResponse                  identityResponse,
+  PDU_GMM_RoutingAreaUpdateRequest          routingAreaUpdateRequest,
+  PDU_GMM_RoutingAreaUpdateComplete         routingAreaUpdateComplete,
+  //SGSN_MS, MS_SGSN
+  PDU_GMM_GMM_Status                        gMM_Status,
+  PDU_GMM_ServiceRequest                    serviceRequest
+};
+
+//==============================================================================
+//==============================================================================
+// GPRS Mobility Management Messages SGSN TO MS
+//==============================================================================
+//==============================================================================
+type union L3_GMM_SGSN_MS
+{
+  PDU_GMM_AttachAccept                      attachAccept,
+  PDU_GMM_AttachReject                      attachReject,
+  PDU_GMM_DetachRequest_SGSN_MS             detachRequest_SGSN_MS,
+  PDU_GMM_DetachAccept_SGSN_MS              detachAccept_SGSN_MS,
+  PDU_GMM_P_TMSIReallocationCommand         p_TMSIReallocationCommand,
+  PDU_GMM_AuthenticationAndCipheringRequest authenticationAndCipheringRequest,
+  PDU_GMM_AuthenticationAndCipheringReject  authenticationAndCipheringReject,
+  PDU_GMM_IdentityRequest                   identityRequest,
+  PDU_GMM_RoutingAreaUpdateAccept           routingAreaUpdateAccept,
+  PDU_GMM_RoutingAreaUpdateReject           routingAreaUpdateReject,
+  //SGSN_MS, MS_SGSN
+  PDU_GMM_GMM_Status                        gMM_Status,
+  PDU_GMM_GMM_Information                   gMM_Information,
+  PDU_GMM_ServiceAccept                     serviceAccept,
+  PDU_GMM_ServiceReject                     serviceReject
+};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+} 
+
diff --git a/src/MobileL3_MM_Types.ttcn b/src/MobileL3_MM_Types.ttcn
new file mode 100644
index 0000000..6523060
--- /dev/null
+++ b/src/MobileL3_MM_Types.ttcn
@@ -0,0 +1,571 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_MM_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+
+module  MobileL3_MM_Types
+{
+
+import from General_Types           all;
+import from MobileL3_CommonIE_Types all;
+
+//============================================================================
+// 24.008/ 10.5.3  Mobility Management information elements
+//============================================================================
+
+//10.5.3.1  AuthenticationParRAND
+//**********************************************************************
+type record AuthenticationParameterRANDTV
+{
+  OCT1               elementIdentifier,
+  OCT16              randValue
+} with { variant "PRESENCE (elementIdentifier = '21'O)"; };
+
+//10.5.3.1.1 Authentication Par AUTN (UMTS auth. ch. only)
+//**********************************************************************
+type record AuthenticationParameterAUTNTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  OCT16              autnValue
+} with { variant (lengthIndicator) "LENGTHTO (autnValue)"};
+
+//10.5.3.2 Authentication Response parameter
+//**********************************************************************
+type record  AuthenticationResponseParameterTV
+{
+  OCT1               elementIdentifier,
+  OCT4               valueField   length (4)
+} with { variant "PRESENCE (elementIdentifier = '22'O)"; };
+
+//10.5.3.2.1 Authentication Response parameter (extension)
+//**********************************************************************
+type record AuthenticationResponseParameterUMTSTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        valueField     length (1..12)
+} with { variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+
+//10.5.3.2.2 Authentication Failure parameter (UMTS authentication challenge only)
+//**********************************************************************
+type record AuthenticationFailureParametersTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        valueField     length (14)
+} with { variant "PRESENCE (elementIdentifier = '30'O)";
+         variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+//10.5.3.5 Location Update Type
+//****************************************************************************
+type record LocationUpdatingType
+{
+  BIT2               lut, // LU  Normal  (00)
+                          // LU  Periodic  (01)
+                          // Attach  IMSI  (10)
+                          // reserved    (11)
+  BIT1               spare1_1, // 0
+  BIT1               fop   // Follow Pending on (1), not (0)
+};
+
+//10.5.3.5a Network Name
+//****************************************************************************
+type record  NetworkNameTLV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare1,
+  LIN1               lengthIndicator,
+  NetworkNameV       valueField
+} with { variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+
+type record  NetworkNameV
+{
+  BIT3               nSpareBits,
+  BIT1               addCI,
+  BIT3               codingScheme,
+  BIT1               ext1, //'1'B
+  octetstring        textString //     length (0..infinity)
+  // actually the upper limit depends on the max size of the PDU, see 44.006
+};
+
+//10.5.3.7 Follow-on Proceed
+//****************************************************************************
+type Type2 FollowOnProceed; //'A1'O
+
+//10.5.3.8 TimeZone
+//****************************************************************************
+type record TimeZoneTV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare,
+  TimeZoneV          valueField
+} with { variant "PRESENCE (elementIdentifier = '1000110'B)"; };  //'46'O  7 bits
+
+type record TimeZoneV
+{
+  OCT1               timeZone
+};
+
+//10.5.3.9 Time Zone And Time
+//****************************************************************************
+type record TimeZoneAndTimeTV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare,
+  TimeZoneAndTimeV   valueField
+} with { variant "PRESENCE (elementIdentifier = '1000111'B)"; };  //'47'O  7 bits;
+
+
+type record TimeZoneAndTimeV
+{
+  OCT1               year,
+  OCT1               month,
+  OCT1               day,
+  OCT1               hour,
+  OCT1               minute,
+  OCT1               second,
+  OCT1               timeZone
+};
+
+//10.5.3.10 CTS permission
+//**********************************************************************
+type Type2 CTS_Permission;
+
+//10.5.3.11 LSA identifier (Localised Service Area)
+//**********************************************************************
+type record  LSA_IdentifierTLV
+{
+  BIT7               elementIdentifier,
+  BIT1               spare,
+  LIN1               lengthIndicator,
+  LSA_IdentifierV    valueField
+} with { variant "PRESENCE (elementIdentifier = '1001000'B)";  //'48'O  7 bits
+         variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+type record LSA_IdentifierV
+{
+  octetstring lsa_id length (0..3)
+};
+
+//10.5.3.12 Daylight Saving Time
+//**********************************************************************
+type record DaylightSavingTimeTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  DaylightSavingTimeV valueField
+} with { variant "PRESENCE (elementIdentifier = '49'O)";
+         variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+type record DaylightSavingTimeV
+{
+  BIT2               valueField,
+  BIT6               spare     // Shall be set to 000000
+};
+
+//10.5.3.13 Emergency Number List
+//**********************************************************************
+type record EmergencyNumberListTLV
+{
+  OCT1                 elementIdentifier,
+  LIN1                 lengthIndicator,
+  EmergencyNumberListV emergencyNumberListV
+} with { variant "PRESENCE (elementIdentifier = '34'O)";
+         variant (lengthIndicator) "LENGTHTO (emergencyNumberListV)"};
+
+type record of EmergencyNumber EmergencyNumberListV
+
+type record EmergencyNumber
+{
+  LIN1                     lengthIndicator,
+  EmergencyServiceCategory emergencyServiceCategory,
+  hexstring                emergencyNumber        length (1..44)
+} with { variant (lengthIndicator) "LENGTHTO (emergencyServiceCategory,emergencyNumber)";
+         variant "PADDING(yes)";
+         variant "PADDING_PATTERN('1111'B)"};
+
+type record EmergencyServiceCategory
+{
+  BIT5               valueFiled,
+  BIT3               spare   //'000'B
+};
+
+//10.5.3.14 Additional Update Parameter
+//moved into MobileL3_CommonIE_Types
+
+
+//10.5.3.16 MM Timer
+//**********************************************************************
+type record MM_TimerTLV
+{
+  OCT1                 elementIdentifier,
+  LIN1                 lengthIndicator,
+  MM_TimerV            valueField
+} with { variant "PRESENCE (elementIdentifier = '36'O)";
+         variant (lengthIndicator) "LENGTHTO (valueField)"};
+
+type record MM_TimerV
+{
+  BIT5               timerValue,
+  BIT3               unit
+}
+
+//============================================================================
+// 24.008/9.2 Messages for mobility management (MM)
+//============================================================================
+
+//**********************************************************************
+// Security Messages
+//**********************************************************************
+
+// 9.2.1 Authentication Reject
+//**********************************************************************
+type record PDU_ML3_AuthenticationReject
+{
+  BIT6  messageType, // '010001'B  (AuthenticationReject)
+  BIT2  nsd
+};
+
+// 9.2.2 Authentication Request
+//**********************************************************************
+type record PDU_ML3_AuthenticationRequest
+{
+  BIT6  messageType, // '010010'B
+  BIT2  nsd,
+  CipheringKeySequenceNumberV   cipheringKeySequenceNumber,
+  BIT4                          spare2_4, // B'0000
+  OCT16                         authenticationParRAND,
+  AuthenticationParameterAUTNTLV  authenticationParAUTN    optional
+      // added by ethcky acc to 10/155 17_1/APT 210 26/1 Uen Rev A
+} with { variant "TAG (
+                authenticationParAUTN, elementIdentifier = '20'O ) "};
+
+// 9.2.3 Authentication Response
+//****************************************************************************
+type record PDU_ML3_AuthenticationResponse
+{
+  BIT6  messageType, // '010100'B  (AuthenticationResponse)
+  BIT2  nsd,
+  OCT4  authenticationParSRES, //10.5.3.2
+  AuthenticationResponseParameterUMTSTLV  authenticationParSRESext  optional
+} with { variant "TAG (authenticationParSRESext, elementIdentifier = '21'O )"};
+
+// 9.2.3a Authentication Failure
+//****************************************************************************
+type record PDU_ML3_AuthenticationFailure
+{
+  BIT6  messageType, // '011100'B  (AuthenticationFailure)
+  BIT2  nsd,
+  OCT1  rejectCause, //10.5.3.6
+  AuthenticationFailureParametersTLV  authenticationParFailure  optional
+} with { variant "TAG (authenticationParFailure , elementIdentifier = '22'O ) " };
+
+//**********************************************************************
+// Mobility Management Message Types (TS 24.008/ chapter 9)
+// Connection management (CM) messages
+//**********************************************************************
+
+// 9.2.4 CM Re-establishment Request
+//**********************************************************************
+type record PDU_ML3_CMReestablishmentRequest
+{
+  BIT6                          messageType,      // '101000'B
+  BIT2                          nsd,
+  CipheringKeySequenceNumberV   cipheringKeySequenceNumber,
+  BIT4                          spare,
+  MobileStationClassmark2_LV    mobileStationClassmark2,
+  MobileIdentityLV              mobileIdentityLV,
+  LocationAreaIdentification_TV locationAreaIdentification optional,
+  DevicePropertiesTV            deviceProperties  optional  
+} with { variant "TAG (locationAreaIdentification, elementIdentifier = '13'O;
+                       deviceProperties,           elementIdentifier = '1101'B;) 
+"};
+
+// 9.2.5 CM Service Accept (NW->MS)
+//**********************************************************************
+type record PDU_ML3_CMServiceAccept
+{
+  BIT6  messageType, //    '100001'B
+  BIT2  nsd
+};
+
+// 9.2.5a CMServicePrompt (NW->MS)
+//**********************************************************************
+type record PDU_ML3_CMServicePrompt
+{
+  BIT6  messageType, //    '100101'B
+  BIT2  nsd,
+  PdAndSapi pd_sapi
+};
+
+// 9.2.6 CMServiceReject (NW->MS)
+//**********************************************************************
+type record PDU_ML3_CMServiceReject
+{
+  BIT6  messageType, //    '100010'B
+  BIT2  nsd,
+  OCT1  rejectCause, //10.5.3.6
+  MM_TimerTLV t3246_Value optional     
+};
+
+// 9.2.7 CM Service Abort (MS->NW to request the abortion)
+//**********************************************************************
+type record PDU_ML3_CMServiceAbort
+{
+  BIT6  messageType, //   '100011'B
+  BIT2  nsd
+};
+
+// 9.2.8  Abort (NW->MS to initiate the abortion)
+//**********************************************************************
+type record PDU_ML3_Abort
+{
+  BIT6  messageType, //    '100010'B
+  BIT2  nsd,
+  OCT1  rejectCause //10.5.3.6
+};
+
+// 9.2.9 CM Service Request (MS->NW)
+//**********************************************************************
+type record PDU_ML3_CMServiceRequest
+{
+  BIT6  messageType,//    '100100'B
+  BIT2  nsd,
+  BIT4  cm_ServiceType,  // '0001'B establishment  MOC
+                         // '0010'B Emergency Call
+                         // '0100'SMS  B
+                         // '1000'B SS activation
+  CipheringKeySequenceNumberV cipheringKeySequenceNumber,
+  MobileStationClassmark2_LV  mobileStationClassmark2,
+  MobileIdentityLV            mobileIdentity,
+  PriorityLevel_ML3           priorityLevel   optional,
+  AdditionalUpdateParameterTV additionalUpdateParameterTV optional,
+  DevicePropertiesTV          deviceProperties optional
+} with { variant "TAG (priorityLevel,    elementIdentifier = '1000'B; 
+                       deviceProperties, elementIdentifier = '1101'B;) 
+"};
+
+//9.2.10 Identity Request
+//**********************************************************************
+type record PDU_ML3_IdentityRequest
+{
+  BIT6  messageType, //   '011000'B ( IdentityRequest )
+  BIT2  nsd,
+  BIT3  identityType,  // IMSI:'001'B IMEI:'010'B IMEISV:'011'B
+                       //(TMSI:'100'B not allowed?) 10.5.3.4
+  BIT5  spare1_5       // '00000'B
+};
+
+//9.2.11 Identity Response
+//**********************************************************************
+type record PDU_ML3_IdentityResponse
+{
+  BIT6  messageType,  //    '011001'B (IdentityResponse)
+  BIT2  nsd,
+  MobileIdentityLV  mobileIdentityLV,
+  P_TMSI_TypeTV     p_TMSI_TypeTV optional,
+  RoutingAreaIdentification2TLV routingAreaIdentification2TLV optional,
+  P_TMSISignature2TLV p_TMSISignature2TLV optional
+};
+
+//9.2.12 IMSI Detach Indication
+//**********************************************************************
+type record PDU_ML3_IMSI_DetachIndication
+{
+   BIT6  messageType, //    '000001'IMSI Detach Indication
+   BIT2  nsd,
+   MobileStationClassmark1_V    mobileStationClassmark1,
+   MobileIdentityLV             mobileIdentityLV
+};
+
+//****************************************************************************
+// 24.008/9 Mobility Management message contents
+//****************************************************************************
+
+// 9.2.13 Location Update Accept
+//****************************************************************************
+type record PDU_ML3_LocationUpdateAccept
+{
+  BIT6  messageType, // '000010'B  (LocationUpdateRequest)
+  BIT2  nsd,
+  LocationAreaIdentification_V  locationAreaIdentification,
+  MobileIdentityTLV             mobileIdentityTLV           optional,
+  Type2                         followOnProceed             optional,
+  CTS_Permission                cTS_Permission              optional,
+  PLMNListTLV                   equivalentPLMNs             optional,
+  EmergencyNumberListTLV        emergencyNumberList         optional,
+  GPRSTimer3TLV                 perMS_T3212                 optional
+} with { variant "TAG ( mobileIdentityTLV,  elementIdentifier = '0010111'B;  //'17'O;
+                        followOnProceed,    elementIdentifier = 'A1'O;
+                        cTS_Permission,     elementIdentifier = 'A2'O;
+                        equivalentPLMNs,    elementIdentifier = '1001010'B;  //'4A'O;
+                        emergencyNumberList,  elementIdentifier = '34'O;) "};
+
+// 9.2.14 Location Update Reject (NW->MS)
+//****************************************************************************
+type record PDU_ML3_LocationUpdateReject
+{
+  BIT6  messageType,  // '000100'B (LocationUpdateReject)
+  BIT2  nsd,
+  OCT1  rejectCause,   // see 10.5.3.6
+  MM_TimerTLV  t3246_Value optional
+};
+
+//9.2.15 Location Update Request (MS->NW)
+//****************************************************************************
+type record PDU_ML3_LocationUpdateRequest
+{
+  BIT6  messageType, // B'_001000  (LocationUpdateRequest)
+  BIT2  nsd,
+  LocationUpdatingType               locationUpdatingType,
+  CipheringKeySequenceNumberV        cipheringKeySequenceNumber,
+  LocationAreaIdentification_V       locationAreaIdentification,
+  MobileStationClassmark1_V          mobileStationClassmark1,
+  MobileIdentityLV                   mobileIdentityLV,
+  ClassmarkInformationType2_forUMTS  classmarkInformationType2_forUMTS  optional,
+  AdditionalUpdateParameterTV        additionalUpdateParameterTV        optional,
+  DevicePropertiesTV                 deviceProperties                   optional,
+  MS_NetworkFeatureSupportTV         mS_NetworkFeatureSupport           optional
+} with {
+  variant "TAG (
+    deviceProperties,                elementIdentifier = '1101'B;
+    mS_NetworkFeatureSupport,        elementIdentifier = '1110'B;  //E
+  )"
+};
+
+//9.2.15a MM information
+//****************************************************************************
+type record PDU_ML3_MMInformation
+{
+  BIT6  messageType,    //
+  BIT2  nsd,
+  NetworkNameTLV        fullNetworkName     optional,
+  NetworkNameTLV        shortNetworkName    optional,
+  TimeZoneTV            localtimeZone       optional,
+  TimeZoneAndTimeTV     univTime            optional,
+  LSA_IdentifierTLV     lSAIdentity         optional,
+  DaylightSavingTimeTLV networkDST          optional
+} with { variant "TAG (
+              fullNetworkName,  elementIdentifier = '1000011'B;   // '43'O;
+              shortNetworkName, elementIdentifier = '1000101'B;   // '45'O;
+              localtimeZone,    elementIdentifier = '1000110'B;   // '46'O;
+              univTime,         elementIdentifier = '1000111'B;   // '47'O;
+              lSAIdentity,      elementIdentifier = '1001000'B;   //' 48'O;
+              networkDST,       elementIdentifier = '49'O;)"};
+
+//9.2.16 MM Status
+//****************************************************************************
+type record PDU_ML3_MMStatus
+{
+  BIT6  messageType,
+  BIT2  nsd,
+  OCT1  rejectCause //10.5.3.6
+ };
+
+//9.2.17 TMSI reallocation command (NW->MS)
+//****************************************************************************
+type record PDU_ML3_TMSI_ReallocationCommand
+{
+  BIT6  messageType,    // '011010'B
+  BIT2  nsd,
+  LocationAreaIdentification_V  locationAreaIdentification,
+  MobileIdentityLV              mobileIdentity
+};
+
+//9.2.18 TMSI reallocation complete (MS->NW)
+//****************************************************************************
+type record PDU_ML3_TMSI_ReallocationComplete
+{
+  BIT6  messageType,    //  '011011'B
+  BIT2  nsd
+};
+
+//9.2.19 MM Null (MS->NW)
+//****************************************************************************
+type record PDU_ML3_MMNull
+{
+  BIT6  messageType,    //  '110000'B
+  BIT2  nsd
+};
+
+
+// ***************************************************************************
+// *     Mobility Management Messages
+// ***************************************************************************
+// 24.008/ Table 10.2
+type union PDU_ML3_MM
+{
+  PDU_ML3_IMSI_DetachIndication    imsiDetachIndication,
+  PDU_ML3_LocationUpdateAccept     locationUpdateAccept,
+  PDU_ML3_LocationUpdateReject     locationUpdateReject,
+  PDU_ML3_LocationUpdateRequest    locationUpdateRequest,
+
+  PDU_ML3_AuthenticationReject       authenticationReject,
+  PDU_ML3_AuthenticationRequest      authenticationRequest,
+  PDU_ML3_AuthenticationResponse     authenticationResponse,
+  PDU_ML3_AuthenticationFailure      authenticationFailure,
+  PDU_ML3_IdentityRequest            identityRequest,
+  PDU_ML3_IdentityResponse           identityResponse,
+  PDU_ML3_TMSI_ReallocationCommand   tmsiReallocCommand,
+  PDU_ML3_TMSI_ReallocationComplete  tmsiReallocComplete,
+
+  PDU_ML3_CMServiceAbort           cMServiceAbort,
+  PDU_ML3_CMServiceAccept          cMServiceAccept,
+  PDU_ML3_CMServiceReject          cMServiceReject,
+  PDU_ML3_CMServiceRequest         cMServiceRequest,
+  PDU_ML3_CMServicePrompt          cMServicePrompt,
+  PDU_ML3_CMReestablishmentRequest cMReEstablReq,
+  PDU_ML3_Abort                    abort,
+
+  PDU_ML3_MMNull                   mMNull,
+  PDU_ML3_MMStatus                 mMStatus,
+  PDU_ML3_MMInformation            mMInformation
+} with { variant "TAG (
+                imsiDetachIndication,   messageType ='000001'B; //registration msgs
+                locationUpdateAccept,   messageType ='000010'B;
+                locationUpdateReject,   messageType ='000100'B;
+                locationUpdateRequest,  messageType ='001000'B;
+
+                authenticationReject,   messageType ='010001'B;//security msgs
+                authenticationRequest,  messageType ='010010'B;
+                authenticationResponse, messageType ='010100'B;
+                authenticationFailure,  messageType ='011100'B;
+                identityRequest,        messageType ='011000'B;
+                identityResponse,       messageType ='011001'B;
+                tmsiReallocCommand,     messageType ='011010'B;
+                tmsiReallocComplete,    messageType ='011011'B;
+
+                cMServiceAbort,         messageType ='100011'B; //conn, mgmt
+                cMServiceAccept,        messageType ='100001'B;
+                cMServiceReject,        messageType ='100010'B;
+                cMServiceRequest,       messageType ='100100'B;
+                cMServicePrompt,        messageType ='100101'B;
+                cMReEstablReq,          messageType ='101000'B;
+                abort,                  messageType ='101001'B;
+
+                mMNull,               messageType ='110000'B; //misc
+                mMStatus,             messageType ='110001'B;
+                mMInformation,        messageType ='110010'B;
+              )"};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_RRM_Types.ttcn b/src/MobileL3_RRM_Types.ttcn
new file mode 100644
index 0000000..37ba384
--- /dev/null
+++ b/src/MobileL3_RRM_Types.ttcn
@@ -0,0 +1,1833 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_RRM_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 44.018 v13.0.0
+
+
+module  MobileL3_RRM_Types
+{
+
+import from General_Types all;
+import from MobileL3_CommonIE_Types all;
+import from MobileL3_GMM_SM_Types all;
+
+// ***************************************************************************
+// *     Radio Resource Management messages
+// ***************************************************************************
+// The messages below defined in 44.018 v13.0.0
+// Some IEs used from 24.008 and some IEs are defined in 44.018
+
+//============================================================================
+// 44.018//10.5 Radio Resource management (RRM) information elements
+//============================================================================
+
+//****************************************************************************
+// 10.5.1 Common information elements
+//****************************************************************************
+// see DTAP_Common.ttcn
+
+//****************************************************************************
+// 10.5.2 Radio Resource Management Information Elements
+//****************************************************************************
+
+//10.5.2.1a BA Range
+//****************************************************************************
+type record BARange_TLV
+{
+  OCT1         elementIdentifier, //'73'O
+  LIN1         lengthIndicator,
+  OCT1         numberOfRanges,
+  OCTN         ranges
+} with { variant (lengthIndicator) "LENGTHTO ( numberOfRanges,ranges)"};
+
+
+//10.5.2.1b Cell Channel Description
+//****************************************************************************
+type record CellChannelDescription_TV
+{
+  OCT1         elementIdentifier, //'62'O
+  OCT16        octet2_17
+};
+
+//10.5.2.1c BA List Pref
+//****************************************************************************
+type record BAListPref_TLV
+{
+  OCT1         elementIdentifier, //'75'O
+  LIN1         lengthIndicator,
+  OCTN         range_bafreq_info
+} with { variant (lengthIndicator) "LENGTHTO ( range_bafreq_info )"};
+
+//10.5.2.1d UTRAN Frequency List
+//****************************************************************************
+type record UTRANFrequencyList_TLV
+{
+  OCT1         elementIdentifier, //'75'O
+  LIN1         lengthIndicator,
+  OCTN         fdd_tdd
+} with { variant (lengthIndicator) "LENGTHTO ( fdd_tdd )"};
+
+//10.5.2.1e
+//****************************************************************************
+type record CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  octetstring  cellSelectionIndicatorValue
+} with { variant (lengthIndicator) "LENGTHTO (cellSelectionIndicatorValue)"};
+
+// 10.5.2.2 Cell Description
+//****************************************************************************
+type record CellDescription_V
+{
+  BIT3         bcc,                  // '001'B
+  BIT3         ncc,                  // '010'B
+  BIT2         BCCHArfcn_HighPart,   // '11'B
+  OCT1         BCCHArfcn_LowPart    // '04'O
+};
+
+// 10.5.2.5 Channel Description
+//****************************************************************************
+type record ChannelDescription_V
+{
+  BIT3   timeslotNumber,            // '110'B
+  BIT5   channelTypeandTDMAOffset,  // '00001'B send  or '00111'B rcv
+  OCT1   octet3,                    //  '00'O not structured yet
+  OCT1   octet4                     //  '09'O
+};
+
+type record ChannelDescription_TV
+{
+  OCT1   elementIdentifier,
+  BIT3   timeslotNumber,            // '110'B
+  BIT5   channelTypeandTDMAOffset,  // '00001'B send  or '00111'B rcv
+  OCT1   octet3,                    //  '00'O not structured yet
+  OCT1   octet4                     //  '09'O
+};
+
+// 10.5.2.5a Channel Description 2
+//****************************************************************************
+type record ChannelDescription2_V
+{
+  BIT3   timeslotNumber,            // '110'B
+  BIT5   channelTypeandTDMAOffset,  // '00001'B send  or '00111'B rcv
+  OCT1   octet3,                    //  '00'O
+  OCT1   octet4                     // '09'O
+};
+
+type record ChannelDescription2_TV
+{
+  OCT1  elementIdentifier,
+  BIT3  timeslotNumber,            // '110'B
+  BIT5  channelTypeandTDMAOffset,  // '00001'B send  or '00111'B rcv
+  OCT1  octet3,                    //  '00'O
+  OCT1  octet4                     // '09'O
+};
+
+// 10.5.2.5c Channel Description 3
+//****************************************************************************
+type record ChannelDescription3_TV
+{
+  OCT1   elementIdentifier,
+  OCT1   octet2,
+  OCT1   octet3
+};
+
+// 10.5.2.6 Channel Mode
+//****************************************************************************
+type record ChannelMode_TV
+{
+  OCT1  elementIdentifier,
+  OCT1  mode
+};
+
+type record ChannelMode_V
+{
+  OCT1  mode
+};
+
+// 10.5.2.7 Channel Mode 2
+//****************************************************************************
+type record ChannelMode2_TV
+{
+  OCT1  elementIdentifier,
+  OCT1  mode
+};
+
+// 10.5.2.7a
+//****************************************************************************
+type record UTRAN_Classmark_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  uTRAN_ClassmarkValue  //ASN.1 definition in 25.331
+} with { variant (lengthIndicator) "LENGTHTO (uTRAN_ClassmarkValue)"};
+
+// 10.5.2.7c Classmark Enquiry Mask
+//****************************************************************************
+type record ClassmarkEnquiryMask_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCT1  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+// 10.5.2.7d
+//****************************************************************************
+type record GERAN_IU_ModeClassmark_LV
+{
+  LIN1  lengthIndicator,
+  OCT1  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+// 10.5.2.8 Channel Needed
+//****************************************************************************
+type record ChannelNeeded_TV
+{
+  BIT2  channel1,
+  BIT2  channel2,
+  BIT4  elementIdentifier
+};
+
+type record ChannelNeeded_V
+{
+  BIT2  channel1,
+  BIT2  channel2
+};
+
+// 10.5.2.8b Channel Request Description
+//****************************************************************************
+type record  ChannelRequestDescription2_LV
+{
+  LIN1  lengthIndicator,
+  octetstring  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+// 10.5.2.9  Cipher Mode Setting
+//****************************************************************************
+type record CipherModeSetting_TV
+{
+  BIT1  sC,
+  BIT3  algorithmIdentifier,
+  BIT4  elementIdentifier
+};
+
+type record CipherModeSetting_V
+{
+  BIT1  sC,
+  BIT3  algorithmIdentifier
+};
+
+// 10.5.2.10  Cipher Mode Response
+//****************************************************************************
+type record CipherModeResponse_TV
+{
+  BIT1  cR,
+  BIT3  spare,
+  BIT4  elementIdentifier
+};
+
+type record CipherModeResponse_V
+{
+  BIT1  cR,
+  BIT3  spare
+};
+
+// 10.5.2.11a
+//****************************************************************************
+type record DTM_InformationDetails_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+
+// 10.5.2.11b
+//****************************************************************************
+type record DynamicARFCN_Mapping_TLV
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  octetstring  valuePart
+} with { variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+// 10.5.2.12  Frequency Channel Sequence before time
+//****************************************************************************
+type record FrequencyChannelSequence_TV
+{
+  OCT1  elementIdentifier,
+  BIT7  lowestARFCN,
+  BIT1  spare,
+  BIT4  incSkipARFCN02,
+  BIT4  incSkipARFCN01,
+  BIT4  incSkipARFCN04,
+  BIT4  incSkipARFCN03,
+  BIT4  incSkipARFCN06,
+  BIT4  incSkipARFCN05,
+  BIT4  incSkipARFCN08,
+  BIT4  incSkipARFCN07,
+  BIT4  incSkipARFCN10,
+  BIT4  incSkipARFCN09,
+  BIT4  incSkipARFCN12,
+  BIT4  incSkipARFCN11,
+  BIT4  incSkipARFCN14,
+  BIT4  incSkipARFCN13,
+  BIT4  incSkipARFCN16,
+  BIT4  incSkipARFCN15
+}
+
+//10.5.2.13 Frequency List
+//****************************************************************************
+type Type4_TLV FrequencyList_TLV;
+
+//10.5.2.14 Frequency Short List
+//****************************************************************************
+type record FrequencyShortList_TV
+{
+  OCT1  elementIdentifier,
+  OCT9  frequencyShortListValue
+}
+
+//10.5.2.14b GroupChannel Description
+//****************************************************************************
+type record GroupChannelDescription_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  BIT3  tN,
+  BIT5  channelType_tDMAoffset,
+  OCTN  oct4_13
+} with { variant (lengthIndicator) "LENGTHTO (tN,channelType_tDMAoffset,oct4_13 )"};
+
+//10.5.2.14d GPRS Broadcast Information
+//****************************************************************************
+type record GPRS_BroadcastInformation_LV
+{
+  LIN1  lengthIndicator,
+  octetstring gPRS_BroadcastInformationValue
+} with { variant (lengthIndicator) "LENGTHTO (gPRS_BroadcastInformationValue )"};
+
+//10.5.2.14e Enhanced DTM CS Release Indication
+//****************************************************************************
+type record Enhanced_DTM_CS_Release_Indication
+{
+  BIT1  iND,
+  BIT3  spare,
+  BIT4  elementIdentifier
+}
+
+//10.5.2.14f Group Channel Description 2
+//****************************************************************************
+type record Group_Channel_Description_2_TLV
+{
+  OCT1   elementIdentifier,
+  LIN1   lengthIndicator,
+  BIT3   tN,
+  BIT5   channelTypeandTDMAOffset,
+  BIT3   tSC,
+  BIT1   spare,
+  BIT6   mAIO,
+  BIT6   hSN,
+  OCT8   frequencyShortList
+} with { variant (lengthIndicator) "LENGTHTO (tN,channelTypeandTDMAOffset,tSC,
+                                   spare,mAIO,hSN,frequencyShortList)"
+         variant (tSC,spare,mAIO,hSN,frequencyShortList)  "FIELDORDER(msb)";};
+
+// 10.5.2.15
+//****************************************************************************
+type record HandoverReference_V
+{
+  OCT1   handoverReferenceValue   //'00'O
+};
+
+// 10.5.2.21 Mobile Allocation
+//****************************************************************************
+type Type4_TLV MobileAllocation_TLV; // see DTAP_Types.ttcn
+
+type Type4_LV MobileAllocation_LV;
+
+// 10.5.2.21a Mobile Time difference
+//****************************************************************************
+type record MobileTimeDifference_TLV
+{
+  OCT1    elementIdentifier, // '03'O
+  LIN1    lengthIndicator,
+  OCT3    mobileTimeDifferenceAndSpare //is the ordering correct????
+} with { variant (lengthIndicator) "LENGTHTO (mobileTimeDifferenceAndSpare)"};
+
+// 10.5.2.21aa MultiRate configuration
+//****************************************************************************
+type octetstring RRM_OCT1_5 length(1..5);
+
+type record MultiRateConfiguration_TLV
+{
+  OCT1        elementIdentifier, // '03'O
+  LIN1        lengthIndicator,
+  BIT2        startMode,
+  BIT1        spare3_1,
+  BIT1        iCMI,
+  BIT1        nSCB,
+  BIT3        multirateSpeechVersion,
+  RRM_OCT1_5  params
+} with { variant (lengthIndicator) "LENGTHTO (startMode,spare3_1,
+                                              iCMI,nSCB,multirateSpeechVersion,params)"};
+
+// 10.5.2.21b Multislot Allocation
+//****************************************************************************
+type record MultislotAllocation_octet3_11
+{
+  BIT7  dA1_7, //downlink assignment
+  BIT1  ext1,  //extension bit
+  BIT7  uA1_7,  //uplink assignment
+  BIT1  ext2,  //1 extension bit
+  OCT1_8  channelset optional
+} with { variant "EXTENSION_BIT (yes)"};
+
+type record MultislotAllocation_TLV
+{
+  OCT1                          elementIdentifier,
+  LIN1                          lengthIndicator,
+  MultislotAllocation_octet3_11 octet3_11
+} with { variant (lengthIndicator) "LENGTHTO (octet3_11)"};
+
+type record MultislotAllocation_LV
+{
+  LIN1                          lengthIndicator,
+  MultislotAllocation_octet3_11 octet3_11
+} with { variant (lengthIndicator) "LENGTHTO (octet3_11)"};
+
+
+// 10.5.2.21ab Mobile Time Difference on Hyperframe level
+//****************************************************************************
+type record MobileTimeDifferenceHyperframe_TLV
+{
+  OCT1                          elementIdentifier,
+  LIN1                          lengthIndicator,
+  OCT5                          MTDHValueAndSpare // Mobile Time Difference Hyperframe Value And Spare
+} with { variant (lengthIndicator) "LENGTHTO (MTDHValueAndSpare)"};
+
+
+// 10.5.2.23 P1 Rest Octets
+//****************************************************************************
+type octetstring P1RestOctets length(0..17);
+
+// 10.5.2.24 P2 Rest Octets
+//****************************************************************************
+type octetstring P2RestOctets length(1..11);
+
+// 10.5.2.25 P3 Rest Octets
+//****************************************************************************
+type OCT3 P3RestOctets;
+
+// 10.5.2.25b
+//****************************************************************************
+type record DedicatedModeOrTBF_V
+{
+  BIT3   tMA_dL_tD,
+  BIT1   spare
+}
+
+// 10.5.2.25c
+//****************************************************************************
+type record RR_PacketUplinkAssignment_TLV
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  octetstring  rR_PacketUplinkAssignment
+} with { variant (lengthIndicator) "LENGTHTO (rR_PacketUplinkAssignment)"};
+
+// 10.5.2.25d
+//****************************************************************************
+type record RR_PacketDownlinkAssignment_TLV
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  octetstring  rR_PacketDownlinkAssignment
+} with { variant (lengthIndicator) "LENGTHTO (rR_PacketDownlinkAssignment)"};
+
+// 10.5.2.25e - RR Packet Downlink Assignment Type 2
+//****************************************************************************
+type record RR_DualCarrierPacketDownlinkAssignment_TLV
+{
+ OCT1         elementIdentifier,
+ LIN1         lengthIndicator,
+ octetstring  rR_DualCarrierPacketDownlinkAssignment
+} with { variant (lengthIndicator) "LENGTHTO (rR_DualCarrierPacketDownlinkAssignment)"};
+
+// 10.5.2.26 Page Mode
+//****************************************************************************
+type record PageMode_TV
+{
+  BIT2 pM,
+  BIT2 spare1_2,
+  BIT4 elementIdentifier
+};
+
+type record PageMode_V
+{
+  BIT2 pM,
+  BIT2 spare1_2
+ };
+
+// 10.5.2.28 Power Command
+//****************************************************************************
+type record PowerCommand_V
+{
+  BIT5   powerlevel,   // 00000
+  BIT1   fPC_EP,       // 0
+  BIT1   ePC_Mode,     // 0
+  BIT1   spare_1       // 0
+};
+
+// 10.5.2.28a Power Command And Accesstype
+//****************************************************************************
+type record PowerCommandAndAccesstype_V
+{
+  BIT5   powerlevel,   // 00000
+  BIT1   fPC_EP,       // 0
+  BIT1   ePC_Mode,     // 0
+  BIT1   aTC           // 0
+};
+
+// 10.5.2.30 Request Reference
+//****************************************************************************
+type record RequestReference_V
+{
+  BIT5    t1,
+  BIT6    t3,
+  BIT5    t2
+} with { variant (t1,t3,t2)  "FIELDORDER(msb)"; };
+
+// 10.5.2.31 RR Cause
+//****************************************************************************
+type record RR_Cause_TV
+{
+  OCT1  elementIdentifier,
+  OCT1  valuePart
+};
+
+type record RR_Cause_V
+{
+  OCT1  valuePart
+};
+
+// 10.5.2.38 Starting Time
+//****************************************************************************
+type record StartingTime_TV
+{
+  OCT1  elementIdentifier,
+  BIT5    t1,
+  BIT6    t3,
+  BIT5    t2
+} with { variant (t1,t3,t2)  "FIELDORDER(msb)"; };
+
+type record StartingTime_V
+{
+  BIT5    t1,
+  BIT6    t3,
+  BIT5    t2
+} with { variant (t1,t3,t2)  "FIELDORDER(msb)"; };
+
+// 10.5.2.39 Synchronization Indication
+//****************************************************************************
+type record SynchronizationIndication_TV
+{
+  BIT2    sI,
+  BIT1    rOT,
+  BIT1    nCI,
+  BIT4    elementIdentifier
+}
+
+// 10.5.2.40 Timing Advance
+//****************************************************************************
+type record TimingAdvance_TV
+{
+  OCT1  elementIdentifier,
+  OCT1  valuePart
+};
+
+// 10.5.2.41 Real Time Difference
+//****************************************************************************
+type Type4_TLV RealTimeDifference_TLV;
+
+// 10.5.2.42 TMSIP_TMSI
+//****************************************************************************
+type record TMSIP_TMSI_TV
+{
+  OCT1  elementIdentifier,
+  OCT4  octet2_5
+};
+
+type OCT4 TMSIP_TMSI_V;
+
+// 10.5.2.42a
+//****************************************************************************
+type record VGCS_TargetModeIndication_TLV
+{
+  OCT1  elementIdentifier, //'01'O
+  LIN1  lengthIndicator,
+  BIT2  spare3_2,
+  BIT4  groupCipherKeyNumber,
+  BIT2  targetMode
+} with { variant (lengthIndicator) "LENGTHTO (spare3_2,groupCipherKeyNumber,targetMode)"};
+
+// 10.5.2.42b VGCS Ciphering Parameters
+//****************************************************************************
+type hexstring HEX9 length(9);
+
+type record VGCS_Ciphering_Parameters_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  BIT2  cellGlobalCount,
+  BIT1  b22_Count,
+  BIT1  cELL_Ind,
+  BIT1  lAC_Ind,
+  BIT1  rAND_Ind,
+  BIT2  spare,
+  OCT2  cellIdentity optional,
+  OCT5  lAI optional,
+  HEX9  vSTK_RAND optional,
+  BIT4  spare2 optional
+} with { variant (lengthIndicator) "LENGTHTO (cellGlobalCount,b22_Count,cELL_Ind,lAC_Ind,rAND_Ind,
+                                              spare,cellIdentity,lAI,vSTK_RAND,spare2)"
+         variant (cellIdentity)      "PRESENCE(cELL_Ind = '1'B)";
+         variant (lAI)               "PRESENCE(lAC_Ind = '1'B)";
+         variant (vSTK_RAND)         "PRESENCE(rAND_Ind = '1'B)";
+         variant (spare2)            "PRESENCE(rAND_Ind = '1'B)";
+         variant (vSTK_RAND,spare2)  "FIELDORDER(msb)";};
+
+// 10.5.2.43 DTM Wait Indication
+//****************************************************************************
+type record WaitIndication_V
+{
+  integer  t3122_3142TimeoutValue
+}
+
+// 10.5.2.49 APDU Flags
+//****************************************************************************
+type record APDU_Flags_V
+{
+  BIT1      lastSeg,
+  BIT1      firstSeg,
+  BIT1      cR,
+  BIT1      spare
+}
+
+// 10.5.2.50 APDU Data
+//****************************************************************************
+type record APDU_Data_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  aPDU_DataValue
+} with { variant (lengthIndicator) "LENGTHTO (aPDU_DataValue)"};
+
+// 10.5.2.51 Handover To UTRAN Command
+//****************************************************************************
+type record HandoverToUTRANCommand_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  handoverToUTRANCommandValue  // unaligned PER encoded ASN.1 value, 25.331
+} with { variant (lengthIndicator) "LENGTHTO (handoverToUTRANCommandValue)"};
+
+// 10.5.2.51 Handover To UTRAN Command
+//****************************************************************************
+type record HandoverToCDMA2000Command_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  handoverToCDMA2000CommandValue
+ // TIA/EIA/IS-2000-4-A, TIA/EIA/IS-2000-5-A,  TIA/EIA/IS-833
+} with { variant (lengthIndicator) "LENGTHTO (handoverToCDMA2000CommandValue)"};
+
+// Handover To UTRAN Command
+//****************************************************************************
+type record RadioBearerReconfiguration_LV
+{
+  LIN1          lengthIndicator,
+  octetstring   radioBearerReconfiguration44118  //  See 44.118 9.2.28
+} with { variant (lengthIndicator) "LENGTHTO (radioBearerReconfiguration44118)"};
+
+// 10.5.2.57 Service Support
+//****************************************************************************
+type record ServiceSupport_TV
+{
+  OCT1      elementIdentifier,
+  BIT1      mBMS_Broadcast,
+  BIT1      mBMS_Multicast,
+  BIT6      spare
+}
+
+type record ServiceSupport_V
+{
+  BIT1      mBMS_Broadcast,
+  BIT1      mBMS_Multicast,
+  BIT6      spare
+}
+
+// 10.5.2.58 MBMS ptm Channel Description
+//****************************************************************************
+type record MBMS_ptm_ChannelDescription_TLV
+{
+  OCT1          elementIdentifier,
+  LIN1          lengthIndicator,
+  octetstring   mMS_ptm_ChannelDescriptionValue
+} with { variant (lengthIndicator) "LENGTHTO (mMS_ptm_ChannelDescriptionValue)"};
+
+// 10.5.2.58a MBMS Session Parameter List
+//****************************************************************************
+type record MBMS_SessionParameterList_TLV
+{
+  OCT1          elementIdentifier,
+  LIN1          lengthIndicator,
+  octetstring   mBMS_SessionParameterListValue
+} with { variant (lengthIndicator) "LENGTHTO (mBMS_SessionParameterListValue)"};
+
+// 10.5.2.59 Dedicated Service Information
+//****************************************************************************
+type record DedicatedServiceInformation_TV
+{
+  OCT1      elementIdentifier,
+  BIT1      sIS,
+  BIT7      spare
+}
+
+// 10.5.2.60 MPRACH Description
+//****************************************************************************
+type record MPRACH_Description_TLV
+{
+  OCT1          elementIdentifier,
+  LIN1          lengthIndicator,
+  octetstring   mPRACH_DescriptionValue
+} with { variant (lengthIndicator) "LENGTHTO (mPRACH_DescriptionValue)"};
+
+// 10.5.2.61 Restriction Timer
+//****************************************************************************
+type record RestrictionTimer_TV
+{
+  OCT1          elementIdentifier,
+  OCT1          restrictionTimerValue
+}
+
+
+// 10.5.2.62 MBMS Session Identity
+//****************************************************************************
+type record MBMS_SessionIdentity_TV
+{
+  OCT1   elementIdentifier,
+  OCT1   mBMS_SessionIdentityValue
+}
+
+// 10.5.2.64 Talker Priority Status
+//****************************************************************************
+type record TalkerPriorityStatus_TLV
+{
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  BIT3  priority,
+  BIT1  uAI,
+  BIT3  spare,
+  BIT1  eS
+} with { variant (lengthIndicator) "LENGTHTO (priority,uAI,spare,eS)"};
+
+// 10.5.2.65 Talker Identity
+//****************************************************************************
+type record TalkerIdentity_TLV
+{
+  OCT1   elementIdentifier,
+  LIN1   lengthIndicator,
+  BIT3   fillerBits,
+  BIT5   spare,
+  OCT17  talkerIdentityField optional
+} with { variant (lengthIndicator) "LENGTHTO (fillerBits,spare,talkerIdentityField)"};
+
+// 10.5.2.66 Token
+//****************************************************************************
+type record Token_TV
+{
+  OCT1   elementIdentifier,
+  OCT4   tokenValue
+};
+
+// 10.5.2.67
+//****************************************************************************
+type record PS_Cause_TV
+{
+  BIT4    causeValue,
+  BIT4    elementIdentifier
+}
+
+// 10.5.2.68
+//****************************************************************************
+type record VGCS_AMR_Configuration_TLV
+{
+  OCT1   elementIdentifier,
+  LIN1   lengthIndicator,
+  BIT4   spare,
+  BIT4   aMR_ConfigurationValue
+} with { variant (lengthIndicator) "LENGTHTO (spare,aMR_ConfigurationValue)"};
+
+// 10.5.2.69 Carrier Indication
+//****************************************************************************
+type record CarrierIndication_TV
+{
+  BIT1 cI,
+  BIT3 spare1_3,
+  BIT4 elementIdentifier
+}
+
+// 10.5.2.74 Uplink Access Indication
+//***************************************************************************
+type record UplinkAccessIndication_TV
+{
+  BIT1     uA_Ind,
+  BIT3     spare,
+  BIT4     elementIdentifier
+}
+
+// 10.5.2.75
+//***************************************************************************
+type record Individual_Priorities_TLV
+{
+  OCT1     elementIdentifier,
+  LIN1     lengthIndicator,
+  OCTN     individualPrioritiesValue
+} with { variant (lengthIndicator) "LENGTHTO (individualPrioritiesValue)"};
+
+// 10.5.2.76
+//***************************************************************************
+type record FeatureIndicator_V
+{
+  BIT1     pS_IR,
+  BIT1     cs_IR,
+  BIT1     spare,
+  BIT1     pEO_BCCH_CHANGE_MARK
+}
+
+// 10.5.2.79
+//***************************************************************************
+type record DL_DCCH_Message_LV
+{
+  LIN1         lengthIndicator,
+  octetstring  dL_DCCH_MessageValue
+} with { variant (lengthIndicator) "LENGTHTO (dL_DCCH_MessageValue)"};
+
+// 10.5.2.80
+//***************************************************************************
+type record CNToMSTransparentInformation_TLV
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  octetstring  cNToMSTransparentInformationValue
+} with { variant (lengthIndicator) "LENGTHTO (cNToMSTransparentInformationValue)"};
+
+// 10.5.2.81
+//***************************************************************************
+type record PLMNIndex_TV
+{
+  BIT4         pLMNIndex,
+  BIT4         elementIdentifier
+};
+
+// 10.5.2.82
+//***************************************************************************
+type record ExtendedTSCSet_TV
+{
+  OCT1 elementIdentifier,
+  BIT2 cSDomainTSCSet,
+  BIT1 secondPSDomainTSCAssigned,
+  BIT1 primaryPSDomainTSCSet,
+  BIT1 secondaryPSDomainTSCSet,
+  BIT3 secondaryPSDomainTSCValue
+};
+
+//============================================================================
+// 44.018//9.1 Messages for Radio Resource management (RRM)
+//============================================================================
+
+// 44.018/9.1.1 Additional assignment (NW->MS)
+//****************************************************************************
+type record PDU_RRM_AdditionalAssignment_NW_MS
+{
+  BIT8                  messageType,   //'00111011'B,
+  ChannelDescription_V  channelDescription,
+  MobileAllocation_TLV  mobileAllocation optional,
+  StartingTime_TV       startingTime     optional,
+  ExtendedTSCSet_TV     extendedTSCSet   optional
+
+} with { variant "TAG ( mobileAllocation, elementIdentifier = '72'O;
+                        startingTime,     elementIdentifier = '7C'O;
+                        extendedTSCSet,   elementIdentifier = '6D'O;)"};
+
+// 44.018/9.1.2 Assignment Command (NW->MS)
+//****************************************************************************
+type record PDU_RRM_AssignmentCommand_NW_MS
+{
+  BIT8                      messageType,  //  '00101110'B;
+  ChannelDescription2_V     descrOf1stChAfterTime,
+  PowerCommand_V            PowerCommand,
+  FrequencyList_TLV         frequencyList_at          optional,
+  CellChannelDescription_TV cellChannelDescr          optional,
+  MultislotAllocation_TLV   descrMultislotAllocation  optional,
+  ChannelMode_TV            modeOf1stChannel          optional,
+  ChannelMode_TV            channelSet2               optional,
+  ChannelMode_TV            channelSet3               optional,
+  ChannelMode_TV            channelSet4               optional,
+  ChannelMode_TV            channelSet5               optional,
+  ChannelMode_TV            channelSet6               optional,
+  ChannelMode_TV            channelSet7               optional,
+  ChannelMode_TV            channelSet8               optional,
+  ChannelDescription_TV     descrOf2ndChAfterTime     optional,
+  ChannelMode2_TV           modeOf2ndChannel          optional,
+  MobileAllocation_TLV      mobileAllocation_at       optional,
+  StartingTime_TV           startingTime              optional,
+  FrequencyList_TLV         frequencyList_bt          optional,
+  ChannelDescription2_TV    descrOf1stCh_bt           optional,
+  ChannelDescription_TV     descrOf2ndCh_bt           optional,
+  FrequencyChannelSequence_TV  frequencyChannelSequence    optional,
+  MobileAllocation_TLV      mobileAllocation_bt       optional,
+  CipherModeSetting_TV      cipherModeSetting         optional,
+  VGCS_TargetModeIndication_TLV     vGCS_TargetModeIndication optional,
+  MultiRateConfiguration_TLV        multiRateConfiguration    optional,
+  VGCS_Ciphering_Parameters_TLV     vGCS_Ciphering_Parameters optional,
+  ExtendedTSCSet_TV     extendedTSCSet_afterTime    optional,
+  ExtendedTSCSet_TV     extendedTSCSet_beforeTime   optional
+} with { variant "TAG ( frequencyList_at,         elementIdentifier = '05'O;
+                        cellChannelDescr,         elementIdentifier = '62'O;
+                        descrMultislotAllocation, elementIdentifier = '10'O;
+                        modeOf1stChannel,         elementIdentifier = '63'O;
+                        channelSet2,              elementIdentifier = '11'O;
+                        channelSet3,              elementIdentifier = '13'O;
+                        channelSet4,              elementIdentifier = '14'O;
+                        channelSet5,              elementIdentifier = '15'O;
+                        channelSet6,              elementIdentifier = '16'O;
+                        channelSet7,              elementIdentifier = '17'O;
+                        channelSet8,              elementIdentifier = '18'O;
+                        descrOf2ndChAfterTime,    elementIdentifier = '64'O;
+                        modeOf2ndChannel,         elementIdentifier = '66'O;
+                        mobileAllocation_at,      elementIdentifier = '72'O;
+                        startingTime,             elementIdentifier = '7C'O;
+                        frequencyList_bt,         elementIdentifier = '19'O;
+                        descrOf1stCh_bt,          elementIdentifier = '1C'O;
+                        descrOf2ndCh_bt,          elementIdentifier = '1D'O;
+                        frequencyChannelSequence, elementIdentifier = '1E'O;
+                        mobileAllocation_bt,      elementIdentifier = '21'O;
+                        cipherModeSetting,        elementIdentifier = '1001'B;
+                        vGCS_TargetModeIndication,elementIdentifier = '01'O;
+                        multiRateConfiguration,   elementIdentifier = '03'O;
+                        vGCS_Ciphering_Parameters,elementIdentifier = '04'O;
+                        extendedTSCSet_afterTime, elementIdentifier = '6D'O;
+                        extendedTSCSet_beforeTime,elementIdentifier = '6E'O;
+                        )"};
+
+// 44.018/9.1.3 Assignment complete (MS->NW)
+//****************************************************************************
+type record PDU_RRM_AssignmentComplete_MS_NW
+{
+  BIT8                  messageType,  //  '00101001'B;
+  RR_Cause_V            rR_Cause
+};
+
+// 44.018/9.1.4 Assignment failure (MS->NW)
+//****************************************************************************
+type record PDU_RRM_AssignmentFailure_MS_NW
+{
+  BIT8                  messageType,  //  '00101111'B;
+  RR_Cause_V            rR_Cause
+};
+
+// 44.018/9.1.5 Channel Mode Modify (NW_MS)
+//****************************************************************************
+type record PDU_RRM_ChannelModeModify_NW_MS
+{
+  BIT8                            messageType,  //  '00010000'B;
+  ChannelDescription2_V           channelDescription,
+  ChannelMode_V                   channelMode,
+  VGCS_TargetModeIndication_TLV   vGCS_TargetModeIndication optional,
+  MultiRateConfiguration_TLV      multiRateConfiguration    optional,
+  VGCS_Ciphering_Parameters_TLV   vGCS_Ciphering_Parameters optional,
+  ExtendedTSCSet_TV               extendedTSCSet            optional
+}with {variant "TAG(  vGCS_TargetModeIndication, elementIdentifier = '01'O;
+                      multiRateConfiguration,    elementIdentifier = '03'O;
+                      vGCS_Ciphering_Parameters,elementIdentifier = '04'O;
+                      extendedTSCSet, elementIdentifier = '6D'O; )"
+                      };
+
+// 44.018/9.1.6 Channel Mode Modify Acknowledge(MS_NW)
+//****************************************************************************
+type record PDU_RRM_ChannelModeModifyAck_MS_NW
+{
+  BIT8                            messageType,  //  '00010111'B;
+  ChannelDescription2_V           channelDescription,
+  ChannelMode_V                   channelMode,
+  ExtendedTSCSet_TV               extendedTSCSet     optional
+}with {variant "TAG(extendedTSCSet, elementIdentifier = '6D'O; )"};
+
+// 44.018/9.1.7 Channel Release(NW_MS)
+//****************************************************************************
+type record PDU_RRM_ChannelRelease_NW_MS
+{
+  BIT8                        messageType,  //  '00001101'B;
+  RR_Cause_V                  rRCause,
+  BARange_TLV                 bARange                 optional,
+  GroupChannelDescription_TLV groupChannelDescription optional,
+  Type1_TV                    groupCipherKeyNumber    optional, // 1byte, see DTAP_Types
+  Type1_TV                    gPRSResumption          optional,
+  BAListPref_TLV              bAListPref              optional,
+  UTRANFrequencyList_TLV      uTRANFrequencyList      optional,
+  CellChannelDescription_TV   cellChannelDescr        optional,
+  CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE cellSelectionIndicator optional,
+  Enhanced_DTM_CS_Release_Indication    enhanced_DTM_CS_Release_Indication optional,
+  VGCS_Ciphering_Parameters_TLV         vGCS_Ciphering_Parameters optional,
+  Group_Channel_Description_2_TLV       group_Channel_Description_2 optional,
+  TalkerIdentity_TLV                    talkerIdentity optional,
+  TalkerPriorityStatus_TLV              talkerPriorityStatus optional,
+  VGCS_AMR_Configuration_TLV            vGCS_AMR_Configuration optional,
+  Individual_Priorities_TLV             individual_Priorities optional
+} with {variant "TAG(bARange,                  elementIdentifier ='73'O;
+                    groupChannelDescription,  elementIdentifier ='74'O;
+                    groupCipherKeyNumber,     elementIdentifier ='1000'B;
+                    gPRSResumption,           elementIdentifier ='1100'B;
+                    bAListPref,               elementIdentifier ='75'O;
+                    uTRANFrequencyList,       elementIdentifier ='76'O;
+                    cellChannelDescr,         elementIdentifier ='62'O;
+                    cellSelectionIndicator,   elementIdentifier ='77'O;
+                    enhanced_DTM_CS_Release_Indication,    elementIdentifier ='1010'B;
+                    vGCS_Ciphering_Parameters,             elementIdentifier = '04'O;
+                    group_Channel_Description_2,           elementIdentifier = '78'O;
+                    talkerIdentity,               elementIdentifier = '79'O;
+                    talkerPriorityStatus,         elementIdentifier = '7A'O;
+                    vGCS_AMR_Configuration,       elementIdentifier = '7B'O;
+                    individual_Priorities,        elementIdentifier = '7C'O;
+                 )"};
+
+// 44.018/9.1.8 ChannelRequest
+//****************************************************************************
+// Not implemented, 1 byte long msg on RACH
+
+
+// 44.018/9.1.9 Ciphering mode command
+//****************************************************************************
+type record PDU_RRM_CipheringModeCommand_NW_MS
+{
+  BIT8                            messageType,  //  '00110101'B;
+  CipherModeSetting_V             cipherModeSetting,
+  CipherModeResponse_V            cipherModeResponse
+};
+
+// 44.018/9.1.10 Ciphering mode complete
+//****************************************************************************
+type record PDU_RRM_CipheringModeComplete_MS_NW
+{
+  BIT8                            messageType,  //  '00110010'B;
+  MobileIdentityTLV              mobileEquipmentIdentity optional
+} with {variant "TAG(mobileEquipmentIdentity, elementIdentifier='0010111'B)"}; //'17'O
+
+// 44.018/9.1.11 Classmark Change
+//****************************************************************************
+type record PDU_RRM_ClassmarkChange_MS_NW
+{
+  BIT8                            messageType,  //  '00010110'B;
+  MobileStationClassmark2_LV      mobileStationClassmark2,
+  MobileStationClassmark3_TLV     mobileStationClassmark3 optional
+} with {variant "TAG(mobileStationClassmark3, elementIdentifier = '20'O)"};
+
+// 44.018/9.1.11a UTRAN Classmark Change
+//****************************************************************************
+type record PDU_RRM_UTRAN_ClassmarkChange_MS_NW
+{
+ BIT8                            messageType,
+ UTRAN_Classmark_LV              uTRAN_Classmark
+}
+
+// 44.018/9.1.11b
+//****************************************************************************
+type record PDU_RRM_CDMA2000_ClassmarkChange_MS_NW
+{
+  BIT8             messageType,
+  Type4_LV         terminalInformation,
+  Type4_LV         securityStatus,
+  Type4_LV         bandClassInformation,
+  Type4_LV         powerClassInformation,
+  Type4_LV         operatingModeInformation,
+  Type4_LV         serviceOptionInformation,
+  Type4_LV         multiplexOptionInformation,
+  Type4_LV         powerControlInformation,
+  Type4_LV         capabilityInformation,
+  Type4_LV         channelConfigurationCapabilityInformation,
+  Type4_LV         extMultiplexOptionInformation,
+  Type4_LV         bandSubclassInformation,
+  Type4_LV         encryptionCapability
+}
+
+// 44.018/9.1.11d
+//****************************************************************************
+type record PDU_RRM_GERAN_IU_ModeClassmarkChange_MS_NW
+{
+  BIT8                            messageType,
+  GERAN_IU_ModeClassmark_LV       gERAN_IU_ModeClassmark
+}
+
+// 44.018/9.1.12 Classmark Enquiry
+//****************************************************************************
+type record PDU_RRM_ClassmarkEnquiry_NW_MS
+{
+  BIT8                            messageType,  //  '00010011'B;
+  ClassmarkEnquiryMask_TLV        classmarkEnquiryMask optional
+} with {variant "TAG(classmarkEnquiryMask, elementIdentifier = '10'O)"};
+
+// 44.018/9.1.12b Configuration change command (NW->MS)
+//****************************************************************************
+type record PDU_RRM_ConfigurationChangeCommand_NW_MS
+{
+  BIT8                    messageType,  //  '00110000'B;
+  MultislotAllocation_LV  multislotAllocation,
+  ChannelMode_TV          modeOfChannelSet1 optional,
+  ChannelMode_TV          modeOfChannelSet2 optional,
+  ChannelMode_TV          modeOfChannelSet3 optional,
+  ChannelMode_TV          modeOfChannelSet4 optional,
+  ChannelMode_TV          modeOfChannelSet5 optional,
+  ChannelMode_TV          modeOfChannelSet6 optional,
+  ChannelMode_TV          modeOfChannelSet7 optional,
+  ChannelMode_TV          modeOfChannelSet8 optional
+} with {variant "TAG( modeOfChannelSet1, elementIdentifier='63'O;
+                      modeOfChannelSet2, elementIdentifier='11'O;
+                      modeOfChannelSet3, elementIdentifier='13'O;
+                      modeOfChannelSet4, elementIdentifier='14'O;
+                      modeOfChannelSet5, elementIdentifier='15'O;
+                      modeOfChannelSet6, elementIdentifier='16'O;
+                      modeOfChannelSet7, elementIdentifier='17'O;
+                      modeOfChannelSet8, elementIdentifier='18'O;)"};
+
+// 44.018/9.1.12c Configuration change acknowledge (MS->NW)
+//****************************************************************************
+type record PDU_RRM_ConfigurationChangeAck_MS_NW
+{
+  BIT8                  messageType  //  '00110001'B;
+};
+
+// 44.018/9.1.12d Configuration change reject (MS->NW)
+//****************************************************************************
+type record PDU_RRM_ConfigurationChangeRej_MS_NW
+{
+  BIT8                  messageType,  //  '00110011'B;
+  RR_Cause_V            rR_Cause
+};
+
+// 44.018/9.1.12e DTM Assignment Command
+//****************************************************************************
+type record PDU_RRM_DTM_AssignmentCommand_NW_MS
+{
+  BIT8                                      messageType,
+  PowerCommand_V                            cS_PowerCommand,
+  ChannelDescription_V                      description_CS_Channel,
+  GPRS_BroadcastInformation_LV              gPRS_BroadcastInformation,
+  CellChannelDescription_TV                 cellChannelDescr optional,
+  ChannelMode_TV                            channelMode optional,
+  FrequencyList_TLV                         frequencyList optional,
+  MobileAllocation_TLV                      mobileAllocation optional,
+  RR_PacketUplinkAssignment_TLV             descrUplinkPacketChannelAssignment optional,
+  RR_PacketDownlinkAssignment_TLV           descrDownlinkPacketChannelAssignment optional,
+  MultiRateConfiguration_TLV                multiRateConfiguration optional,
+  CipherModeSetting_TV                      cipherModeSetting optional,
+  MobileAllocation_TLV                      mobileAllocationC2 optional,
+  FrequencyList_TLV                         frequencyListC2 optional,
+  RR_DualCarrierPacketDownlinkAssignment_TLV descriptionDualCarrierPacketDownlinkAssignment optional,
+  ChannelDescription3_TV                     channelDescriptionC2 optional,
+  ExtendedTSCSet_TV                          extendedTSCSet       optional
+} with {variant "TAG(cellChannelDescr,                                 elementIdentifier = '10'O;
+                     channelMode,                                      elementIdentifier = '11'O;
+                     frequencyList,                                    elementIdentifier = '12'O;
+                     mobileAllocation,                                 elementIdentifier = '13'O;
+                     descrUplinkPacketChannelAssignment,               elementIdentifier = '15'O;
+                     descrDownlinkPacketChannelAssignment,             elementIdentifier = '16'O;
+                     multiRateConfiguration,                           elementIdentifier = '17'O;
+                     cipherModeSetting,                                elementIdentifier = '1001'B;
+                     mobileAllocationC2,                               elementIdentifier = '18'O;
+                     frequencyListC2,                                  elementIdentifier = '19'O;
+                     descriptionDualCarrierPacketDownlinkAssignment,   elementIdentifier = '20'O;
+                     channelDescriptionC2,                             elementIdentifier = '21'O;
+                     extendedTSCSet,                                   elementIdentifier = '6D'O;)"};
+
+// 44.018/9.1.12f DTM Assignment Failure
+//****************************************************************************
+type record PDU_RRM_DTM_AssignmentFailure_MS_NW
+{
+  BIT8                  messageType,
+  RR_Cause_V            rR_Cause
+}
+
+// 44.018/9.1.12g DTM Information
+//****************************************************************************
+type record PDU_RRM_DTM_Information_NW_MS
+{
+  BIT8                       messageType,
+  RoutingAreaIdentificationV routingAreaIdentification,//24.008   10.5.5.15
+  DTM_InformationDetails_LV  dTM_InformationDetails
+}
+
+// 44.018/9.1.12h DTM Reject
+//****************************************************************************
+type record PDU_RRM_DTM_Reject_NW_MS
+{
+  BIT8                  messageType,
+  WaitIndication_V      waitIndication
+}
+
+// 44.018/9.1.12i DTM Request
+//****************************************************************************
+type record PDU_RRM_DTM_Request_MS_NW
+{
+  BIT8                            messageType,
+  OCT4                            tLLI,
+  ChannelRequestDescription2_LV   channelRequestDescription2
+}
+
+// 44.018/9.1.13 Frequency Redefinition
+//****************************************************************************
+type record PDU_RRM_Frequency_Redefinition_NW_MS
+{
+  BIT8                            messageType,
+  ChannelDescription_V            channelDescription,
+  MobileAllocation_LV             mobileAllocation,
+  StartingTime_V                  startingTime,
+  CellChannelDescription_TV       cellChannelDescr optional,
+  CarrierIndication_TV            carrierIndication optional,
+  MobileAllocation_TLV            mobileAllocationC2 optional,
+  ChannelDescription3_TV          channelDescriptionC2 optional,
+  ExtendedTSCSet_TV               extendedTSCSet       optional
+} with {variant "TAG(cellChannelDescr,           elementIdentifier = '62'O;
+                     carrierIndication,          elementIdentifier = '1001'B;
+                     mobileAllocationC2,         elementIdentifier = '11'O;
+                     channelDescriptionC2,       elementIdentifier = '12'O;
+                     extendedTSCSet,             elementIdentifier = '6D'O;)"};
+
+// 44.018/9.1.13b GPRS Suspension Request
+//****************************************************************************
+type record PDU_RRM_GPRS_SuspensionRequest_MS_NW
+{
+  BIT8                            messageType,
+  OCT4                            tLLI,
+  RoutingAreaIdentificationV      routingAreaIdentification,//24.008   10.5.5.15
+  OCT1                            suspensionCause,
+  ServiceSupport_TV              service_Support optional
+} with {variant "TAG(service_Support,           elementIdentifier = '01'O;)"};
+
+// 44.018/9.1.14 Handover Access
+//****************************************************************************
+// short=> it doesn't included in PDU_RRM !
+type record PDU_RRM_HandoverAccess_NW_MS
+{
+  BIT8 handoverReference
+};
+
+// 44.018/9.1.15 Handover_Command
+//****************************************************************************
+type record PDU_RRM_HandoverCommand_NW_MS
+{
+  BIT8                            messageType,    //'00101011'B,
+  CellDescription_V               cellDescription,
+  ChannelDescription2_V           channelDescription2,
+  HandoverReference_V             handoverReference,
+  PowerCommandAndAccesstype_V     powerCommandAndAccesstype,
+  SynchronizationIndication_TV    synchronizationIndication optional,
+  FrequencyShortList_TV           frequencyShortListAfterTime optional,
+  FrequencyList_TLV               frequencyListAfterTime optional,
+  CellChannelDescription_TV       cellChannelDescription optional,
+  MultislotAllocation_TLV         multislotAllocation optional,
+  ChannelMode_TV                  modeOfChannelSet1 optional,
+  ChannelMode_TV                  modeOfChannelSet2 optional,
+  ChannelMode_TV                  modeOfChannelSet3 optional,
+  ChannelMode_TV                  modeOfChannelSet4 optional,
+  ChannelMode_TV                  modeOfChannelSet5 optional,
+  ChannelMode_TV                  modeOfChannelSet6 optional,
+  ChannelMode_TV                  modeOfChannelSet7 optional,
+  ChannelMode_TV                  modeOfChannelSet8 optional,
+  ChannelDescription_TV           descrOf2ndCh_at   optional,
+  ChannelMode2_TV                 modeOf2ndChannel  optional,
+  FrequencyChannelSequence_TV     frequencyChannelSequence_at  optional,
+  MobileAllocation_TLV            mobileAllocation_at  optional,
+  StartingTime_TV                 startingTime     optional,
+  RealTimeDifference_TLV          timeDifference   optional,
+  TimingAdvance_TV                timingAdvance    optional,
+  FrequencyShortList_TV           frequencyShortListBeforeTime optional,
+  FrequencyList_TLV               frequencyListBeforeTime optional,
+  ChannelDescription2_TV          descrOf1stCh_bt   optional,
+  ChannelDescription_TV           descrOf2ndCh_bt   optional,
+  FrequencyChannelSequence_TV     frequencyChannelSequence_bt    optional,
+  MobileAllocation_TLV            mobileAllocation_bt  optional,
+  CipherModeSetting_TV            cipherModeSetting optional,
+  VGCS_TargetModeIndication_TLV   vGCS_TargetModeIndication optional,
+  MultiRateConfiguration_TLV      multiRateConfiguration optional,
+  DynamicARFCN_Mapping_TLV        dynamicARFCN_Mapping optional,
+  VGCS_Ciphering_Parameters_TLV   vGCS_Ciphering_Parameters optional,
+  DedicatedServiceInformation_TV  dedicatedServiceInformation optional,
+  PLMNIndex_TV                    pLMNIndex                   optional,
+  ExtendedTSCSet_TV               extendedTSCSet_afterTime    optional,
+  ExtendedTSCSet_TV               extendedTSCSet_beforeTime   optional
+} with {variant "TAG(synchronizationIndication,    elementIdentifier = '1101'B;
+                     frequencyShortListAfterTime,  elementIdentifier = '02'O;
+                     frequencyListAfterTime,       elementIdentifier = '05'O;
+                     cellChannelDescription,       elementIdentifier = '62'O;
+                     multislotAllocation,          elementIdentifier = '10'O;
+                     modeOfChannelSet1,            elementIdentifier = '63'O;
+                     modeOfChannelSet2,            elementIdentifier = '11'O;
+                     modeOfChannelSet3,            elementIdentifier = '13'O;
+                     modeOfChannelSet4,            elementIdentifier = '14'O;
+                     modeOfChannelSet5,            elementIdentifier = '15'O;
+                     modeOfChannelSet6,            elementIdentifier = '16'O;
+                     modeOfChannelSet7,            elementIdentifier = '17'O;
+                     modeOfChannelSet8,            elementIdentifier = '18'O;
+                     descrOf2ndCh_at,              elementIdentifier = '64'O;
+                     modeOf2ndChannel,             elementIdentifier = '66'O;
+                     frequencyChannelSequence_at,  elementIdentifier = '69'O;
+                     mobileAllocation_at,          elementIdentifier = '72'O;
+                     startingTime,                 elementIdentifier = '7C'O;
+                     timeDifference,               elementIdentifier = '7B'O;
+                     timingAdvance,                elementIdentifier = '7D'O;
+                     frequencyShortListBeforeTime, elementIdentifier = '12'O;
+                     frequencyListBeforeTime,      elementIdentifier = '19'O;
+                     descrOf2ndCh_bt,              elementIdentifier = '1C'O;
+                     descrOf1stCh_bt,              elementIdentifier = '1D'O;
+                     frequencyChannelSequence_bt,  elementIdentifier = '1E'O;
+                     mobileAllocation_bt,          elementIdentifier = '21'O;
+                     cipherModeSetting,            elementIdentifier = '1001'B;
+                     vGCS_TargetModeIndication,    elementIdentifier = '01'O;
+                     multiRateConfiguration,       elementIdentifier = '03'O;
+                     dynamicARFCN_Mapping,         elementIdentifier = '76'O;
+                     vGCS_Ciphering_Parameters,    elementIdentifier = '04'O;
+                     dedicatedServiceInformation,  elementIdentifier = '51'O;
+                     pLMNIndex,                    elementIdentifier = '1010'B;
+                     extendedTSCSet_afterTime,     elementIdentifier = '6D'O;
+                     extendedTSCSet_beforeTime,    elementIdentifier = '6E'O;)"};
+
+// 44.018/9.1.15a Inter System to UTRAN Handover Command
+//****************************************************************************
+type record PDU_RRM_InterSystemToUTRAN_HandoverCommand_NW_MS
+{
+  BIT8                        messageType,
+  HandoverToUTRANCommand_LV   handoverToUTRANCommand,
+  CNToMSTransparentInformation_TLV cNToMSTransparentInformation optional
+}
+
+// 44.018/9.1.15b Inter System to CDMA 2000 Handover Command
+//****************************************************************************
+type record PDU_RRM_InterSystemToCDMA2000HandoverCommand_NW_MS
+{
+  BIT8                         messageType,
+  HandoverToCDMA2000Command_LV handoverToCDMA2000Command
+}
+
+// 44.018/9.1.15c Handover To GERAN Iu Mode Command
+//****************************************************************************
+// Note : Message Type is not defined in section 10.4, this message can not be encoded/decoded
+type record PDU_RRM_HandoverToGERAN_IuModeCommand_NW_MS
+{
+  BIT8                            messageType,
+  RadioBearerReconfiguration_LV   radioBearerReconfiguration
+}
+
+// 44.018/9.1.15d Inter System to E-UTRAN Handover Command
+//****************************************************************************
+type record PDU_RRM_InterSystemToEUTRAN_HandoverCommand_NW_MS
+{
+  BIT8                         messageType,
+  DL_DCCH_Message_LV           dL_DCCH_Message,
+  CNToMSTransparentInformation_TLV cNToMSTransparentInformation
+}
+
+// 44.018/9.1.16 Handover Complete
+//****************************************************************************
+type record PDU_RRM_HandoverComplete_MS_NW
+{
+  BIT8                               messageType,    //'00101100'B;
+  RR_Cause_V                         rRCause,
+  MobileTimeDifference_TLV           mobileObsservedTimeDiff optional,
+  MobileTimeDifferenceHyperframe_TLV mobileTimeDifferenceHyperframe optional
+} with {variant "TAG(mobileObsservedTimeDiff,       elementIdentifier = '77'O;
+                     mobileTimeDifferenceHyperframe,elementIdentifier = '67'O;)"};
+
+// 44.018/9.1.17 Handover Failure
+//****************************************************************************
+type record PDU_RRM_HandoverFailure_MS_NW
+{
+  BIT8                        messageType,    //'00101000'B;
+  RR_Cause_V                  rRCause,
+  PS_Cause_TV                 pSCause optional
+} with {variant "TAG(pSCause,elementIdentifier = '1001'B )"};
+
+// 44.018/9.1.18 Immediate Assignment
+//****************************************************************************
+type record PDU_RRM_ImmediateAssignment_NW_MS
+{
+  // L2 pseudo length is handled automatically by encoder/decoder
+  BIT8                        messageType,
+  PageMode_V                  pageMode,
+  DedicatedModeOrTBF_V        dedicatedModeOrTBF,
+  ChannelDescription_V        channelDescription optional,
+  OCT3                        packetChannelDescription optional,
+  RequestReference_V          requestReference,
+  OCT1                        timingAdvance,
+  MobileAllocation_LV         mobileAllocation,
+  StartingTime_TV             startingTime optional,
+  octetstring                 iA_RestOctets length (0..11) optional,
+  ExtendedTSCSet_TV           extendedTSCSet    optional
+} with {variant (channelDescription)   "PRESENCE(dedicatedModeOrTBF.tMA_dL_tD = '000'B)";
+        variant (packetChannelDescription)   "PRESENCE(dedicatedModeOrTBF.tMA_dL_tD = '001'B,
+                                                       dedicatedModeOrTBF.tMA_dL_tD = '011'B,
+                                                       dedicatedModeOrTBF.tMA_dL_tD = '101'B, //???
+                                                       dedicatedModeOrTBF.tMA_dL_tD = '111'B)"; //???
+       variant "TAG(startingTime,       elementIdentifier = '7C'O;
+                    extendedTSCSet,     elementIdentifier = '6D'O;)";};
+
+// 44.018/9.1.18b Immediate Packet Assignment
+//****************************************************************************
+type record PDU_RRM_ImmediatePacketAssignment_NW_MS
+{
+  BIT8                        messageType,
+  PageMode_V                  pageMode,
+  FeatureIndicator_V          featureIndicator,
+  octetstring                 iPA_RestOctets length (19)
+};
+
+// 44.018/9.1.19 Immediate Assignment Extended
+//****************************************************************************
+type record PDU_RRM_ImmediateAssignmentExtended_NW_MS
+{
+ // L2 pseudo length is handled automatically by encoder/decoder
+ BIT8                        messageType,
+ PageMode_V                  pageMode,
+ FeatureIndicator_V          featureIndicator,
+ ChannelDescription_V        channelDescription1,
+ RequestReference_V          requestReference1,
+ OCT1                        timingAdvance1,
+ ChannelDescription_V        channelDescription2,
+ RequestReference_V          requestReference2,
+ OCT1                        timingAdvance2,
+ MobileAllocation_LV         mobileAllocation,
+ StartingTime_TV             startingTime optional,
+ octetstring                 iAX_RestOctets length (0..4) optional
+} with {  variant "TAG(startingTime,elementIdentifier = '7C'O )";}
+
+// 44.018/9.1.20 Immediate Assignment Reject
+//****************************************************************************
+type record PDU_RRM_ImmediateAssignmentReject_NW_MS
+{
+ // L2 pseudo length is handled automatically by encoder/decoder
+ BIT8                        messageType,
+ PageMode_V                  pageMode,
+ FeatureIndicator_V          featureIndicator,
+ RequestReference_V          requestReference1,
+ WaitIndication_V            waitIndication1,
+ RequestReference_V          requestReference2,
+ WaitIndication_V            waitIndication2,
+ RequestReference_V          requestReference3,
+ WaitIndication_V            waitIndication3,
+ RequestReference_V          requestReference4,
+ WaitIndication_V            waitIndication4,
+ octetstring                 iAR_RestOctets length (3)
+}
+
+// 44.018/9.1.21 Measurement Report
+//****************************************************************************
+// SACCH message, not implemented
+
+// 44.018/9.1.21a Notification/FACCH
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.21b Notification/NCH
+//****************************************************************************
+// NCH message, not implemented
+
+// 44.018/9.1.21d Notification Response
+//****************************************************************************
+type record PDU_RRM_NotificationResponse_MS_NW
+{
+  BIT8                                        messageType,
+  MobileStationClassmark2_LV                  mobileStationClassmark,
+  MobileIdentityLV                            mobileIdentity,
+  DescriptiveGroupOrBroadcastCallReference_V  groupOrBroadcastCallReference
+}
+
+// 44.018/9.1.21f Packet Assignment
+//****************************************************************************
+// FACCH message, not implemented
+
+// 44.018/9.1.21g Packet Notification
+//****************************************************************************
+type record PDU_RRM_PacketNotification_NW_MS
+{
+  BIT8                                        messageType,
+  TMSIP_TMSI_TV                               p_TMSI optional,
+  MobileIdentityTLV                           mobileIdentity optional
+} with { variant "TAG ( p_TMSI,              elementIdentifier = '10'O;
+                        mobileIdentity,      elementIdentifier = '0010001'B;)"};
+
+// 44.018/9.1.21h VBS/VGCS Reconfigure
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.21i VBS/VGCS Reconfigure2
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.21j MBMS Announcement
+//****************************************************************************
+type record MBMS_Announcement_NW_MS
+{
+  BIT8                                        messageType,
+  TemporaryMobileGroupIDLV                    tMGI,
+  MBMS_SessionIdentity_TV                     mBMS_SessionIdentity optional,
+  MPRACH_Description_TLV                      mBMS_CountingChannelDescription optional,
+  MBMS_ptm_ChannelDescription_TLV             mBMS_ptm_ChannelDescription optional,
+  MBMS_SessionParameterList_TLV               mBMS_SessionParameterList optional,
+  RestrictionTimer_TV                         restrictionTimer optional
+} with { variant "TAG ( mBMS_SessionIdentity,              elementIdentifier = '01'O;
+                        mBMS_CountingChannelDescription,   elementIdentifier = '02'O;
+                        mBMS_ptm_ChannelDescription,       elementIdentifier = '03'O;
+                        mBMS_SessionParameterList,         elementIdentifier = '04'O;
+                        restrictionTimer,                  elementIdentifier = '05'O;)"};
+
+ // 44.018/9.1.22 Paging Request type 1
+//****************************************************************************
+type record PDU_RRM_PagingReq_Type1_NW_MS
+{
+  // L2 pseudo length is handled automatically by encoder/decoder
+  BIT8              messageType, // '00100001'B;
+  PageMode_V        pageMode,
+  ChannelNeeded_V   channelNeeded,
+  MobileIdentityLV mobileIdentity1,
+  MobileIdentityTLV mobileIdentity2 optional,
+  P1RestOctets      p1RestOctets
+} with { variant "TAG ( mobileIdentity2, elementIdentifier = '0010111'B )" };   //'17'O
+
+// 44.018/9.1.23 Paging Request type 2
+//****************************************************************************
+type record PDU_RRM_PagingReq_Type2_NW_MS
+{
+  // L2 pseudo length is handled automatically by encoder/decoder
+  BIT8                messageType, // '00100010'B
+  PageMode_V          pageMode,
+  ChannelNeeded_V     channelNeeded,
+  TMSIP_TMSI_V        mobileIdentity1,
+  TMSIP_TMSI_V        mobileIdentity2,
+  MobileIdentityTLV   mobileIdentity3 optional,
+  P2RestOctets        p2RestOctets
+} with { variant "TAG ( mobileIdentity3, elementIdentifier = '0010111'B )" }; //'17'O
+
+// 44.018/9.1.24 Paging Request type 3
+//****************************************************************************
+type record PDU_RRM_PagingReq_Type3_NW_MS
+{
+  // L2 pseudo length is handled automatically by encoder/decoder
+  BIT8                messageType, // '00100100'B;
+  PageMode_V          pageMode,
+  ChannelNeeded_V     channelNeeded,
+  TMSIP_TMSI_V        mobileIdentity1,
+  TMSIP_TMSI_V        mobileIdentity2,
+  TMSIP_TMSI_V        mobileIdentity3,
+  TMSIP_TMSI_V        mobileIdentity4,
+  P3RestOctets        p3RestOctets
+} with { variant " " };
+
+// 44.018/9.1.25 Paging Response
+//****************************************************************************
+type record PDU_RRM_PagingResponse_MS_NW
+{
+  BIT8                        messageType, // '00100111'B = '27'O Response  Paging
+  CipheringKeySequenceNumberV cipheringKeySequenceNumber,
+  BIT4                        spare1_4,    //   '0000'B
+  MobileStationClassmark2_LV  mobileStationClassmark,
+  MobileIdentityLV            mobileIdentity,
+  AdditionalUpdateParameterTV additionalUpdateParameters optional
+};
+
+// 44.018/9.1.26 Partial Release
+//****************************************************************************
+type record PDU_RRM_PartialRelease_NW_MS
+{
+  BIT8                  messageType,   //'00001010'B;
+  ChannelDescription_V  channelDescription
+};
+
+// 44.018/9.1.27 Partial Release Complete
+//****************************************************************************
+type record PDU_RRM_PartialReleaseComplete_MS_NW
+{
+  BIT8                  messageType   //  '00001111'B;
+};
+
+// 44.018/9.1.28 Physical Information
+//****************************************************************************
+type record PDU_RRM_PhysicalInformation_NW_MS
+{
+  BIT8  messageType,   //'00101101'B;
+  OCT1  timingAdvance
+};
+
+// 44.018/9.1.29 RR Status
+//****************************************************************************
+type record PDU_RRM_RR_Status
+{
+  BIT8        messageType,   //
+  RR_Cause_V  rR_Cause
+};
+
+// 44.018/9.1.30a Synchronization Channel Information
+//****************************************************************************
+// SCH message, not implemented
+
+
+// 44.018/9.1.31 - 9.1.43o System Information messages
+//****************************************************************************
+//BCCH and SACCH messages, not implemented
+
+// 44.018/9.1.44 Talker Indication
+//****************************************************************************
+type record PDU_RRM_TalkerIndication_MS_NW
+{
+  BIT8                          messageType,
+  MobileStationClassmark2_LV    mobileStationClassmark,
+  MobileIdentityLV              mobileIdentity,
+  CipheringKeySequenceNumberTV  cipheringKeySequenceNumber optional
+} with { variant "TAG (cipheringKeySequenceNumber, elementIdentifier = '1011'B )" }; //B
+
+// 44.018/9.1.45 Uplink Access
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.46 Uplink Busy
+//****************************************************************************
+type record  PDU_RRM_UplinkBusy_NW_MS
+{
+  BIT8                          messageType,
+  TalkerPriorityStatus_TLV      talkerPriorityStatus optional,
+  Token_TV                      token optional,
+  TalkerIdentity_TLV            talkerIdentity optional,
+  UplinkAccessIndication_TV      uplinkAccessIndication optional
+} with { variant "TAG ( talkerPriorityStatus,            elementIdentifier = '31'O;
+                        token,                           elementIdentifier = '32'O;
+                        talkerIdentity,                  elementIdentifier = '33'O;
+                        uplinkAccessIndication,          elementIdentifier = '1000'B;)"}; // '8-'O
+
+// 44.018/9.1.47 Uplink Free
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.48 Uplink Release
+//****************************************************************************
+type record  PDU_RRM_UplinkRelease
+{
+  BIT8                      messageType,
+  RR_Cause_V                rR_Cause
+}
+
+// 44.018/9.1.49 VGCS Uplink Grant
+//****************************************************************************
+type record  PDU_RRM_VGCS_UplinkGrant_NW_MS
+{
+  BIT8                      messageType,
+  RequestReference_V        requestReference,
+  OCT1                      timingAdvance
+}
+
+// 44.018/9.1.49a VGCS Additional Information
+//****************************************************************************
+// No table definition, not implemented
+
+// 44.018/9.1.49b VGCS SMS Information
+//****************************************************************************
+// No table definition,SACCH message, not implemented
+
+// 44.018/9.1.50 System Information
+//****************************************************************************
+// No table definition, SACCH message, not implemented
+
+// 44.018/9.1.51 Extended Measurement Order
+//****************************************************************************
+// SACCH message, not implemented
+
+// 44.018/9.1.52 Extended Measurement Order
+//****************************************************************************
+// SACCH message, not implemented
+
+// 44.018/9.1.53 Application Information
+//****************************************************************************
+type record  PDU_RRM_ApplicationInformation
+{
+  BIT8                      messageType,
+  BIT4                      aPDU_ID,
+  APDU_Flags_V              aPDU_Flags,
+  APDU_Data_LV              aPDU_Data
+}
+
+// 44.018/9.1.54 Measurement Information
+//****************************************************************************
+// No table definition, SACCH message, not implemented
+
+// 44.018/9.1.55 Enhanced Measurement Report
+//****************************************************************************
+// No table definition, SACCH message, not implemented
+
+// 44.018/9.1.56
+//****************************************************************************
+type record  PDU_RRM_ServiceInformationMessage_MS_NW
+{
+  BIT8                       messageType,
+  OCT4                       tLLI,
+  RoutingAreaIdentificationV routingAreaIdentification,//24.008   10.5.5.15
+  ServiceSupport_V           serviceSupport
+}
+
+//****************************************************************************
+// 9.1 Messages for Radio Resources management
+// Table 9.1.1 Organized by Table 10.4.1
+//****************************************************************************
+type union PDU_RRM_MS_NW
+{
+  //Ciphering
+  PDU_RRM_CipheringModeComplete_MS_NW          cipheringModeComplete,
+  //Config change
+  PDU_RRM_ConfigurationChangeAck_MS_NW         configurationChangeAck,
+  PDU_RRM_ConfigurationChangeRej_MS_NW         configurationChangeRej,
+  //Handover
+  PDU_RRM_AssignmentComplete_MS_NW             assignmentComplete,
+  PDU_RRM_AssignmentFailure_MS_NW              assignmentFailure,
+  PDU_RRM_HandoverComplete_MS_NW               handoverComplete,
+  PDU_RRM_HandoverFailure_MS_NW                handoverFailure,
+  //rel:
+  PDU_RRM_PartialReleaseComplete_MS_NW         partialReleaseComplete,
+  //Paging
+  PDU_RRM_PagingResponse_MS_NW                 pagingResponse,
+  PDU_RRM_NotificationResponse_MS_NW           notificationResponse,
+  //Misc
+  PDU_RRM_RR_Status                            rR_Status,
+  PDU_RRM_ChannelModeModifyAck_MS_NW           channelModeModifyAck,
+  PDU_RRM_ClassmarkChange_MS_NW                classmarkChange,
+  PDU_RRM_GPRS_SuspensionRequest_MS_NW         gPRS_suspensionRequest,
+  PDU_RRM_ServiceInformationMessage_MS_NW      serviceInformationMessage,
+  //VGCS
+  PDU_RRM_UplinkRelease                        uplinkRelease,
+  PDU_RRM_TalkerIndication_MS_NW               talkerIndication,
+  //Application
+  PDU_RRM_ApplicationInformation               applicationInformation,
+  //DTM
+  PDU_RRM_DTM_AssignmentFailure_MS_NW          dTM_AssignmentFailure,
+  PDU_RRM_DTM_Request_MS_NW                    dTM_Request,
+  //Inter RAT
+  PDU_RRM_UTRAN_ClassmarkChange_MS_NW          uTRAN_ClassmarkChange,
+  PDU_RRM_CDMA2000_ClassmarkChange_MS_NW       cDMA2000_ClassmarkChange,
+  PDU_RRM_GERAN_IU_ModeClassmarkChange_MS_NW   gERAN_IU_ModeClassmarkChange
+} with { variant "TAG (
+                cipheringModeComplete,        messageType = '00110010'B;
+                configurationChangeAck,       messageType = '00110001'B;
+                configurationChangeRej,       messageType = '00110011'B;
+                assignmentComplete,           messageType = '00101001'B;
+                assignmentFailure,            messageType = '00101111'B;
+                handoverComplete,             messageType = '00101100'B;
+                handoverFailure,              messageType = '00101000'B;
+                partialReleaseComplete,       messageType = '00001111'B;
+                pagingResponse,               messageType = '00100111'B;
+                notificationResponse,         messageType = '00100110'B;
+                rR_Status,                    messageType = '00010010'B;
+                channelModeModifyAck,         messageType = '00010111'B;
+                classmarkChange,              messageType = '00010110'B;
+                gPRS_suspensionRequest,       messageType = '00110100'B;
+                serviceInformationMessage,    messageType = '00110110'B;
+                uplinkRelease,                messageType = '00001110'B;
+                talkerIndication,             messageType = '00010001'B;
+                applicationInformation,       messageType = '00111000'B;
+                dTM_AssignmentFailure,        messageType = '01001000'B;
+                dTM_Request,                  messageType = '01001010'B;
+                uTRAN_ClassmarkChange,        messageType = '01100000'B;
+                cDMA2000_ClassmarkChange,     messageType = '01100010'B;
+                gERAN_IU_ModeClassmarkChange, messageType = '01100101'B;)"};
+
+type union PDU_RRM_NW_MS
+{
+  //Channel establishment
+  PDU_RRM_AdditionalAssignment_NW_MS                  additionalAssignment,
+  PDU_RRM_ImmediatePacketAssignment_NW_MS             immediatePacketAssignment,
+  //Ciphering
+  PDU_RRM_CipheringModeCommand_NW_MS                  cipheringModeCommand,
+  //Config change
+  PDU_RRM_ConfigurationChangeCommand_NW_MS            configurationChangeCommand,
+  //Handover
+  PDU_RRM_AssignmentCommand_NW_MS                     assignmentCommand,
+  PDU_RRM_HandoverCommand_NW_MS                       handoverCommand,
+  PDU_RRM_PhysicalInformation_NW_MS                   physicalInformation,
+  //Channel release
+  PDU_RRM_ChannelRelease_NW_MS                        channelRelease,
+  PDU_RRM_PartialRelease_NW_MS                        partialRelease,
+  //Paging
+  PDU_RRM_PagingReq_Type1_NW_MS                       pagingReq_Type1,
+  PDU_RRM_PagingReq_Type2_NW_MS                       pagingReq_Type2,
+  PDU_RRM_PagingReq_Type3_NW_MS                       pagingReq_Type3,
+  //Misc
+  PDU_RRM_ChannelModeModify_NW_MS                     channelModeModify,
+  PDU_RRM_RR_Status                                   rR_Status,
+  PDU_RRM_Frequency_Redefinition_NW_MS                frequency_Redefinition,
+  PDU_RRM_ClassmarkEnquiry_NW_MS                      classmarkEnquiry,
+  MBMS_Announcement_NW_MS                             mBMS_Announcement,
+  //VGCS
+  PDU_RRM_VGCS_UplinkGrant_NW_MS                      vGCS_UplinkGrant,
+  PDU_RRM_UplinkRelease                               uplinkRelease,
+  PDU_RRM_UplinkBusy_NW_MS                            uplinkBusy,
+  //Application
+  PDU_RRM_ApplicationInformation                      applicationInformation,
+  //DTM
+  PDU_RRM_DTM_AssignmentCommand_NW_MS                 dTM_AssignmentCommand,
+  PDU_RRM_DTM_Information_NW_MS                       dTM_Information,
+  PDU_RRM_DTM_Reject_NW_MS                            dTM_Reject,
+  PDU_RRM_PacketNotification_NW_MS                    packetNotification,
+  //Inter RAT
+  PDU_RRM_InterSystemToUTRAN_HandoverCommand_NW_MS    interSystemToUTRAN_HandoverCommand,
+  PDU_RRM_InterSystemToCDMA2000HandoverCommand_NW_MS  interSystemToCDMA2000HandoverCommand,
+  PDU_RRM_InterSystemToEUTRAN_HandoverCommand_NW_MS   interSystemToEUTRAN_HandoverCommand
+} with { variant "TAG (
+                additionalAssignment,                   messageType = '00111011'B;
+                immediatePacketAssignment,              messageType = '01101001'B;
+                cipheringModeCommand,                   messageType = '00110101'B;
+                configurationChangeCommand,             messageType = '00110000'B;
+                assignmentCommand,                      messageType = '00101110'B;
+                handoverCommand,                        messageType = '00101011'B;
+                physicalInformation,                    messageType = '00101101'B;
+                channelRelease,                         messageType = '00001101'B;
+                partialRelease,                         messageType = '00001010'B;
+                pagingReq_Type1,                        messageType = '00100001'B;
+                pagingReq_Type2,                        messageType = '00100010'B;
+                pagingReq_Type3,                        messageType = '00100100'B;
+                channelModeModify,                      messageType = '00010000'B;
+                rR_Status,                              messageType = '00010010'B;
+                frequency_Redefinition,                 messageType = '00010100'B;
+                classmarkEnquiry,                       messageType = '00010011'B;
+                mBMS_Announcement,                      messageType = '00010110'B;
+                vGCS_UplinkGrant,                       messageType = '00001001'B;
+                uplinkRelease,                          messageType = '00001110'B;
+                uplinkBusy,                             messageType = '00101010'B;
+                applicationInformation,                 messageType = '00111000'B;
+                dTM_AssignmentCommand,                  messageType = '01001100'B;
+                dTM_Information,                        messageType = '01001101'B;
+                dTM_Reject,                             messageType = '01001001'B;
+                packetNotification,                     messageType = '01001110'B;
+                interSystemToUTRAN_HandoverCommand,     messageType = '01100011'B;
+                interSystemToCDMA2000HandoverCommand,   messageType = '01100100'B;
+                interSystemToUTRAN_HandoverCommand,     messageType = '01100110'B;
+)"};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_SMS_Types.ttcn b/src/MobileL3_SMS_Types.ttcn
new file mode 100644
index 0000000..16da8d2
--- /dev/null
+++ b/src/MobileL3_SMS_Types.ttcn
@@ -0,0 +1,764 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_SMS_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0, 24.011 v13.0.0, 23.040 v13.0.0
+
+module MobileL3_SMS_Types
+{
+// beginning of module
+
+// This module contains the SMS Messages defined in 24.011 v13.0.0,
+// 23.040 v13.0.0 and 23.038 v7.0.0
+// This includes the C-PDUs, R-PDUs and T-PDUs with attributes for
+// RAW encoding/decoding.
+
+
+import from General_Types all;
+
+external function enc_TPDU_RP_DATA_MS_SGSN_fast(in TPDU_RP_DATA_MS_SGSN pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_DATA_MS_SGSN_backtrack(in octetstring stream, out TPDU_RP_DATA_MS_SGSN pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_TPDU_RP_DATA_SGSN_MS_fast(in TPDU_RP_DATA_SGSN_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_DATA_SGSN_MS_backtrack(in octetstring stream, out TPDU_RP_DATA_SGSN_MS pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_TPDU_RP_ACK_MS_SGSN_fast(in TPDU_RP_ACK_MS_SGSN pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_ACK_MS_SGSN_backtrack(in octetstring stream, out TPDU_RP_ACK_MS_SGSN pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_TPDU_RP_ACK_SGSN_MS_fast(in TPDU_RP_ACK_SGSN_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_ACK_SGSN_MS_backtrack(in octetstring stream, out TPDU_RP_ACK_SGSN_MS pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_TPDU_RP_ERROR_MS_SGSN_fast(in TPDU_RP_ERROR_MS_SGSN pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_ERROR_MS_SGSN_backtrack(in octetstring stream, out TPDU_RP_ERROR_MS_SGSN pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_TPDU_RP_ERROR_SGSN_MS_fast(in TPDU_RP_ERROR_SGSN_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_TPDU_RP_ERROR_SGSN_MS_backtrack(in octetstring stream, out TPDU_RP_ERROR_SGSN_MS pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_RPDU_SGSN_MS_fast(in RPDU_SGSN_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_RPDU_SGSN_MS_backtrack(in octetstring stream, out RPDU_SGSN_MS pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_RPDU_MS_SGSN_fast(in RPDU_MS_SGSN pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_RPDU_MS_SGSN_backtrack(in octetstring stream, out RPDU_MS_SGSN pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+//==============================================================================
+// 24.011 7.2 CP-MESSAGES (CP_DATA, CP_ACK, CP_ERROR)
+//==============================================================================
+
+// 7.2
+type union L3_SMS_MS_SGSN
+{
+  CP_DATA_MS_SGSN    cP_DATA,
+  CP_ACK             cP_ACK,
+  CP_ERROR           cP_ERROR
+};
+
+// 7.2
+type union L3_SMS_SGSN_MS
+{
+  CP_DATA_SGSN_MS    cP_DATA,
+  CP_ACK             cP_ACK,
+  CP_ERROR           cP_ERROR
+};
+
+// 7.2.1 CP-DATA
+type record CP_DATA_MS_SGSN
+{
+  BIT8                         cP_messageType,
+  CP_User_DataLV_MS_SGSN       cP_User_Data
+} with { variant "PRESENCE(cP_messageType = '00000001'B)"; };
+
+// 7.2.1 CP-DATA
+type record CP_DATA_SGSN_MS
+{
+  BIT8                         cP_messageType,
+  CP_User_DataLV_SGSN_MS       cP_User_Data
+} with { variant "PRESENCE(cP_messageType = '00000001'B)"; };
+
+// 7.2.2 CP-ACK
+type record CP_ACK
+{
+  BIT8                         cP_messageType
+} with { variant "PRESENCE(cP_messageType = '00000100'B)"; };
+
+// 7.2.3 CP-ERROR
+type record CP_ERROR
+{
+  BIT8                         cP_messageType,
+  CP_CauseV                    cP_Cause
+} with { variant "PRESENCE(cP_messageType = '00010000'B)"; };
+
+// 7.2.1 CP-DATA
+type record CP_User_DataLV_SGSN_MS
+{
+  LIN1               lengthIndicator,
+  RPDU_SGSN_MS       cP_RPDU
+} with { variant (lengthIndicator) "LENGTHTO (cP_RPDU)"};
+
+// 7.2.1 CP-DATA
+type record CP_User_DataLV_MS_SGSN
+{
+  LIN1               lengthIndicator,
+  RPDU_MS_SGSN       cP_RPDU
+} with { variant (lengthIndicator) "LENGTHTO (cP_RPDU)"};
+
+// 7.2.3 CP-ERROR
+type record CP_CauseV
+{
+  OCT1               causeValue
+}
+
+
+//=============================================================================
+//  END OF CP-MESSAGES
+//=============================================================================
+
+
+//=============================================================================
+// 24.011  7.3  RP-MESSAGES (RP-DATA, RP-SMMA, RP-ACK, RP-ERROR)
+//=============================================================================
+// 7.3
+type union RPDU_SGSN_MS
+{
+  RP_DATA_SGSN_MS              rP_DATA_SGSN_MS,
+  RP_ACK_SGSN_MS               rP_ACK_SGSN_MS,
+  RP_ERROR_SGSN_MS             rP_ERROR_SGSN_MS,
+  RP_SMMA                      rP_SMMA // RP_SMMA included for negative testing in SGSN_MS direction
+} with {
+  variant  "TAG
+  (
+   rP_DATA_SGSN_MS,  rP_MTI = '001'B;
+   rP_ACK_SGSN_MS,   rP_MTI = '011'B;
+   rP_ERROR_SGSN_MS, rP_MTI = '101'B;
+   rP_SMMA,          rP_MTI = '110'B;
+  )"
+};
+
+// 7.3
+type union RPDU_MS_SGSN
+{
+  RP_DATA_MS_SGSN              rP_DATA_MS_SGSN,
+  RP_ACK_MS_SGSN               rP_ACK_MS_SGSN,
+  RP_ERROR_MS_SGSN             rP_ERROR_MS_SGSN,
+  RP_SMMA                      rP_SMMA
+} with {
+  variant  "TAG
+  (
+   rP_DATA_MS_SGSN,  rP_MTI = '000'B;
+   rP_ACK_MS_SGSN,   rP_MTI = '010'B;
+   rP_ERROR_MS_SGSN, rP_MTI = '100'B;
+   rP_SMMA,          rP_MTI = '110'B;
+  )"
+};
+
+// 7.3.1.2 RP-DATA (Mobile Station to Network)
+type record RP_DATA_MS_SGSN
+{
+  BIT3                         rP_MTI,
+  BIT5                         rP_Spare,  // '00000'B
+  OCT1                         rP_MessageReference,
+  RP_OriginatorAddressLV       rP_OriginatorAddress,
+  RP_DestinationAddressLV      rP_DestinationAddress,
+  RP_DATA_User_DataLV_MS_SGSN  rP_User_Data
+} with { variant "PRESENCE(rP_MTI = '000'B)"; };
+
+// 7.3.1.1 RP-DATA (Network to Mobile Station)
+type record RP_DATA_SGSN_MS
+{
+  BIT3                         rP_MTI,
+  BIT5                         rP_Spare,  // '00000'B
+  OCT1                         rP_MessageReference,
+  RP_OriginatorAddressLV       rP_OriginatorAddress,
+  RP_DestinationAddressLV      rP_DestinationAddress,
+  RP_DATA_User_DataLV_SGSN_MS  rP_User_Data
+} with { variant "PRESENCE(rP_MTI = '001'B)"; };
+
+// 7.3.2 RP-SMMA
+type record RP_SMMA
+{
+  BIT3                         rP_MTI,
+  BIT5                         rP_Spare,   // '00000'B
+  OCT1                         rP_MessageReference
+} with { variant "PRESENCE(rP_MTI = '110'B)"; };
+
+// 7.3.3 RP-ACK
+type record RP_ACK_SGSN_MS
+{
+  BIT3                         rP_MTI,
+  BIT5                         rP_Spare,   // '00000'B
+  OCT1                         rP_MessageReference,
+  RP_ACK_User_DataTLV_SGSN_MS  rP_User_Data     optional
+} with { variant "PRESENCE(rP_MTI = '011'B)"; };
+
+// 7.3.3 RP-ACK
+type record RP_ACK_MS_SGSN
+{
+  BIT3                         rP_MTI,
+  BIT5                         rP_Spare,   // '00000'B
+  OCT1                         rP_MessageReference,
+  RP_ACK_User_DataTLV_MS_SGSN  rP_User_Data     optional
+} with { variant "PRESENCE(rP_MTI = '010'B)"; };
+
+// 7.3.4 RP-ERROR
+type record RP_ERROR_SGSN_MS
+{
+  BIT3                                   rP_MTI,
+  BIT5                                   rP_Spare,   // '00000'B
+  OCT1                                   rP_Message_Reference,
+  RP_CauseLV                             rP_CauseLV,
+  RP_ERROR_User_DataTLV_SGSN_MS          rP_User_Data    optional
+} with { variant "PRESENCE(rP_MTI = '101'B)"; };
+
+// 7.3.4 RP-ERROR
+type record RP_ERROR_MS_SGSN
+{
+  BIT3                                    rP_MTI,
+  BIT5                                    rP_Spare,   // '00000'B
+  OCT1                                    rP_Message_Reference,
+  RP_CauseLV                              rP_CauseLV,
+  RP_ERROR_User_DataTLV_MS_SGSN           rP_User_Data     optional
+} with { variant "PRESENCE(rP_MTI = '100'B)"; };
+
+// 8.2.5.1 Originator address element
+type record RP_OriginatorAddressLV
+{
+  LIN1                                 lengthIndicator,
+  RP_NumberingPlan_and_NumberDigits    rP_OriginatorAddress optional
+} with {variant(lengthIndicator)"LENGTHTO (rP_OriginatorAddress)"};
+
+
+// 8.2.5.2 Destination address element
+type record RP_DestinationAddressLV
+{
+  LIN1                                lengthIndicator,
+  RP_NumberingPlan_and_NumberDigits   rP_DestinationAddress optional
+} with { variant (lengthIndicator)"LENGTHTO (rP_DestinationAddress)"};
+
+// 8.2.5.1 & 8.2.5.2 Originator address element
+type record RP_NumberingPlan_and_NumberDigits
+{
+  BIT4                         rP_NumberingPlanIdentification,
+  BIT3                         rP_TypeOfNumber,
+  BIT1                         rP_Ext,
+  hexstring                    rP_NumberDigits  length (1..20)
+} with { variant "PADDING(yes)";
+         variant "PADDING_PATTERN('1111'B)"};
+
+
+// 8.2.5.4 RP-Cause element
+type record RP_CauseLV
+{
+  LIN1               rP_LengthIndicator,
+  RP_CauseV          rP_CauseV,
+  OCT1               rP_diagnisticField   optional
+} with { variant (rP_LengthIndicator)"LENGTHTO (rP_CauseV,rP_diagnisticField)"};
+
+// 8.2.5.4 RP-Cause
+type record RP_CauseV
+{
+  BIT7               causeValue,
+  BIT1               ext     //'0'B
+}
+
+// 8.2.5.3 RP-User data element
+type record RP_DATA_User_DataLV_SGSN_MS
+{
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_DATA_SGSN_MS         rP_TPDU
+} with { variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+// 8.2.5.3 RP-User data element
+type record RP_DATA_User_DataLV_MS_SGSN
+{
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_DATA_MS_SGSN         rP_TPDU
+} with { variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+// 8.2.5.3 RP-User data element
+type record RP_ACK_User_DataTLV_SGSN_MS
+{
+  BIT1                         rP_Spare,
+  BIT7                         rP_UserDataIEI,
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_ACK_SGSN_MS          rP_TPDU
+} with { variant "PRESENCE(rP_UserDataIEI = '1000001'B)";
+         variant (rP_Spare,rP_UserDataIEI)  "FIELDORDER(msb)";
+         variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+// 8.2.5.3 RP-User data element
+type record RP_ACK_User_DataTLV_MS_SGSN
+{
+  BIT1                         rP_Spare,
+  BIT7                         rP_UserDataIEI,
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_ACK_MS_SGSN          rP_TPDU
+} with { variant "PRESENCE(rP_UserDataIEI = '1000001'B)";
+         variant (rP_Spare,rP_UserDataIEI)  "FIELDORDER(msb)";
+         variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+// 8.2.5.3 RP-User data element
+type record RP_ERROR_User_DataTLV_SGSN_MS
+{
+  BIT1                         rP_Spare,
+  BIT7                         rP_UserDataIEI,
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_ERROR_SGSN_MS        rP_TPDU
+} with { variant "PRESENCE(rP_UserDataIEI = '1000001'B)";
+         variant (rP_Spare,rP_UserDataIEI)  "FIELDORDER(msb)";
+         variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+// 8.2.5.3 RP-User data element
+type record RP_ERROR_User_DataTLV_MS_SGSN
+{
+  BIT1                         rP_Spare,
+  BIT7                         rP_UserDataIEI,
+  LIN1                         rP_LengthIndicator,
+  TPDU_RP_ERROR_MS_SGSN        rP_TPDU
+} with { variant "PRESENCE(rP_UserDataIEI = '1000001'B)";
+         variant (rP_Spare,rP_UserDataIEI)  "FIELDORDER(msb)";
+         variant (rP_LengthIndicator) "LENGTHTO (rP_TPDU)"};
+
+
+type union TPDU_RP_DATA_MS_SGSN
+{
+  SMS_SUBMIT                   sMS_SUBMIT,
+  SMS_COMMAND                  sMS_COMMAND
+} with {
+  variant  "TAG
+  (
+   sMS_SUBMIT,  tP_MTI =  '01'B;
+   sMS_COMMAND, tP_MTI =  '10'B;
+  )"
+};
+
+
+type union TPDU_RP_DATA_SGSN_MS
+{
+  SMS_DELIVER                  sMS_DELIVER,
+  SMS_STATUS_REPORT            sMS_STATUS_REPORT
+} with {
+  variant  "TAG
+  (
+   sMS_DELIVER,  tP_MTI =  '00'B;
+   sMS_STATUS_REPORT, tP_MTI =  '10'B;
+  )"
+};
+
+
+type union TPDU_RP_ACK_MS_SGSN
+{
+  SMS_DELIVER_REPORT_in_RP_ACK           sMS_DELIVER_REPORT
+} with {
+  variant  "TAG
+  (
+   sMS_DELIVER_REPORT,  tP_MTI =  '00'B;
+  )"
+};
+
+
+type union TPDU_RP_ACK_SGSN_MS
+{
+  SMS_SUBMIT_REPORT_in_RP_ACK            sMS_SUBMIT_REPORT
+} with {
+  variant  "TAG
+  (
+   sMS_SUBMIT_REPORT,  tP_MTI =  '01'B;
+  )"
+};
+
+
+type union TPDU_RP_ERROR_MS_SGSN
+{
+  SMS_DELIVER_REPORT_in_RP_ERROR         sMS_DELIVER_REPORT
+} with {
+  variant  "TAG
+  (
+   sMS_DELIVER_REPORT,  tP_MTI =  '00'B;
+  )"
+};
+
+
+type union TPDU_RP_ERROR_SGSN_MS
+{
+  SMS_SUBMIT_REPORT_in_RP_ERROR          sMS_SUBMIT_REPORT
+} with {
+  variant  "TAG
+  (
+   sMS_SUBMIT_REPORT,  tP_MTI =  '01'B;
+  )"
+};
+
+
+//================================================================
+//  END OF  RP-MESSAGES
+//================================================================
+
+
+//================================================================
+//  TPDUs    23.040  9.2.2
+// (SMS_DELIVER, SMS_DELIVER_REPORT, SMS_SUBMIT, SMS_SUBMIT_REPORT,
+//  SMS_STATUS_REPORT, SMS_COMMAND)
+//================================================================
+
+// 23.040 9.2.2.1
+type record SMS_DELIVER
+{
+  BIT2                         tP_MTI,
+  BIT1                         tP_MMS,
+  BIT1                         tP_LP,
+  BIT1                         tP_Spare, //00
+  BIT1                         tP_SRI,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_RP,
+
+  TP_OA                        tP_OA,
+
+  OCT1                         tP_PID,
+
+  TP_DCS                       tP_DCS,
+  //See 23.038 Section 4 for encoding tP_DCS
+  OCT7                         tP_SCTS,
+
+  TP_UDL_UD                    tP_UDL_UD
+} with { variant "PRESENCE(tP_MTI =  '00'B)"; };
+
+// 23.040 9.2.2.1a(i)
+type record SMS_DELIVER_REPORT_in_RP_ERROR
+{
+  BIT2                         tP_MTI,
+  BIT4                         tP_Spare1,  //'0000'B
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,  //'0'B
+
+  OCT1                         tP_FCS,
+
+  BIT1                         tP_PresenceBitTP_PID,
+  BIT1                         tP_PresenceBitTP_DCS,
+  BIT1                         tP_PresenceBitTP_UDL,
+  BIT4                         tP_Reserved,
+  BIT1                         tP_ExtensionBit,
+  // note:current implementation PID is 1 octet ->tP_extensionBit=0
+  OCT1                         tP_PID        optional,
+  //See 23.038 for encoding tP_DCS
+  TP_DCS                       tP_DCS        optional,
+
+  TP_UDL_UD                    tP_UDL_UD     optional
+} with { variant "PRESENCE(tP_MTI =  '00'B)";
+         variant (tP_PID)           "PRESENCE(tP_PresenceBitTP_PID = '1'B)";
+         variant (tP_DCS)           "PRESENCE(tP_PresenceBitTP_DCS = '1'B)";
+         variant (tP_UDL_UD)        "PRESENCE(tP_PresenceBitTP_UDL = '1'B)"};
+
+// 23.040 9.2.2.1a(ii)
+type record SMS_DELIVER_REPORT_in_RP_ACK
+{
+  BIT2                         tP_MTI,
+  BIT4                         tP_Spare1,  //'0000'B
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,  //'0'B
+
+  BIT1                         tP_PresenceBitTP_PID,
+  BIT1                         tP_PresenceBitTP_DCS,
+  BIT1                         tP_PresenceBitTP_UDL,
+  BIT4                         tP_Reserved,
+  BIT1                         tP_ExtensionBit,
+  // note:current implementation PID is 1 octet ->tP_extensionBit=0
+  OCT1                         tP_PID     optional,
+  //See 23.038 for encoding tP_DCS
+  TP_DCS                       tP_DCS     optional,
+
+  TP_UDL_UD                    tP_UDL_UD  optional
+} with { variant "PRESENCE(tP_MTI =  '00'B)";
+         variant (tP_PID)           "PRESENCE(tP_PresenceBitTP_PID = '1'B)";
+         variant (tP_DCS)           "PRESENCE(tP_PresenceBitTP_DCS = '1'B)";
+         variant (tP_UDL_UD)        "PRESENCE(tP_PresenceBitTP_UDL = '1'B)"};
+
+// 23.040 9.2.2.2
+type record SMS_SUBMIT
+{
+  BIT2                         tP_MTI,
+  BIT1                         tP_RD,
+  BIT2                         tP_VPF,
+  BIT1                         tP_SRR,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_RP,
+  OCT1                         tP_MR,
+
+  TP_DA                        tP_DA,
+
+  OCT1                         tP_PID,
+  //See 23.038 for encoding tP_DCS
+  TP_DCS                       tP_DCS,
+
+  TP_VP                        tP_VP optional,  // depends on tP_VPF
+
+  TP_UDL_UD                    tP_UDL_UD
+} with { variant "PRESENCE(tP_MTI =  '01'B)";
+         variant (tP_VP)"CROSSTAG(
+//           tP_VP_not_present,         tP_VPF='00'B;
+           tP_VP_relative_format,     tP_VPF='10'B;
+           tP_VP_enhanced_format,     tP_VPF='01'B;
+           tP_VP_absolute_format,     tP_VPF='11'B
+         )";
+         variant (tP_VP) "PRESENCE(tP_VPF='10'B, tP_VPF='01'B, tP_VPF='11'B)"
+         };
+
+// 23.040 9.2.2.2a (i)
+type record SMS_SUBMIT_REPORT_in_RP_ERROR    // for RP_Error
+{
+  BIT2                         tP_MTI,
+  BIT4                         tP_Spare1,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,
+
+  OCT1                         tP_FCS,
+
+  BIT1                         tP_PresenceBitTP_PID,
+  BIT1                         tP_PresenceBitTP_DCS,
+  BIT1                         tP_PresenceBitTP_UDL,
+  BIT4                         tP_Reserved,
+  BIT1                         tP_ExtensionBit,
+  // note:current implementation PID is 1 octet ->tP_extensionBit=0
+
+  OCT7                         tP_SCTS,
+
+  OCT1                         tP_PID           optional,
+ //See 23.038 for encoding tP_DCS
+  TP_DCS                       tP_DCS           optional,
+
+  TP_UDL_UD                    tP_UDL_UD        optional
+} with { variant "PRESENCE(tP_MTI =  '01'B)";
+         variant (tP_PID)            "PRESENCE(tP_PresenceBitTP_PID = '1'B)";
+         variant (tP_DCS)            "PRESENCE(tP_PresenceBitTP_DCS = '1'B)";
+         variant (tP_UDL_UD)         "PRESENCE(tP_PresenceBitTP_UDL = '1'B)"}
+
+// 23.040 9.2.2.2a (ii)
+type record SMS_SUBMIT_REPORT_in_RP_ACK    // for RP_ACK
+{
+  BIT2                         tP_MTI,
+  BIT4                         tP_Spare1,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,
+
+  BIT1                         tP_PresenceBitTP_PID,
+  BIT1                         tP_PresenceBitTP_DCS,
+  BIT1                         tP_PresenceBitTP_UDL,
+  BIT4                         tP_Reserved,
+  BIT1                         tP_ExtensionBit,
+  // note:current implementation PID is 1 octet ->tP_extensionBit=0
+  OCT7                         tP_SCTS,
+
+  OCT1                         tP_PID          optional,
+  //See 23.038 for encoding tP_DCS
+  TP_DCS                       tP_DCS          optional,
+
+  TP_UDL_UD                    tP_UDL_UD       optional
+} with { variant "PRESENCE(tP_MTI =  '01'B)";
+         variant (tP_PID)            "PRESENCE(tP_PresenceBitTP_PID = '1'B)";
+         variant (tP_DCS)            "PRESENCE(tP_PresenceBitTP_DCS = '1'B)";
+         variant (tP_UDL_UD)         "PRESENCE(tP_PresenceBitTP_UDL = '1'B)"}
+
+// 23.040 9.2.2.3
+type record SMS_STATUS_REPORT
+{
+  BIT2                         tP_MTI,
+  BIT1                         tP_MMS,
+  BIT1                         tP_LP,
+  BIT1                         tP_Spare1,
+  BIT1                         tP_SRQ,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,
+
+  OCT1                         tP_MR,
+
+  TP_RA                        tP_RA,
+
+  OCT7                         tP_SCTS,
+
+  OCT7                         tP_DT,
+
+  OCT1                         tP_ST,
+
+  BIT1                         tP_PresenceBitTP_PID optional,
+  BIT1                         tP_PresenceBitTP_DCS optional,
+  BIT1                         tP_PresenceBitTP_UDL optional,
+  BIT4                         tP_Reserved          optional,
+  BIT1                         tP_ExtensionBit      optional,
+  // note:current implementation PID is 1 octet ->tP_extensionBit=0
+  OCT1                         tP_PID               optional,
+
+  TP_DCS                       tP_DCS               optional,
+  //See 23.038 for encoding tP_DCS
+  TP_UDL_UD                    tP_UDL_UD            optional
+} with { variant "PRESENCE(tP_MTI =  '10'B)";
+         variant (tP_PID)    "PRESENCE(tP_PresenceBitTP_PID = '1'B)";
+         variant (tP_DCS)    "PRESENCE(tP_PresenceBitTP_DCS = '1'B)";
+         variant (tP_UDL_UD) "PRESENCE(tP_PresenceBitTP_UDL = '1'B)"}
+
+// 23.040 9.2.2.4
+type record SMS_COMMAND
+{
+  BIT2                         tP_MTI,
+  BIT3                         tP_Spare1,
+  BIT1                         tP_SRR,
+  BIT1                         tP_UDHI,
+  BIT1                         tP_Spare2,
+
+  OCT1                         tP_MR,
+
+  OCT1                         tP_PID,
+
+  OCT1                         tP_CT,
+
+  OCT1                         tP_MN,
+
+  TP_DA                        tP_DA,
+
+  TP_CDL_CD                    tP_CDL_CD
+} with { variant "PRESENCE(tP_MTI =  '10'B)"; };
+//================================================================
+//   END OF  TPDUs    23.040  9.2.2
+//================================================================
+
+//================================================================
+// TPDU Parameters  23.040 9.2.3
+//================================================================
+type record TP_OA
+{
+  TP_OA_NoPad   tP_OA_NoPad
+} with { variant "PADDING(yes), PADDING_PATTERN('1111'B)"};
+//Note: Padding is handled automatically here.
+
+type record TP_OA_NoPad
+{
+  LIN1                         tP_LengthIndicator,   //0-20
+  BIT4                         tP_NumberingPlanID,
+  BIT3                         tP_TypeOfNumber,
+  BIT1                         tp_Spare,
+  hexstring                    tP_OAValue  length (0..20)
+  // Note: tP_OAValue does not incude the padding half-octet.
+  // It includes only useful tP_OAValue digits.
+  // Padding after tP_OAValue digits is handled
+  // automatically and the tester does not see it in
+  // the TTCN templates
+} with { variant (tP_LengthIndicator) "LENGTHTO (tP_OAValue)";
+         variant (tP_LengthIndicator) "UNIT(4)";};
+
+type record TP_CDL_CD
+{
+  LIN1                         tP_CDL, //  length is possible
+  octetstring                  tP_CD
+} with { variant (tP_CDL) "LENGTHTO (tP_CD)"};
+
+type record TP_RA
+{
+  TP_RA_NoPad        tP_RA_NoPad
+} with { variant "PADDING(yes), PADDING_PATTERN('1111'B)"};
+//Note: Padding is handled automatically here.
+
+type record TP_RA_NoPad
+{
+  LIN1                         tP_LengthIndicator,   //0-20
+  BIT4                         tP_NumberingPlanID,
+  BIT3                         tP_TypeOfNumber,
+  BIT1                         tp_Spare,
+  hexstring                    tP_RAValue  length (0..20)
+  // Note: tP_RAValue does not incude the padding half-octet.
+  // It includes only useful tP_RAValue digits.
+  // Padding after tP_RAValue digits is handled
+  // automatically and the tester does not see it in
+  // the TTCN templates
+} with { variant (tP_LengthIndicator) "LENGTHTO (tP_RAValue)";
+         variant (tP_LengthIndicator) "UNIT(4)";};
+
+type union TP_VP 
+{
+//  OCT0                         tP_VP_not_present,
+  OCT1                         tP_VP_relative_format,
+  OCT7                         tP_VP_enhanced_format,
+  OCT7                         tP_VP_absolute_format
+};
+
+type record TP_DA
+{
+  TP_DA_NoPad   tP_DA_NoPad
+} with { variant "PADDING(yes), PADDING_PATTERN('1111'B)"};
+//Note: Padding is handled automatically here.
+
+type record TP_DA_NoPad
+{
+  LIN1                         tP_LengthIndicator,   //0-20
+  BIT4                         tP_NumberingPlanID,
+  BIT3                         tP_TypeOfNumber,
+  BIT1                         tp_Spare,
+  hexstring                    tP_DAValue  length (0..20)
+  // Note: tP_DAValue does not incude the padding half-octet.
+  // It includes only useful tP_DAValue digits.
+  // Padding after tP_DAValue digits is handled
+  // automatically and the tester does not see it in
+  // the TTCN templates
+} with { variant (tP_LengthIndicator) "LENGTHTO (tP_DAValue)";
+         variant (tP_LengthIndicator) "UNIT(4)"; };
+
+
+// Note that tP_LengthIndicator in TP_UDL_UD gives the data length in septets or
+// octets. Septets are used for uncompressed GSM 7 bit default alphabet coding
+// Octets are used for all other variations.
+// IT IS NOT CALCULATED AUTOMATICALLY BY THE RAW CODER.
+// This will not be a problem during decoding.
+// For encoding correct messages the tester has to enter manually
+// or calculate the correct tP_LengthIndicator with a function.
+// Note also that the septet or octet choice depends on the various
+// bit combinations in field TP_DCS. See 23.038 Section 4.
+type record TP_UDL_UD
+{
+  integer            tP_LengthIndicator,  // could be zero length
+  octetstring        tP_UD
+}
+
+// See 23.038 for encoding TP_DCS
+// The various bit combinations in TP_DCS determine
+// the coding of TP_UDL_UD
+type OCT1 TP_DCS;
+
+//================================================================
+// END of TPDU Parameters  23.040 9.2.3
+//================================================================
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_SS_Types.ttcn b/src/MobileL3_SS_Types.ttcn
new file mode 100644
index 0000000..7361f98
--- /dev/null
+++ b/src/MobileL3_SS_Types.ttcn
@@ -0,0 +1,101 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_SS_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.080 v13.0.0
+
+module  MobileL3_SS_Types
+{
+
+import from General_Types all;
+import from MobileL3_CommonIE_Types all;
+
+//****************************************************************************
+// 24.080/2.3 Facility
+// see also 9.3.9.1 (NW->MS) and 9.3.9.2 (MS->NW) Facility  
+//****************************************************************************
+type record PDU_ML3_SS_Facility
+{
+  BIT6  messageType, // '111010'B; facilityIEI 
+  BIT2  nsd,
+  Facility_LV facility  // see 24.008/10.5.4.15 in Mobility_L3_CommonIE_Types and
+                        // see 24.080/3.6 how to extract
+} 
+
+//****************************************************************************************
+//24.080/2.4.1 Register (NW->MS)
+//****************************************************************************************
+type record PDU_ML3_SS_Register_NW_MS
+{
+  BIT6 messageType,  //    '111011'B Register
+  BIT2 nsd,
+  Facility_TLV facility 
+};
+
+//****************************************************************************************
+//24.080/2.4.1 Register ( MS->NW)
+//****************************************************************************************
+type record PDU_ML3_SS_Register_MS_NW
+{
+  BIT6  messageType,  //    '111011'B Register
+  BIT2  nsd,
+  Facility_TLV  facility,
+  SS_VersionIndicator ss_version optional
+} with { variant "TAG (
+               ss_version,   elementIdentifier = '7F'O;)"};
+
+
+//****************************************************************************
+// 2.5 Release Complete
+// see also 24.008/9.3.19.1
+//****************************************************************************
+type record PDU_ML3_SS_ReleaseComplete
+{
+  BIT6  messageType, //    '101010'B ReleaseComplete  
+  BIT2  nsd, // sent by the NW: '00'B
+  ML3_Cause_TLV      cause      optional,
+  Facility_TLV       facility   optional
+} with { variant "TAG (
+                cause,      elementIdentifier = '08'O;
+                facility,   elementIdentifier = '1C'O;)"};
+ 
+/****************************************************************************************
+  MobileL3   Supplementary Service Management
+  TS 24.080 / 2.2
+ ****************************************************************************************/
+type union PDU_ML3_SS_MS_NW
+{
+  PDU_ML3_SS_Facility                 facility,
+  PDU_ML3_SS_Register_MS_NW           register,
+  PDU_ML3_SS_ReleaseComplete          releaseComplete_MS_NW
+} with { variant "TAG (
+               facility,               messageType ='111010'B;
+               register,               messageType ='111011'B;
+               releaseComplete_MS_NW,  messageType ='101010'B;)"};
+ 
+type union PDU_ML3_SS_NW_MS
+{
+  PDU_ML3_SS_Facility                 facility,
+  PDU_ML3_SS_Register_NW_MS           register,
+  PDU_ML3_SS_ReleaseComplete          releaseComplete_NW_MS
+} with { variant "TAG (
+               facility,               messageType ='111010'B;
+               register,               messageType ='111011'B;
+               releaseComplete_NW_MS,  messageType ='101010'B;)"};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_Types.ttcn b/src/MobileL3_Types.ttcn
new file mode 100644
index 0000000..1ec0d1f
--- /dev/null
+++ b/src/MobileL3_Types.ttcn
@@ -0,0 +1,402 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+module MobileL3_Types
+{
+
+import from General_Types           all;
+import from MobileL3_CommonIE_Types all;
+import from MobileL3_GMM_SM_Types   all;
+import from MobileL3_MM_Types       all;
+import from MobileL3_CC_Types       all;
+import from MobileL3_RRM_Types      all;
+import from MobileL3_SMS_Types      all;
+import from MobileL3_SS_Types       all;
+
+external function enc_PDU_L3_MS_SGSN(in PDU_L3_MS_SGSN pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+external function enc_PDU_L3_MS_SGSN_fast(in PDU_L3_MS_SGSN pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+// new external function for decoding MS -> SGSN
+external function dec_PDU_L3_MS_SGSN(in octetstring stream) return PDU_L3_MS_SGSN
+with { extension "prototype(convert)" extension "decode(RAW)" }
+external function dec_PDU_L3_MS_SGSN_backtrack(in octetstring stream, out PDU_L3_MS_SGSN pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+// new external function for encoding SGSN -> MS
+external function enc_PDU_L3_SGSN_MS(in PDU_L3_SGSN_MS pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+external function enc_PDU_L3_SGSN_MS_fast(in PDU_L3_SGSN_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension "encode(RAW)" }
+
+external function dec_PDU_L3_SGSN_MS(in octetstring stream) return PDU_L3_SGSN_MS
+with { extension "prototype(convert)" extension "decode(RAW)" }
+external function dec_PDU_L3_SGSN_MS_backtrack(in octetstring stream, out PDU_L3_SGSN_MS pdu) return integer
+with { extension "prototype(backtrack)" extension "decode(RAW)" }
+
+external function enc_PDU_ML3_NW_MS(in PDU_ML3_NW_MS pdu) return octetstring
+with { extension "prototype(convert)" extension " encode(RAW)" }
+external function enc_PDU_ML3_NW_MS_fast(in PDU_ML3_NW_MS pdu, out octetstring stream)
+with { extension "prototype(fast)" extension " encode(RAW)" }
+
+external function dec_PDU_ML3_NW_MS(in octetstring stream) return PDU_ML3_NW_MS
+with { extension "prototype(convert)" extension " decode(RAW)" }
+external function dec_PDU_ML3_NW_MS_backtrack(in octetstring stream, out PDU_ML3_NW_MS pdu) return integer
+with { extension "prototype(backtrack)" extension " decode(RAW)" }
+
+external function enc_PDU_ML3_MS_NW(in PDU_ML3_MS_NW pdu) return octetstring
+with { extension "prototype(convert)" extension " encode(RAW)" }
+external function enc_PDU_ML3_MS_NW_fast(in PDU_ML3_MS_NW pdu, out octetstring stream)
+with { extension "prototype(fast)" extension " encode(RAW)" }
+
+external function dec_PDU_ML3_MS_NW(in octetstring stream) return PDU_ML3_MS_NW
+with { extension "prototype(convert)" extension " decode(RAW)" }
+external function dec_PDU_ML3_MS_NW_backtrack(in octetstring stream, out PDU_ML3_MS_NW pdu) return integer
+with { extension "prototype(backtrack)" extension " decode(RAW)" }
+
+// ***************************************************************************
+// *     The container types of all L3_PDU
+// ***************************************************************************
+type record L3_TransactionId
+{
+  BIT3               tio,
+  BIT1               tiFlag ,
+  TI_Extension       tIExtension  optional
+  // an extension octet (TI) can be used for session management messages
+  // not yet implemented (see 24.008 clause 10.3.2 for more detail
+} with { variant (tIExtension) "PRESENCE(tio = '111'B)" };
+
+type record L3_TransactionId_not_extended
+{
+  BIT3               tio,
+  BIT1               tiFlag
+};
+
+type union TiOrSkip_not_extended
+{
+  BIT4                                   skipIndicator,
+  L3_TransactionId_not_extended          transactionId
+};
+
+
+type union TiOrSkip
+{
+  BIT4               skipIndicator,
+  L3_TransactionId   transactionId
+};
+
+type union L3_Discr_SGSN_MS
+{
+  octetstring        gcc,       //group call control
+  octetstring        bcc,      // broadcast call control
+  octetstring        cc,       // call control; call related SS messages PDU_ypes_CC_MSC_MS
+  octetstring        gttp,     // GPRS Transparent Transport Protocol
+  octetstring        mm,       // mobility management messages  PDU_DTAP_MM
+  octetstring        rrm,      // radio resource management messages PDU_DTAP_RRM
+  L3_GMM_SGSN_MS     gprs_mm,  // GPRS mobility management messages
+  octetstring        sms,      // SMS messages
+  L3_GSM_SGSN_MS     gprs_sm,  // GPRS session management messages
+  octetstring        ss,       // non call related SS messages
+  octetstring        loc,      // Location services
+  octetstring        reserved
+};
+
+
+type record PDU_L3_SGSN_MS_unextended_ti
+{
+  BIT4                         discriminator,
+  TiOrSkip_not_extended        tiOrSkip,
+  L3_Discr_SGSN_MS             msgs
+} with { variant (msgs)"CROSSTAG(
+  gcc,        discriminator='0000'B;
+  bcc,        discriminator='0001'B;
+  cc,         discriminator='0011'B;
+  gttp,       discriminator='0100'B;
+  mm,         discriminator='0101'B;
+  rrm,        discriminator='0110'B;
+  gprs_mm,    discriminator='1000'B;
+  sms,        discriminator='1001'B;
+  gprs_sm,    discriminator='1010'B;
+  ss,         discriminator='1011'B;
+  loc,        discriminator='1100'B;
+  reserved, { discriminator='0010'B,
+  discriminator='0111'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B }
+  )";
+  variant (tiOrSkip)"CROSSTAG(
+  skipIndicator,    { discriminator='0000'B,
+  discriminator='0001'B,
+  discriminator='0010'B,
+  discriminator='0100'B,
+  discriminator='0101'B,
+  discriminator='0110'B,
+  discriminator='0111'B,
+  discriminator='1000'B,
+  discriminator='1100'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B };
+  transactionId,    { discriminator='0011'B,
+  discriminator='1001'B,
+  discriminator='1011'B,
+  discriminator='1010'B }
+  )";
+};
+
+
+type record PDU_L3_SGSN_MS
+{
+  BIT4               discriminator,
+  TiOrSkip           tiOrSkip,
+  L3_Discr_SGSN_MS   msgs
+}  with { variant (msgs)"CROSSTAG(
+  gcc,        discriminator='0000'B;
+  bcc,        discriminator='0001'B;
+  cc,         discriminator='0011'B;
+  gttp,       discriminator='0100'B;
+  mm,         discriminator='0101'B;
+  rrm,        discriminator='0110'B;
+  gprs_mm,    discriminator='1000'B;
+  sms,        discriminator='1001'B;
+  gprs_sm,    discriminator='1010'B;
+  ss,         discriminator='1011'B;
+  loc,        discriminator='1100'B;
+  reserved, { discriminator='0010'B,
+  discriminator='0111'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B }
+  )";
+  variant (tiOrSkip)"CROSSTAG(
+  skipIndicator,    { discriminator='0000'B,
+  discriminator='0001'B,
+  discriminator='0010'B,
+  discriminator='0100'B,
+  discriminator='0101'B,
+  discriminator='0110'B,
+  discriminator='0111'B,
+  discriminator='1000'B,
+  discriminator='1100'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B };
+  transactionId,    { discriminator='0011'B,
+  discriminator='1011'B,
+  discriminator='1001'B,
+  discriminator='1010'B }
+  )";
+};
+
+
+type union L3_Discr_MS_SGSN
+{
+  octetstring        gcc,      //group call control
+  octetstring        bcc,      // broadcast call control
+  octetstring        cc,       // call control; call related SS messages PDU_DTAP_CC_MS_MSC
+  octetstring        gttp,     // GPRS Transparent Transport Protocol
+  octetstring        mm,       // mobility management messages PDU_DTAP_MM
+  octetstring        rrm,      // radio resource management messages PDU_DTAP_RRM
+  L3_GMM_MS_SGSN     gprs_mm,  // GPRS mobility management messages
+  octetstring        sms,      // SMS messages
+  L3_GSM_MS_SGSN     gprs_sm,  // GPRS session management messages
+  octetstring        ss,  // non call related SS messages
+  octetstring        loc, // Location services
+  octetstring        reserved
+};
+
+
+type record PDU_L3_MS_SGSN
+{
+  BIT4               discriminator,
+  TiOrSkip           tiOrSkip,
+  L3_Discr_MS_SGSN   msgs
+} with { variant (msgs)"CROSSTAG(
+  gcc,        discriminator='0000'B;
+  bcc,        discriminator='0001'B;
+  cc,         discriminator='0011'B;
+  gttp,       discriminator='0100'B;
+  mm,         discriminator='0101'B;
+  rrm,        discriminator='0110'B;
+  gprs_mm,    discriminator='1000'B;
+  sms,        discriminator='1001'B;
+  gprs_sm,    discriminator='1010'B;
+  ss,         discriminator='1011'B;
+  loc,        discriminator='1100'B;
+  reserved, { discriminator='0010'B,
+  discriminator='0111'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B }
+  )";
+  variant (tiOrSkip)"CROSSTAG(
+  skipIndicator,    { discriminator='0000'B,
+  discriminator='0001'B,
+  discriminator='0010'B,
+  discriminator='0100'B,
+  discriminator='0101'B,
+  discriminator='0110'B,
+  discriminator='0111'B,
+  discriminator='1000'B,
+  discriminator='1100'B,
+  discriminator='1101'B,
+  discriminator='1110'B,
+  discriminator='1111'B };
+  transactionId,    { discriminator='0011'B,
+  discriminator='1001'B,
+  discriminator='1011'B,
+  discriminator='1010'B }
+  )";
+};
+
+
+//***************************************************************************
+//  24.007/11.2.3.1.1 and 24.008/10.2 Protocol Discriminator    NW->MS
+//***************************************************************************
+type union ML3_Discr_NW_MS
+{
+  octetstring        gcc,      // group call control                      <- 24.068  WITHDRAWN
+  octetstring        bcc,      // broadcast call control                  <- 24.069 WITHDRAWN
+  PDU_ML3_CC_NW_MS   cc,       // call control; call related SS messages  <-24.008, implemented
+  octetstring        gttp,     // GPRS Transparent Transport Protocol <- not required in MSC
+  PDU_ML3_MM         mm,       // mobility management messages        <- 24.008,
+  PDU_RRM_NW_MS      rrm,      // radio resource management messages  <- 24.008, 24.018
+  octetstring        gprs_mm,  // GPRS mobility management messages   <- Not required in MSC
+  // but implemented as L3_GMM_SGSN_MS in L3_Types (SGSN)
+  L3_SMS_SGSN_MS     sms,      // SMS messages
+  //<-24.011, imported from L3_SMS_Types
+  octetstring        gprs_sm,  // GPRS session management messages    <- not required in MSC
+  // but impl. as L3_GMM_MS_SGSN in L3_GSM_SGSN_MS_Types
+  PDU_ML3_SS_NW_MS   ss,       // non call related SS messages
+  //<- 24.080 ASN1 or implemented by ethgbh
+  octetstring        loc,      // Location services(LCS)              <- 24.030
+  octetstring        reserved
+};
+
+
+// ref: 24.007/11.2.3.1.1 "Protocol discriminator" and
+// Table 11.2 "Protocol dicriminator values"
+type record PDU_ML3_NW_MS
+{
+  BIT4             discriminator, //24.008/10.2
+  TiOrSkip         tiOrSkip,      //24.008/10.3
+  ML3_Discr_NW_MS  msgs
+} with { variant (msgs)"CROSSTAG(
+  gcc,        discriminator='0000'B;
+  bcc,        discriminator='0001'B;
+  cc,         discriminator='0011'B;
+  gttp,       discriminator='0100'B;
+  mm,         discriminator='0101'B;
+  rrm,        discriminator='0110'B;
+  gprs_mm,    discriminator='1000'B;
+  sms,        discriminator='1001'B;
+  gprs_sm,    discriminator='1010'B;
+  ss,         discriminator='1011'B;
+  loc,        discriminator='1100'B;
+  reserved, { discriminator='0010'B,
+              discriminator='0111'B,
+              discriminator='1101'B,
+              discriminator='1110'B,
+              discriminator='1111'B }
+  )";
+  variant (tiOrSkip)"CROSSTAG(
+  skipIndicator,    { discriminator='0000'B,
+                      discriminator='0001'B,
+                      discriminator='0010'B,
+                      discriminator='0100'B,
+                      discriminator='0101'B,
+                      discriminator='0110'B,
+                      discriminator='0111'B,
+                      discriminator='1000'B,
+                      discriminator='1100'B,
+                      discriminator='1101'B,
+                      discriminator='1110'B,
+                      discriminator='1111'B };
+  transactionId,    { discriminator='0011'B,
+                      discriminator='1001'B,
+                      discriminator='1011'B,
+                      discriminator='1010'B }
+  )";
+};
+
+
+type union ML3_Discr_MS_NW
+{
+  octetstring        gcc,      //group call control
+  octetstring        bcc,      // broadcast call control
+  PDU_ML3_CC_MS_NW   cc,       // call control; call related SS messages
+  octetstring        gttp,     // GPRS Transparent Transport Protocol
+  PDU_ML3_MM         mm,       // mobility management messages
+  PDU_RRM_MS_NW      rrm,      // radio resource management messages
+  octetstring        gprs_mm,  // GPRS mobility management messages
+  L3_SMS_MS_SGSN     sms,      // SMS messages
+  octetstring        gprs_sm,  // GPRS session management messages
+  PDU_ML3_SS_MS_NW   ss,  // non call related SS messages
+  octetstring        loc, // Location services
+  octetstring        reserved
+};
+
+type record PDU_ML3_MS_NW
+{
+  BIT4                discriminator,
+  TiOrSkip            tiOrSkip,
+  ML3_Discr_MS_NW     msgs
+} with { variant (msgs)"CROSSTAG(
+  gcc,        discriminator='0000'B;
+  bcc,        discriminator='0001'B;
+  cc,         discriminator='0011'B;
+  gttp,       discriminator='0100'B;
+  mm,         discriminator='0101'B;
+  rrm,        discriminator='0110'B;
+  gprs_mm,    discriminator='1000'B;
+  sms,        discriminator='1001'B;
+  gprs_sm,    discriminator='1010'B;
+  ss,         discriminator='1011'B;
+  loc,        discriminator='1100'B;
+  reserved, { discriminator='0010'B,
+              discriminator='0111'B,
+              discriminator='1101'B,
+              discriminator='1110'B,
+              discriminator='1111'B }
+  )";
+  variant (tiOrSkip)"CROSSTAG(
+  skipIndicator,    { discriminator='0000'B,
+                      discriminator='0001'B,
+                      discriminator='0010'B,
+                      discriminator='0100'B,
+                      discriminator='0101'B,
+                      discriminator='0110'B,
+                      discriminator='0111'B,
+                      discriminator='1000'B,
+                      discriminator='1100'B,
+                      discriminator='1101'B,
+                      discriminator='1110'B,
+                      discriminator='1111'B };
+  transactionId,    { discriminator='0011'B,    //24.008/10.3.2
+                      discriminator='1001'B,
+                      discriminator='1011'B,
+                      discriminator='1010'B }   //24.008/10.3.2
+  )";
+};
+
+}//end of module
+with {
+extension "version R2A"
+encode "RAW"
+}
+
diff --git a/src/MobileL3_v13.4.0_ProtocolModule.grp b/src/MobileL3_v13.4.0_ProtocolModule.grp
new file mode 100644
index 0000000..bd6ffde
--- /dev/null
+++ b/src/MobileL3_v13.4.0_ProtocolModule.grp
@@ -0,0 +1,37 @@
+<!--
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               MobileL3_v13.4.0_ProtocolModule.grp
+//  Description:        MobileL3_v13.4.0 Protocol Module group file
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//
+-->
+
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="MobileL3_v13.4.0_ProtocolModule" >
+    <File path="MobileL3_CC_Types.ttcn" />
+    <File path="MobileL3_CommonIE_Types.ttcn" />
+    <File path="MobileL3_GMM_SM_Types.ttcn" />   
+    <File path="MobileL3_MM_Types.ttcn" />     
+    <File path="MobileL3_RRM_Types.ttcn" />    
+    <File path="MobileL3_SMS_Types.ttcn" />
+    <File path="MobileL3_SS_Types.ttcn" />
+    <File path="MobileL3_Types.ttcn" />   
+    <File path="SS_DataTypes.asn" />     
+    <File path="SS_EncDec.cc" />
+    <File path="SS_Errors.asn" />
+    <File path="SS_Operations.asn" />
+    <File path="SS_PDU_Defs.asn" />   
+    <File path="SS_Protocol.asn" />     
+    <File path="SS_Types.ttcn" />         
+</File_Group> 
diff --git a/src/SS_DataTypes.asn b/src/SS_DataTypes.asn
new file mode 100644
index 0000000..55ae9ba
--- /dev/null
+++ b/src/SS_DataTypes.asn
@@ -0,0 +1,501 @@
+--/////////////////////////////////////////////////////////////////////////////
+--
+-- 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:               SS_DataTypes.asn
+--  Rev:                R2A
+--  Prodnr:             CNL 113 832
+--  Contact:            http://ttcn.ericsson.se
+--  Reference:          3GPP TS 24.080 v13.0.0
+
+SS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-DataTypes (2) version12 (12)}
+
+DEFINITIONS
+
+IMPLICIT TAGS ::=
+
+BEGIN
+
+-- exports all data types defined in this module
+
+IMPORTS
+
+SS-Code
+FROM MAP-SS-Code {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-SS-Code (15) version12 (12)}
+
+-- imports MAP-SS-DataTypes
+SS-Status, USSD-DataCodingScheme, USSD-String, CCBS-Feature
+-- USSD-DataCodingScheme, USSD-String were introduced because of CNAP.
+FROM MAP-SS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-SS-DataTypes (14) version12 (12)}
+
+GSN-Address,
+CUG-Index,
+NotificationToMSUser
+FROM MAP-MS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-MS-DataTypes (11) version12 (12)}
+
+maxSignalInfoLength,
+ISDN-AddressString,
+ISDN-SubaddressString,
+AlertingPattern,
+LCSClientExternalID,
+AddressString,
+LCSServiceTypeID,
+AgeOfLocationInformation
+FROM MAP-CommonDataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-CommonDataTypes (18) version12 (12)}
+
+LocationType,
+DeferredLocationEventType,
+LCSClientName,
+LCS-QoS,
+Horizontal-Accuracy,
+ResponseTime,
+Ext-GeographicalInformation, 
+VelocityEstimate,
+SupportedGADShapes,
+Add-GeographicalInformation,
+LCSRequestorID,
+LCS-ReferenceNumber,
+LCSCodeword,
+AreaEventInfo,
+ReportingPLMNList,
+PeriodicLDRInfo,
+SequenceNumber
+
+FROM MAP-LCS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0)
+   gsm-Network (1) modules (3) map-LCS-DataTypes (25) version12 (12)}
+
+;
+
+-- data types definition
+
+SS-UserData ::= IA5String (SIZE (1.. maxSignalInfoLength))
+
+NotifySS-Arg ::= SEQUENCE{
+	ss-Code						[1]		SS-Code OPTIONAL,
+	ss-Status					[4]		SS-Status OPTIONAL,
+	ss-Notification				[5]		SS-Notification OPTIONAL,
+	callIsWaiting-Indicator		[14]	NULL OPTIONAL,
+	callOnHold-Indicator		[15]	CallOnHold-Indicator OPTIONAL,
+	mpty-Indicator				[16]	NULL OPTIONAL,
+	cug-Index					[17]	CUG-Index OPTIONAL,
+	clirSuppressionRejected		[18]	NULL OPTIONAL,
+	... ,
+	ect-Indicator				[19]	ECT-Indicator OPTIONAL,
+	nameIndicator				[20]	NameIndicator OPTIONAL,
+	ccbs-Feature				[21]	CCBS-Feature OPTIONAL,
+	alertingPattern				[22]	AlertingPattern OPTIONAL,
+	multicall-Indicator			[23]	Multicall-Indicator OPTIONAL}
+
+--  The nameIndicator is defined because of CNAP.
+
+Multicall-Indicator	::= ENUMERATED {
+		nbr-SNexceeded (0),
+		nbr-Userexceeded (1)}
+
+ForwardChargeAdviceArg ::= SEQUENCE{
+	ss-Code						[0]		SS-Code,
+	chargingInformation			[1]		ChargingInformation,
+	...}
+
+SS-Notification ::= OCTET STRING (SIZE (1))
+
+--	  Bit 8 7 6 5 4	00000 (Unused)
+
+--	Bit 3	Call is forwarded indication to A-subscriber
+--		(calling subscriber)
+--	0	No information content
+--	1	Outgoing call has been forwarded to C
+
+--	Bit 2	Call is forwarded indication to B-subscriber
+--		(forwarding subscriber)
+--	0	No information content
+--	1	Incoming call has been forwarded to C
+
+--	Bit 1	Call is forwarded indication to C-subscriber
+--		(forwarded-to subscriber)
+--	0	No information content
+--	1	Incoming call is a forwarded call
+
+ChargingInformation ::= SEQUENCE{
+	e1	[1] E1 OPTIONAL,
+	e2	[2] E2 OPTIONAL,
+	e3	[3] E3 OPTIONAL,
+	e4	[4] E4 OPTIONAL,
+	e5	[5] E5 OPTIONAL,
+	e6	[6] E6 OPTIONAL,
+	e7	[7] E7 OPTIONAL,
+	...}
+
+E1 ::= INTEGER (0..max10TimesUnitsPerTime)
+max10TimesUnitsPerTime INTEGER ::= 8191
+
+E2 ::= INTEGER (0..max10TimesTimeInterval)
+max10TimesTimeInterval INTEGER ::= 8191
+
+E3 ::= INTEGER (0..max100TimesScalingFactor)
+max100TimesScalingFactor INTEGER ::= 8191
+
+E4 ::= INTEGER (0..max10TimesIncrement)
+max10TimesIncrement INTEGER ::= 8191
+
+E5 ::= INTEGER (0..max10TimesIncrementPerDataInterval)
+max10TimesIncrementPerDataInterval INTEGER ::= 8191
+
+E6 ::= INTEGER (0..maxNumberOfSegmentsPerDataInterval)
+maxNumberOfSegmentsPerDataInterval INTEGER ::= 8191
+
+E7 ::= INTEGER (0..max10TimesInitialTime)
+max10TimesInitialTime INTEGER ::= 8191
+
+CallOnHold-Indicator	::= ENUMERATED {
+			callRetrieved (0),
+			callOnHold (1)}
+
+ForwardCUG-InfoArg ::= SEQUENCE {
+	cug-Index			[0]	CUG-Index OPTIONAL,
+	suppressPrefCUG		[1]	NULL OPTIONAL,
+	suppressOA			[2]	NULL OPTIONAL,
+	...}
+
+ECT-Indicator	::= SEQUENCE {
+	ect-CallState		[0]	ECT-CallState,
+	rdn	[1]	RDN OPTIONAL,
+	...}
+
+ECT-CallState	::= ENUMERATED {
+		alerting (0),
+		active (1)}
+
+	NameIndicator ::= SEQUENCE {
+		callingName		[0] Name OPTIONAL,
+		...}
+
+	Name ::= CHOICE {
+		namePresentationAllowed		[0] NameSet,
+		presentationRestricted		[1] NULL,
+		nameUnavailable				[2] NULL,
+		namePresentationRestricted	[3] NameSet}
+
+	NameSet ::= SEQUENCE {
+		dataCodingScheme 		[0] USSD-DataCodingScheme,
+		lengthInCharacters 		[1] INTEGER,
+		nameString				[2] USSD-String,
+		...}
+
+-- NameIndicator, Name and NameSet are defined because of CNAP.
+-- The USSD-DataCodingScheme shall indicate use of the default alphabet through the
+-- following encoding:
+--    bit  7   6   5   4   3   2   1   0
+--       | 0   0   0   0 | 1   1   1   1|
+
+RDN	::= CHOICE {
+	presentationAllowedAddress				[0]	RemotePartyNumber,
+	presentationRestricted					[1]	NULL,
+	numberNotAvailableDueToInterworking		[2]	NULL,
+	presentationRestrictedAddress			[3]	RemotePartyNumber}
+
+RemotePartyNumber	::= SEQUENCE {
+	partyNumber				[0]	ISDN-AddressString,
+	partyNumberSubaddress	[1]	ISDN-SubaddressString OPTIONAL,
+	...}
+
+AccessRegisterCCEntryArg	::= SEQUENCE {
+	...}
+
+CallDeflectionArg	::= SEQUENCE {
+	deflectedToNumber		[0]	AddressString,
+	deflectedToSubaddress	[1]	ISDN-SubaddressString OPTIONAL,
+	...}
+
+UserUserServiceArg ::= SEQUENCE {
+	uUS-Service		[0]	UUS-Service,
+	uUS-Required	[1]	BOOLEAN,
+	... }
+
+UUS-Service ::= ENUMERATED {
+	uUS1 (1),
+	uUS2 (2),
+	uUS3 (3),
+	... }
+
+-- exception handling:
+-- In case of UUS-Service with any other value, indicated as "UUS required",
+-- but not understood by the MS, the call will be cleared.
+
+LocationNotificationArg	::= SEQUENCE {
+	notificationType	[0]	NotificationToMSUser,
+	locationType		[1]	LocationType,
+	lcsClientExternalID	[2] LCSClientExternalID		OPTIONAL,
+	lcsClientName		[3]	LCSClientName			OPTIONAL,
+	... ,
+	lcsRequestorID		[4] LCSRequestorID			OPTIONAL,
+	lcsCodeword			[5]	LCSCodeword				OPTIONAL,
+	lcsServiceTypeID	[6]	LCSServiceTypeID		OPTIONAL }
+	
+-- The notificationType may only be set to notifyLocationAllowed, 
+-- notifyAndVerify-LocationAllowedIfNoResponse, 
+-- or notifyAndVerify-LocationNotAllowedIfNoResponse.
+-- The locationEstimateType field of the locationType may only be set to 
+-- currentLocation, currentOrLastKnownLocation, 
+-- notificationVerificationOnly, or activateDeferredLocation.
+-- The deferredLocationEventType field of the locationType may only be set to 
+-- enteringIntoArea, and/or leavingFromArea, and/or beingInsideArea, 
+-- and/or periodicLDR.
+-- For LCS location notification of MT-LR for current location, the 
+-- locationEstimateType field of the locationType shall be set to currentLocation.
+-- For LCS location notification of MT-LR for current or last known location, the 
+-- locationEstimateType field of the locationType shall be set to currentOrLastKnownLocation.
+-- For the LCS location notification for the LDR of MS available event, 
+-- the locationEstimateType field of the locationType shall be set to currentLocation.
+-- For LCS location notification for the LDR of change of area event, 
+-- the locationEstimateType field of the locationType shall be set to
+-- activateDeferredLocation, and the deferredLocationEventType shall be 
+-- set to enteringIntoArea, and/or leavingFromArea, and/or beingInsideArea.
+-- For the post positioning LCS location notification, the locationEstimateType 
+-- field of the locationType shall be set to notificationVerificationOnly.
+-- For LCS location notification for the LDR of periodic location event, 
+-- the locationEstimateType field of the locationType shall be set to
+-- activateDeferredLocation, and the 
+-- deferredLocationEventType shall be set to periodicLDR.
+
+-- exception handling:
+-- At reception of an unrecognised notificationType value the receiver shall reject the 
+-- operation with a return error cause of unexpected data value.
+-- At reception of an unrecognised locationType value the receiver shall reject the
+-- operation with a return error cause of unexpected data value.
+-- At reception of an unallowed notificationType value the receiver shall either ignore the
+-- received operation or reject the operation with a return error cause of unexpected 
+-- data value.
+-- At reception of an unallowed locationType value the receiver shall either ignore the
+-- received operation or reject the operation with a return error cause of unexpected 
+-- data value.
+
+
+
+LocationNotificationRes	::= SEQUENCE {
+	verificationResponse		[0]	VerificationResponse OPTIONAL,
+	...}
+
+VerificationResponse::= ENUMERATED {
+	permissionDenied	(0),
+	permissionGranted	(1),
+	... }
+
+-- exception handling:
+-- an unrecognized value shall be treated the same as value 0 (permissionDenied)
+
+LCS-MOLRArg	::= SEQUENCE {
+	molr-Type			[0]	MOLR-Type,
+	locationMethod		[1]	LocationMethod			OPTIONAL,
+	lcs-QoS				[2]	LCS-QoS					OPTIONAL,
+	lcsClientExternalID	[3] LCSClientExternalID		OPTIONAL,
+	mlc-Number			[4]	ISDN-AddressString		OPTIONAL,
+	gpsAssistanceData	[5]	GPSAssistanceData		OPTIONAL,
+	...,
+	supportedGADShapes	[6]	SupportedGADShapes		OPTIONAL,
+	lcsServiceTypeID	[7]	LCSServiceTypeID		OPTIONAL,
+	ageOfLocationInfo	[8]	AgeOfLocationInformation	OPTIONAL,
+	locationType		[9]	LocationType			OPTIONAL,
+	pseudonymIndicator	[10]	NULL					OPTIONAL,
+	h-gmlc-address 		[11] GSN-Address			OPTIONAL,
+	locationEstimate	[12] Ext-GeographicalInformation		OPTIONAL,
+	velocityEstimate	[13] VelocityEstimate		OPTIONAL,
+	referenceNumber 	[14] LCS-ReferenceNumber 	OPTIONAL,
+	periodicLDRInfo		[15] PeriodicLDRInfo		OPTIONAL,
+	locationUpdateRequest	[16]	NULL				OPTIONAL,
+	sequenceNumber 		[17] SequenceNumber 		OPTIONAL,
+	terminationCause 	[18] TerminationCause 		OPTIONAL,
+	mo-lrShortCircuit	[19]	NULL				OPTIONAL,
+	ganssAssistanceData	[20] GANSSAssistanceData	OPTIONAL,
+	multiplePositioningProtocolPDUs	[21] MultiplePositioningProtocolPDUs	OPTIONAL }
+-- The parameter locationMethod shall be included if and only if the molr-Type is set to value 
+-- deCipheringKeys or assistanceData.
+-- The parameter gpsAssistanceData shall be included if and only if the molr-Type is set to value 
+-- assistanceData and locationMethod is set to value assistedGPS or assistedGPSandGANSS.
+-- The parameter ganssAssistanceData shall be included if and only if the molr-Type is set to value 
+-- assistanceData and locationMethod is set to value assistedGANSS or assistedGPSandGANSS.
+-- supportedGADShapes shall not be included for deferred MO-LR initiation or deferred MO-LR or MT-LR
+-- responses 
+-- multiplePositioningProtocolPDUs may only be included for E-UTRAN access.
+-- locationMethod shall not be included for E-UTRAN access.
+-- gpsAssistanceData shall not be included for E-UTRAN access.
+-- h-gmlc-address shall not be included for E-UTRAN access.
+-- locationEstimate shall not be included for E-UTRAN access.
+-- velocityEstimate shall not be included for E-UTRAN access.
+-- referenceNumber shall not be included for E-UTRAN access.
+-- periodicLDRInfo shall not be included for E-UTRAN access.
+-- locationUpdateRequest shall not be included for E-UTRAN access.
+-- sequenceNumber shall not be included for E-UTRAN access.
+-- terminationCause shall not be included for E-UTRAN access.
+-- mo-lrShortCircuit shall not be included for E-UTRAN access.
+-- ganssAssistanceData shall not be included for E-UTRAN access.
+
+
+
+MOLR-Type::= ENUMERATED {
+	locationEstimate			(0),
+	assistanceData				(1),
+	deCipheringKeys				(2),
+	... ,
+	deferredMo-lrTTTPInitiation	(3),
+	deferredMo-lrSelfLocationInitiation (4),
+	deferredMt-lrOrmo-lrTTTPLocationEstimate (5),
+	deferredMt-lrOrmo-lrCancellation (6)}
+-- exception handling:
+-- an unrecognized value shall be rejected by the receiver with a return error cause of
+-- unexpected data value.
+-- For E-UTRAN access, only locationEstimate or assistanceData shall be included
+
+LocationMethod::= ENUMERATED {
+	msBasedEOTD			(0),
+	msAssistedEOTD		(1),
+	assistedGPS			(2),
+	...,
+	msBasedOTDOA		(3),
+	assistedGANSS		(4),
+	assistedGPSandGANSS (5)
+	}
+-- exception handling:
+-- When this parameter is received with value msBasedEOTD or msAssistedEOTD and the MS 
+-- is camped on an UMTS Service Area then the receiver shall reject it 
+-- with a return error cause of unexpected data value.
+-- When this parameter is received with value msBasedOTDOA and the MS 
+-- is camped on a GSM Cell then the receiver shall reject it with a return error cause of
+-- unexpected data value.
+-- an unrecognized value shall be rejected by the receiver with a return error cause of
+-- unexpected data value.
+
+GPSAssistanceData::= OCTET STRING (SIZE (1..38))
+-- Octets 1 to 38 are coded in the same way as the octets 3 to 7+2n of Requested GPS Data IE
+-- in 3GPP TS 49.031 [14].
+
+GANSSAssistanceData::= OCTET STRING (SIZE (1..40))
+-- Octets 1 to 40 are coded in the same way as the octets 3 to 9+2n of Requested GANSS Data IE
+-- in 3GPP TS 49.031 [14] .
+
+TerminationCause ::= ENUMERATED {
+	subscriberTermination  (0),
+	uETermination     (1),
+	...} 
+	
+MultiplePositioningProtocolPDUs ::= SEQUENCE (SIZE (1..maxNumLPPMsg)) OF PositioningProtocolPDU
+
+PositioningProtocolPDU ::= OCTET STRING
+-- PositioningProtocolPDU contains a LPP message defined in 3GPP TS 36.355 [17].
+
+maxNumLPPMsg INTEGER ::= 3
+
+
+
+LCS-MOLRRes::= SEQUENCE {
+	locationEstimate		[0]	Ext-GeographicalInformation		OPTIONAL,
+	decipheringKeys			[1] DecipheringKeys					OPTIONAL,
+	...,
+	add-LocationEstimate	[2]	Add-GeographicalInformation 		OPTIONAL,
+	velocityEstimate		[3] VelocityEstimate		OPTIONAL,
+	referenceNumber 		[4] LCS-ReferenceNumber 	OPTIONAL,
+	h-gmlc-address			[5]	GSN-Address				OPTIONAL,
+	mo-lrShortCircuit		[6]	NULL					OPTIONAL,
+	reportingPLMNList		[7]	ReportingPLMNList		OPTIONAL
+	 }
+-- Parameters locationEstimate or add-LocationEstimate (one but not both) 
+-- shall be included if and only if the 
+-- molr-Type in LocationRequestArg was set to value locationEstimate.
+-- Parameter add-LocationEstimate shall not be included if the supportedGADShapes 
+-- parameter was not received in the LCS-MOLRArg.
+-- The locationEstimate and the add-locationEstimate parameters shall not be sent if
+-- the supportedGADShapes parameter has been received in LCS-MOLRArg
+-- and the shape encoded in locationEstimate or add-LocationEstimate is not marked
+-- as supported in supportedGADShapes. In such a case LCS-MOLRArg
+-- shall be rejected with error FacilityNotSupported with additional indication
+-- shapeOfLocationEstimateNotSupported.
+-- Parameter decipheringKeys shall be included if and only if the molr-Type
+-- in LocationRequestArg was set to value deCipheringKeys.
+-- Parameter velocityEstimate may only be included if the lcs-QoS in LCS-MOLRarg includes
+-- velocityRequest
+-- decipheringKeys shall not be included for E-UTRAN access.
+-- referenceNumber shall not be included for E-UTRAN access.
+-- h-gmlc-address shall not be included for E-UTRAN access.
+-- mo-lrShortCircuit shall not be included for E-UTRAN access.
+-- reportingPLMNList shall not be included for E-UTRAN access.
+
+
+
+DecipheringKeys::= OCTET STRING (SIZE (15))
+-- Octets in DecipheringKeys are coded in the same way as the octets 3 to 17 of Deciphering Key IE
+-- in 3GPP TS 49.031 [14]. I.e. these octets contain Current Deciphering Key, Next Deciphering Key and 
+-- Ciphering Key Flag.
+LCS-AreaEventRequestArg	::= SEQUENCE {
+	referenceNumber				[0]	LCS-ReferenceNumber,
+	h-gmlc-address				[1]	GSN-Address,
+	deferredLocationEventType	[3] DeferredLocationEventType,
+	areaEventInfo				[4]	AreaEventInfo,
+	... }
+
+-- the msAvailableValue in the DeferredLocationEventType is not applicable for this procedure 
+
+LCS-AreaEventReportArg	::= SEQUENCE {
+	referenceNumber				[0]	LCS-ReferenceNumber,
+	h-gmlc-address				[1]	GSN-Address,
+	... }
+
+LCS-AreaEventCancellationArg	::= SEQUENCE {
+	referenceNumber				[0]	LCS-ReferenceNumber,
+	h-gmlc-address				[1]	GSN-Address,
+	... }
+
+
+LCS-PeriodicLocationRequestArg	::= SEQUENCE {
+	referenceNumber		[0] LCS-ReferenceNumber,
+	periodicLDRInfo		[1]	PeriodicLDRInfo,
+	lcsClientExternalID	[2] LCSClientExternalID,
+	qoS					[3] LCS-QoS					OPTIONAL,
+	h-gmlc-address		[4]	GSN-Address				OPTIONAL,
+	mo-lrShortCircuit	[5]	NULL					OPTIONAL,
+	reportingPLMNList	[6]	ReportingPLMNList		OPTIONAL,
+	... }
+
+
+LCS-PeriodicLocationRequestRes	::= SEQUENCE {
+	mo-lrShortCircuit	[0]	NULL					OPTIONAL,
+	... }
+
+
+LCS-LocationUpdateArg	::= SEQUENCE {
+	referenceNumber		[0] LCS-ReferenceNumber		OPTIONAL,
+	add-LocationEstimate[1] Add-GeographicalInformation 		OPTIONAL,
+	velocityEstimate	[2] VelocityEstimate		OPTIONAL,
+	sequenceNumber		[3]	SequenceNumber			OPTIONAL,
+	... }
+-- add-LocationEstimate shall be included if and only if a location estimate was successfully
+-- transferred towards an External LCS Client or was successfully obtained for UE self location
+-- velocityEstimate may only be included if add-LocationEstimate is included
+
+LCS-LocationUpdateRes	::= SEQUENCE {
+	terminationCause 	[0] TerminationCause 		OPTIONAL,
+	... }
+
+LCS-PeriodicLocationCancellationArg	::= SEQUENCE {
+	referenceNumber		[0] LCS-ReferenceNumber,
+	h-gmlc-address		[1]	GSN-Address				OPTIONAL,
+	... }
+
+
+END
diff --git a/src/SS_EncDec.cc b/src/SS_EncDec.cc
new file mode 100644
index 0000000..89a91da
--- /dev/null
+++ b/src/SS_EncDec.cc
@@ -0,0 +1,437 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               SS_PDU_Defs.asn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.008 v13.4.0
+
+#include "SS_PDU_Defs.hh"
+#include "SS_Types.hh"
+
+namespace SS__Types
+{
+using namespace SS__PDU__Defs;
+TTCN_Module SS__EncDec("SS_EncDec", __DATE__, __TIME__);
+
+//Type definitions to transfer data between coding functions
+struct SS_Invoke_for_dec
+{
+  INTEGER               invokeId;
+  OPTIONAL<INTEGER>     linkedId;
+  Remote__Operations__Information__Objects::Code opcode;
+  OPTIONAL<OCTETSTRING> stream;
+};
+
+struct SS_ReturnResult_for_dec
+{
+  INTEGER               invokeId;
+  OPTIONAL<Remote__Operations__Information__Objects::Code> opcode;
+  OPTIONAL<OCTETSTRING> stream;
+};
+
+struct SS_ReturnError_for_dec
+{
+  INTEGER               invokeId;
+  Remote__Operations__Information__Objects::Code errorCode;
+  OPTIONAL<OCTETSTRING> stream;
+};
+
+struct SS_Reject_for_dec
+{
+  OPTIONAL<INTEGER>     invokeId;
+  Remote__Operations__Generic__ROS__PDUs::ProblemType problem;
+};
+
+
+//////////////////////////////////
+// Encoding function for SS__Invoke
+//////////////////////////////////
+OCTETSTRING enc_SS_Invoke(const SS__Invoke& pdu)
+{
+  TTCN_Buffer buf;
+
+  OCTETSTRING ret_val;
+  pdu.encode(SS__Invoke_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);
+  buf.get_string(ret_val);
+  ret_val[0] = int2oct(161,1);
+
+  return ret_val;
+}
+//////////////////////////////////
+// Encoding function for SS__ReturnResult
+//////////////////////////////////
+OCTETSTRING enc_SS_ReturnResult(const SS__ReturnResult& pdu)
+{
+  TTCN_Buffer buf;
+
+  OCTETSTRING ret_val;
+  pdu.encode(SS__ReturnResult_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);
+  buf.get_string(ret_val);
+  ret_val[0] = int2oct(162,1);
+
+  return ret_val;
+}
+//////////////////////////////////
+// Encoding function for SS__ReturnError
+//////////////////////////////////
+OCTETSTRING enc_SS_ReturnError(const SS__ReturnError& pdu)
+{
+  TTCN_Buffer buf;
+
+  OCTETSTRING ret_val;
+  pdu.encode(SS__ReturnError_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);
+  buf.get_string(ret_val);
+  ret_val[0] = int2oct(163,1);
+
+  return ret_val;
+}
+//////////////////////////////////
+// Encoding function for SS__Reject
+//////////////////////////////////
+OCTETSTRING enc_SS_Reject(const SS__Reject& pdu)
+{
+  TTCN_Buffer buf;
+
+  OCTETSTRING ret_val;
+  pdu.encode(SS__Reject_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);
+  buf.get_string(ret_val);
+  ret_val[0] = int2oct(164,1);
+
+  return ret_val;
+}
+
+//////////////////////////////////
+// Decoding function for SS__Invoke
+//////////////////////////////////
+int dec_SS_Invoke(const SS_Invoke_for_dec& params, SS__Invoke& pdu)
+{  
+  SS__Invoke__help help_pdu;
+  
+  if(params.stream.ispresent())
+  {
+    help_pdu.invokeId().present__() = params.invokeId;
+    if(params.linkedId.ispresent())
+      help_pdu.linkedId()().present__().present__() = params.linkedId;
+    else
+      help_pdu.linkedId() = OMIT_VALUE;
+
+    help_pdu.opcode() = params.opcode;
+
+    OCTETSTRING oct_stream = params.stream;
+    help_pdu.argument() = oct_stream;
+    TTCN_Buffer buf;
+    help_pdu.encode(SS__Invoke__help_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);  
+    
+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_IGNORE);

+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING);

+	  TTCN_EncDec::clear_error();

+    
+    pdu.decode(SS__Invoke_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL);
+    
+    TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+    
+    if(TTCN_EncDec::get_last_error_type() != 0) return 1;
+  }
+  else
+  {
+    pdu.invokeId().present__() = params.invokeId;
+
+    if(params.linkedId.ispresent())
+      pdu.linkedId()().present__().present__() = params.linkedId;
+    else
+      pdu.linkedId() = OMIT_VALUE;
+
+    pdu.opcode() = params.opcode;
+
+    pdu.argument() = OMIT_VALUE;
+  }
+
+  return 0;
+}
+
+//////////////////////////////////
+// Decoding function for SS__ReturnResult
+//////////////////////////////////
+int dec_SS_ReturnResult(const SS_ReturnResult_for_dec& params, SS__ReturnResult& pdu)
+{  
+  SS__ReturnResult__help help_pdu;
+
+
+  if(params.opcode.ispresent() && params.stream.ispresent())
+  {
+    help_pdu.invokeId().present__() = params.invokeId;
+    help_pdu.result()().opcode() = params.opcode;
+    OCTETSTRING oct_stream = params.stream;
+    help_pdu.result()().result() = oct_stream;
+    TTCN_Buffer buf;
+    help_pdu.encode(SS__ReturnResult__help_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);  
+    
+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_IGNORE);

+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING);

+	  TTCN_EncDec::clear_error();
+	  
+	  pdu.decode(SS__ReturnResult_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL);
+
+    TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+    
+    if(TTCN_EncDec::get_last_error_type() != 0) return 1;
+  }
+  else
+  {
+    pdu.invokeId().present__() = params.invokeId;
+    pdu.result() = OMIT_VALUE;
+  }
+
+  return 0;
+}
+
+//////////////////////////////////
+// Decoding function for SS__ReturnError
+//////////////////////////////////
+int dec_SS_ReturnError(const SS_ReturnError_for_dec& params, SS__ReturnError& pdu)
+{
+  
+  SS__ReturnError__help help_pdu;
+
+  if(params.stream.ispresent())
+  {
+    help_pdu.invokeId().present__() = params.invokeId;
+    help_pdu.errcode() = params.errorCode;
+    OCTETSTRING oct_stream = params.stream;
+    help_pdu.parameter()() = oct_stream;
+
+    TTCN_Buffer buf;
+
+    help_pdu.encode(SS__ReturnError__help_descr_, buf, TTCN_EncDec::CT_BER, BER_ENCODE_DER);  
+
+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_IGNORE);

+	  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING);

+	  TTCN_EncDec::clear_error();
+	  
+    pdu.decode(SS__ReturnError_descr_, buf, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL);
+
+    TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+    
+    if(TTCN_EncDec::get_last_error_type() != 0) return 1;
+  }
+  else
+  {
+    pdu.invokeId().present__() = params.invokeId;
+    pdu.errcode() = params.errorCode;
+    pdu.parameter() = OMIT_VALUE;
+  }
+
+  return 0;
+}
+
+//////////////////////////////////
+// Decoding function for SS__Reject
+//////////////////////////////////
+int dec_SS_Reject(const SS_Reject_for_dec& params, SS__Reject& pdu)
+{
+  if(params.invokeId.ispresent())
+    pdu.invokeId().present__() = params.invokeId;
+  else
+    pdu.invokeId().absent() = ASN_NULL_VALUE;
+
+  pdu.problem() = params.problem;
+  
+  return 0;
+}
+
+////////////////////////////////////////////////////////////////////
+// Decoding function for internal SS_TCAP_ComponentPortion
+////////////////////////////////////////////////////////////////////
+int dec__SS__TCAP__ComponentPortion(const OCTETSTRING& stream, SS__TCAP__ComponentPortion& pdu)
+{
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("dec_SS_TCAP_ComponentPortion(): Stream before decoding: ");
+    stream.log();
+    TTCN_Logger::end_event();
+  }
+
+	TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_IGNORE);

+	TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING);

+	TTCN_EncDec::clear_error();

+
+  TTCN_Buffer ttcn_buffer(stream);
+  SS__TCAP__Component    ret_sub_val;
+  int i = 0;
+
+  if(!ttcn_buffer.contains_complete_TLV()) {
+    if (TTCN_Logger::log_this_event(TTCN_Logger::TTCN_WARNING))
+    {
+      TTCN_Logger::begin_event(TTCN_Logger::TTCN_WARNING);
+      TTCN_Logger::log_event_str("dec_SS_TCAP_ComponentPortion(): there is no complete TLV in the incoming stream!");
+      TTCN_Logger::end_event();
+    }
+    return 1;
+  }
+
+  while(ttcn_buffer.contains_complete_TLV())
+  {
+    ret_sub_val.decode(SS__TCAP__Component_descr_, ttcn_buffer, TTCN_EncDec::CT_BER, BER_ACCEPT_ALL);
+    pdu[i] = ret_sub_val;
+    i++;
+    ttcn_buffer.cut();
+  }
+
+	TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("dec_SS_TCAP_ComponentPortion(): Decoded @SS_Types.SS_TCAP_ComponentPortion: ");
+    pdu.log();
+    TTCN_Logger::end_event();
+  }
+
+	return TTCN_EncDec::get_last_error_type() == TTCN_EncDec::ET_NONE ? 0 : 1;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// Main encoding function for SS_FacilityInformation. This is called from TTCN-3
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+OCTETSTRING enc__SS__FacilityInformation(const SS__FacilityInformation& pdu)
+{
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("enc_SS_FacilityInformation(): SS_FacilityInformation before encoding: ");
+    pdu.log();
+    TTCN_Logger::end_event();
+  }
+  SS__TCAP__ComponentPortion temp_val;
+  OCTETSTRING ret_val(0,NULL);
+
+  for (int i = 0; i < pdu.size_of(); i++)
+  {
+    if (pdu[i].get_selection() == SS__Component::ALT_invoke)
+    {
+       ret_val = ret_val + enc_SS_Invoke(pdu[i].invoke());
+    }
+    else if (pdu[i].get_selection() == SS__Component::ALT_returnResult)
+    {
+       ret_val = ret_val + enc_SS_ReturnResult(pdu[i].returnResult());
+    }
+    else if (pdu[i].get_selection() == SS__Component::ALT_returnError)
+    {
+       ret_val = ret_val + enc_SS_ReturnError(pdu[i].returnError());
+    }
+    else if (pdu[i].get_selection() == SS__Component::ALT_reject)
+    {
+       ret_val = ret_val + enc_SS_Reject(pdu[i].reject());
+    }
+  }
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("enc_SS_FacilityInformation(): stream after encoding: ");
+    ret_val.log();
+    TTCN_Logger::end_event();
+  }
+  return ret_val;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// Main decoding function for SS_FacilityInformation. This is called from TTCN-3
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+INTEGER dec__SS__FacilityInformation__backtrack(const OCTETSTRING& stream, SS__FacilityInformation& pdu)
+{
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("dec_SS_FacilityInformation__backtrack(): Stream before decoding: ");
+    stream.log();
+    TTCN_Logger::end_event();
+  }
+  
+  SS__TCAP__ComponentPortion temp_val;
+  int decode = dec__SS__TCAP__ComponentPortion(stream, temp_val);
+  
+  if(decode == 0) {
+
+    for (int i = 0; i < temp_val.size_of() && decode == 0; i++)
+    {
+      if (temp_val[i].get_selection() == SS__TCAP__Component::ALT_invoke)
+      {
+        SS_Invoke_for_dec par_val;
+        par_val.invokeId = temp_val[i].invoke().invokeID();
+        par_val.linkedId = temp_val[i].invoke().linkedID();
+        par_val.opcode   =   temp_val[i].invoke().operationCode();
+        par_val.stream   =   temp_val[i].invoke().parameter();
+        decode = dec_SS_Invoke(par_val, pdu[i].invoke());
+      }
+      else if (temp_val[i].get_selection() == SS__TCAP__Component::ALT_returnResult)
+      {
+        SS_ReturnResult_for_dec par_val;
+        par_val.invokeId = temp_val[i].returnResult().invokeID();
+
+        if(temp_val[i].returnResult().result().ispresent())
+        {
+          SS__TCAP__ReturnResult__Result temp_res = temp_val[i].returnResult().result();
+          par_val.opcode = temp_res.operationCode();
+          par_val.stream = temp_res.parameter();
+        }
+        else
+        {
+          par_val.opcode = OMIT_VALUE;
+          par_val.stream = OMIT_VALUE;
+        }
+        decode = dec_SS_ReturnResult(par_val, pdu[i].returnResult());
+      }
+      else if (temp_val[i].get_selection() == SS__TCAP__Component::ALT_returnError)
+      {
+        SS_ReturnError_for_dec par_val;
+        par_val.invokeId = temp_val[i].returnError().invokeID();
+        par_val.errorCode = temp_val[i].returnError().errorCode();
+        par_val.stream  =   temp_val[i].returnError().parameter();
+
+        decode = dec_SS_ReturnError(par_val, pdu[i].returnError());
+      }
+      else if (temp_val[i].get_selection() == SS__TCAP__Component::ALT_reject)
+      {
+        SS_Reject_for_dec par_val;
+        if( temp_val[i].reject().invokeID().get_selection() == SS__TCAP__Reject_invokeID::ALT_derivable)
+          par_val.invokeId = temp_val[i].reject().invokeID().derivable();
+        else
+          par_val.invokeId = OMIT_VALUE;
+        par_val.problem = temp_val[i].reject().problem();
+
+        decode = dec_SS_Reject(par_val, pdu[i].reject());
+      }
+    }
+  }
+
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC))
+  {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("dec_SS_FacilityInformation__backtrack(): Decoded @SS_Types.SS_FacilityInformation: ");
+    pdu.log();
+    TTCN_Logger::end_event();
+  }
+
+  return decode;
+}
+
+SS__FacilityInformation dec__SS__FacilityInformation(const OCTETSTRING& stream)
+{
+  SS__FacilityInformation ret;
+  dec__SS__FacilityInformation__backtrack(stream, ret);
+  return ret;
+}
+
+}//namespace
+
diff --git a/src/SS_Errors.asn b/src/SS_Errors.asn
new file mode 100644
index 0000000..5a6d1bf
--- /dev/null
+++ b/src/SS_Errors.asn
@@ -0,0 +1,56 @@
+--/////////////////////////////////////////////////////////////////////////////
+--
+-- 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:               SS_Errors.asn
+--  Rev:                R2A
+--  Prodnr:             CNL 113 832
+--  Contact:            http://ttcn.ericsson.se
+--  Reference:          3GPP TS 24.080 v13.0.0
+
+SS-Errors {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-Errors (1) version12 (12)}
+
+DEFINITIONS ::=
+
+BEGIN
+
+IMPORTS
+
+ERROR FROM
+Remote-Operations-Information-Objects {joint-iso-itu-t remote-operations(4)
+  informationObjects(5) version1(0)};
+
+-- The MAP errors
+-- unknownSubscriber, bearerServiceNotProvisioned, teleserviceNotProvisioned,
+-- illegalSS-Operation, ss-ErrorStatus, ss-NotAvailable, ss-SubscriptionViolation,
+-- ss-Incompatibility, systemFailure, dataMissing, unexpectedDataValue, facilityNotSupported,
+-- pw-RegistrationFailure, negativePW-Check, callBarred, numberOfPW-AttemptsViolation,
+-- absentSubscriber, illegalSubscriber, illegalEquipment, ussd-Busy, unknownAlphabet,
+-- forwardingViolation, forwardingFailed
+-- are imported from MAP-Errors in SS-Protocol module.
+
+-- errors definition
+resourcesNotAvailable  ERROR ::= {
+	CODE	local:127 }
+maxNumberOfMPTY-ParticipantsExceeded  ERROR ::= {
+	CODE	local:126 }
+invalidDeflectedToNumber  ERROR ::= {
+	CODE	local:125 }
+specialServiceCode  ERROR ::= {
+	CODE	local:124 }
+deflectionToServedSubscriber  ERROR ::= {
+	CODE	local:123 }
+rejectedByNetwork  ERROR ::= {
+	CODE	local:122 }
+rejectedByUser  ERROR ::= {
+	CODE	local:121 }
+
+END
diff --git a/src/SS_Operations.asn b/src/SS_Operations.asn
new file mode 100644
index 0000000..e345657
--- /dev/null
+++ b/src/SS_Operations.asn
@@ -0,0 +1,312 @@
+--/////////////////////////////////////////////////////////////////////////////
+--
+-- 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:               SS_Operations.asn
+--  Rev:                R2A
+--  Prodnr:             CNL 113 832
+--  Contact:            http://ttcn.ericsson.se
+--  Reference:          3GPP TS 24.080 v13.0.0
+
+SS-Operations {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-Operations (0) version12 (12)}
+
+DEFINITIONS ::=
+
+BEGIN
+
+EXPORTS
+
+-- exports operations
+
+-- operations defined in this specification
+processUnstructuredSS-Data, notifySS, forwardChargeAdvice, forwardCUG-Info, buildMPTY, holdMPTY, retrieveMPTY, splitMPTY, explicitCT, accessRegisterCCEntry, callDeflection, userUserService,
+lcs-LocationNotification, lcs-MOLR, lcs-AreaEventRequest, lcs-AreaEventReport, lcs-AreaEventCancellation, lcs-PeriodicLocationRequest, lcs-LocationUpdate, lcs-PeriodicLocationCancellation;
+
+IMPORTS
+
+OPERATION FROM
+Remote-Operations-Information-Objects {
+	joint-iso-itu-t remote-operations(4)
+  informationObjects(5) version1(0)}
+
+-- The MAP operations:
+-- registerSS, eraseSS, activateSS, deactivateSS, interrogateSS, registerPassword,
+-- getPassword, processUnstructuredSS-Request, unstructuredSS-Request, unstructuredSS-Notify
+-- forwardCheckSS-Indication
+-- are imported from MAP-Operations in SS-Protocol module.
+
+-- imports SS-data types
+NotifySS-Arg,
+ForwardChargeAdviceArg,
+ForwardCUG-InfoArg,
+SS-UserData,
+AccessRegisterCCEntryArg,
+CallDeflectionArg,
+UserUserServiceArg,
+LocationNotificationArg,
+LocationNotificationRes,
+LCS-MOLRArg,
+LCS-MOLRRes,
+LCS-AreaEventRequestArg,
+LCS-AreaEventReportArg,
+LCS-AreaEventCancellationArg,
+LCS-PeriodicLocationRequestArg,
+LCS-PeriodicLocationRequestRes,
+LCS-LocationUpdateArg,
+LCS-LocationUpdateRes,
+LCS-PeriodicLocationCancellationArg
+
+
+FROM SS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-DataTypes (2) version12 (12)}
+
+-- imports MAP-SS-data types 
+RegisterCC-EntryRes
+FROM MAP-SS-DataTypes {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0)
+   gsm-Network (1) modules (3) map-SS-DataTypes (14) version12 (12)}
+
+-- imports MAP-errors
+illegalSS-Operation, ss-ErrorStatus, ss-NotAvailable, ss-SubscriptionViolation,
+ss-Incompatibility, systemFailure, facilityNotSupported, callBarred, unexpectedDataValue, shortTermDenial, longTermDenial, dataMissing, forwardingViolation, forwardingFailed, positionMethodFailure
+FROM MAP-Errors {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-Errors (10) version12 (12)}
+
+-- imports SS-Errors
+resourcesNotAvailable, maxNumberOfMPTY-ParticipantsExceeded, deflectionToServedSubscriber, invalidDeflectedToNumber, specialServiceCode, rejectedByUser, rejectedByNetwork
+FROM SS-Errors {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-Errors (1) version12 (12)}
+;
+
+-- operations definition
+
+processUnstructuredSS-Data	OPERATION ::= { -- Timer T(PUSSD)= 15s to 30s 
+	ARGUMENT	SS-UserData
+	RESULT		SS-UserData
+				-- optional
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue}
+	CODE		local:19 }
+
+notifySS 	OPERATION ::= {
+	ARGUMENT	NotifySS-Arg
+	CODE		local:16 }
+
+forwardChargeAdvice 	OPERATION ::= { -- Timer T(AoC)= 1s to 40s
+	ARGUMENT	ForwardChargeAdviceArg
+	RETURN RESULT TRUE
+	CODE		local:125 }
+
+forwardCUG-Info 	OPERATION ::= {
+	ARGUMENT	ForwardCUG-InfoArg
+	CODE		local:120 }
+
+buildMPTY 	OPERATION ::= { -- Timer T(BuildMPTY)= 5s to 30s
+	RETURN RESULT TRUE
+	ERRORS	{
+			illegalSS-Operation |
+			ss-ErrorStatus |
+			ss-NotAvailable |
+			ss-Incompatibility |
+			systemFailure |
+			resourcesNotAvailable |
+			maxNumberOfMPTY-ParticipantsExceeded}
+	CODE	local:124 }
+
+holdMPTY 	OPERATION ::= { -- Timer T(HoldMPTY)= 5s to 30s
+	RETURN RESULT TRUE
+	ERRORS	{
+			illegalSS-Operation |
+			ss-ErrorStatus |
+			ss-Incompatibility |
+			facilityNotSupported |
+			systemFailure}
+	CODE	local:123 }
+
+retrieveMPTY 	OPERATION ::= { -- Timer T(RetrieveMPTY)= 5s to 30s
+	RETURN RESULT TRUE
+	ERRORS	{
+			illegalSS-Operation |
+			ss-ErrorStatus |
+			ss-Incompatibility |
+			facilityNotSupported |
+			systemFailure}
+	CODE	local:122 }
+
+splitMPTY 	OPERATION ::= { -- Timer T(SplitMPTY)= 5s to 30s
+	RETURN RESULT TRUE
+	ERRORS	{
+			illegalSS-Operation |
+			ss-ErrorStatus |
+			ss-Incompatibility |
+			facilityNotSupported |
+			systemFailure}
+	CODE	local:121 }
+
+explicitCT 	OPERATION ::= { -- Timer T(ECT)= 5s to 15s
+	RETURN RESULT TRUE
+	ERRORS	{
+			illegalSS-Operation |
+			ss-ErrorStatus |
+			ss-NotAvailable |
+			ss-Incompatibility |
+			facilityNotSupported |
+			systemFailure |
+			resourcesNotAvailable |
+			callBarred}
+	CODE	local:126 }
+
+accessRegisterCCEntry 	 OPERATION ::= { -- Timer T(AccRegCCEntry)= 30s
+	ARGUMENT	AccessRegisterCCEntryArg
+	RESULT		RegisterCC-EntryRes
+	ERRORS		{
+				systemFailure |
+				dataMissing |
+				unexpectedDataValue |
+				callBarred |
+				illegalSS-Operation |
+				ss-ErrorStatus |
+				ss-Incompatibility |
+				shortTermDenial |
+				longTermDenial |
+				facilityNotSupported}
+	CODE		local:119 }
+
+-- the timer value is defined by T308, see also in TS 24.008 for definition of timer T308
+
+callDeflection 	OPERATION ::= { -- Timer T(CD)= 30s
+	ARGUMENT	CallDeflectionArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				illegalSS-Operation |
+				ss-ErrorStatus |
+				ss-NotAvailable |
+				ss-Incompatibility |
+				facilityNotSupported |
+				systemFailure |
+				resourcesNotAvailable |
+				forwardingViolation |
+				callBarred |
+				deflectionToServedSubscriber |
+				invalidDeflectedToNumber |
+				specialServiceCode |
+				forwardingFailed}
+	CODE		local:117 }
+
+-- the timer value is defined by T305, see also in TS 24.008 for definition of timer T305
+-- extensionContainer shall not be used with this operation
+
+userUserService 	OPERATION ::= { -- Timer T(UUS3)= 10s
+	ARGUMENT	UserUserServiceArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				illegalSS-Operation |
+				ss-ErrorStatus |
+				ss-NotAvailable |
+				ss-Incompatibility |
+				facilityNotSupported |
+				systemFailure |
+				resourcesNotAvailable |
+				rejectedByNetwork |
+				rejectedByUser}
+	CODE		local:118 }
+
+-- The timer value for UUS3 is 10s; it is applicable only if UUS3 is activated by FACILITY
+-- message. If UUS service (UUS1, UUS2 or UUS3) is activated by SETUP message, no timers are
+-- needed. In those cases Return Result or Return Error must be received within certain call
+-- control messages, see 3GPP TS 24.087.
+-- extensionContainer shall not be used with this operation.
+
+
+lcs-LocationNotification	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s 
+	ARGUMENT	LocationNotificationArg
+	RESULT		LocationNotificationRes
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue}
+	CODE		local:116 }
+
+
+lcs-MOLR	OPERATION ::= { -- Timer T(LCSL)= 10s to 300s
+	ARGUMENT	LCS-MOLRArg
+	RESULT		LCS-MOLRRes
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue |
+				dataMissing |
+				facilityNotSupported |
+				ss-SubscriptionViolation |
+				positionMethodFailure}
+	CODE		local:115 }
+
+
+lcs-AreaEventRequest	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s
+	ARGUMENT	LCS-AreaEventRequestArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				systemFailure |
+				facilityNotSupported |
+				unexpectedDataValue}
+	CODE		local:114 }
+
+
+lcs-AreaEventReport	OPERATION ::= { -- Timer T(LCSL)= 10s to 300s
+	ARGUMENT	LCS-AreaEventReportArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue |
+				facilityNotSupported}
+	CODE		local:113 }
+
+
+lcs-AreaEventCancellation	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s
+	ARGUMENT	LCS-AreaEventCancellationArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				systemFailure |
+				facilityNotSupported |
+				unexpectedDataValue}
+	CODE		local:112 }
+
+lcs-PeriodicLocationRequest	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s 
+	ARGUMENT	LCS-PeriodicLocationRequestArg
+	RESULT		LCS-PeriodicLocationRequestRes
+	ERRORS		{
+				systemFailure |
+				facilityNotSupported |
+				unexpectedDataValue |
+				dataMissing }
+	CODE		local: 111 }
+
+lcs-LocationUpdate	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s 
+	ARGUMENT	LCS-LocationUpdateArg
+	RESULT		LCS-LocationUpdateRes
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue}
+	CODE		local: 110 }
+
+lcs-PeriodicLocationCancellation	OPERATION ::= { -- Timer T(LCSN)= 10s to 20s 
+	ARGUMENT	LCS-PeriodicLocationCancellationArg
+	RETURN RESULT TRUE
+	ERRORS		{
+				systemFailure |
+				unexpectedDataValue}
+	CODE		local: 109 }
+
+
+
+END
diff --git a/src/SS_PDU_Defs.asn b/src/SS_PDU_Defs.asn
new file mode 100644
index 0000000..0eb544e
--- /dev/null
+++ b/src/SS_PDU_Defs.asn
@@ -0,0 +1,135 @@
+--/////////////////////////////////////////////////////////////////////////////
+--
+-- 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:               SS_PDU_Defs.asn
+--  Rev:                R2A
+--  Prodnr:             CNL 113 832
+--  Contact:            http://ttcn.ericsson.se
+--  Reference:          3GPP TS 24.080 v13.0.0
+
+SS-PDU-Defs 
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+  Supported-SS-Operations
+  FROM
+  SS-Protocol
+
+  OPERATION, ERROR, Code
+  FROM Remote-Operations-Information-Objects {joint-iso-itu-t
+    remote-operations(4) informationObjects(5) version1(0)}
+	  
+  Invoke{}, ReturnResult{}, ReturnError{}, Reject{},
+  Invoke-help{}, ReturnResult-help{}, ReturnError-help{},
+  Errors{}, PresentInvokeId, ProblemType
+  FROM Remote-Operations-Generic-ROS-PDUs {joint-iso-itu-t
+  remote-operations(4) generic-ROS-PDUs(6) version1(0)};
+
+
+-- SS-Invoke, SS-ReturnResult, SS-ReturnError, SS-Reject 
+-- SS-Invoke-help SS-ReturnResult-help SS-ReturnError-help types
+-- (these are accessible from TTCN-3)
+SS-Invoke ::= Invoke{{PresentInvokeId}, {Supported-SS-Operations}}
+
+SS-ReturnResult ::= ReturnResult{{Supported-SS-Operations}}
+
+SS-ReturnError ::= ReturnError{{Errors {{Supported-SS-Operations}}}}
+
+SS-Reject ::= Reject --{{Errors {{Supported-SS-Operations}}}}
+
+SS-Invoke-help ::= Invoke-help{{PresentInvokeId}, {Supported-SS-Operations}}
+
+SS-ReturnResult-help ::= ReturnResult-help{{Supported-SS-Operations}}
+
+SS-ReturnError-help ::= ReturnError-help{{Errors {{Supported-SS-Operations}}}}
+
+
+-- Component Portion fields
+
+-- COMPONENT PORTION. This part is copied from TCAP_PDU_Defs.asn file
+-- with TCAP -> SS-TCAP renaming
+-- This is needed for internal coding: DON'T USE FROM TTCN !!!
+SS-TCAP-ComponentPortion ::= [UNIVERSAL 28] IMPLICIT SEQUENCE (SIZE(1..MAX)) OF
+                                                              SS-TCAP-Component
+
+
+-- COMPONENT TYPE. Recommendation X.229 defines four Application Protocol Data
+-- Units (APDUs).
+
+SS-TCAP-Component ::=           CHOICE
+  {
+  invoke                    [1] IMPLICIT           SS-TCAP-Invoke,
+  returnResult              [2] IMPLICIT           SS-TCAP-ReturnResult,
+  returnError               [3] IMPLICIT           SS-TCAP-ReturnError,
+  reject                    [4] IMPLICIT           SS-TCAP-Reject
+  }
+
+-- The Components are sequences of data elements.
+SS-TCAP-Invoke ::=              SEQUENCE
+  {
+  invokeID                            SS-TCAP-InvokeIdType,
+  linkedID            [0] IMPLICIT    SS-TCAP-InvokeIdType        OPTIONAL,
+  operationCode                       Code,
+  parameter                           ANY DEFINED BY operationCode OPTIONAL
+  }
+     -- ethgry(11/July/02): ANY and ANY DEFINED BY handled in a special,
+     -- transparent way at encoding/decoding:
+     -- its value notation shall be a simple octet string, which will be
+     -- directly copied (i.e without an additional tag and length fields)
+     -- into the encoded stream and will be fetched from the received
+     -- stream and passed to the abstract level as an octet string.
+
+
+-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER
+-- or the keyword ARGUMENT in the type definition of a particular operation.
+
+SS-TCAP-ReturnResult ::=        SEQUENCE
+  {
+  invokeID           SS-TCAP-InvokeIdType,
+  result             SS-TCAP-ReturnResult-Result OPTIONAL
+  }
+
+SS-TCAP-ReturnResult-Result ::= SEQUENCE
+  {
+   operationCode                   Code,
+   parameter                       ANY DEFINED BY operationCode OPTIONAL
+      -- ethgry: See comment to Invoke on the use of ANY 
+   }
+
+-- ANY is filled by the single ASN.1 data type following the keyword RESULT in
+-- the type definition of a particular operation.
+
+SS-TCAP-ReturnError ::=         SEQUENCE
+  {
+  invokeID                           SS-TCAP-InvokeIdType,
+  errorCode                          Code,
+  parameter                          ANY DEFINED BY errorCode OPTIONAL
+     -- ethgry: See comment to Invoke on the use of ANY
+  }
+
+-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER
+-- in the type definition of a particular error.
+SS-TCAP-Reject ::=              SEQUENCE
+  {
+  invokeID                                         CHOICE
+    {
+    derivable                                    SS-TCAP-InvokeIdType,
+    not-derivable                                NULL
+    },
+  problem                                        ProblemType
+  }
+
+SS-TCAP-InvokeIdType ::=        INTEGER (-128..127)
+
+END
diff --git a/src/SS_Protocol.asn b/src/SS_Protocol.asn
new file mode 100644
index 0000000..f599dce
--- /dev/null
+++ b/src/SS_Protocol.asn
@@ -0,0 +1,66 @@
+--/////////////////////////////////////////////////////////////////////////////
+--
+-- 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:               SS_Protocol.asn
+--  Rev:                R2A
+--  Prodnr:             CNL 113 832
+--  Contact:            http://ttcn.ericsson.se
+--  Reference:          3GPP TS 24.080 v13.0.0
+ 
+ 
+SS-Protocol {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0)
+   gsm-Access (2) modules (3) ss-Protocol (3) version12 (12)}
+
+DEFINITIONS ::=
+
+BEGIN
+
+IMPORTS
+
+OPERATION
+FROM Remote-Operations-Information-Objects {
+joint-iso-itu-t remote-operations(4) informationObjects(5) version1(0)}
+
+-- imports operations
+
+-- imports operation from MAP-MobileServiceOperations
+forwardCheckSS-Indication
+FROM MAP-MobileServiceOperations {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-MobileServiceOperations (5) version12 (12)}
+
+-- imports operations from MAP-SupplementaryServiceOperations
+registerSS, eraseSS, activateSS, deactivateSS, interrogateSS, registerPassword, getPassword,
+processUnstructuredSS-Request, unstructuredSS-Request, unstructuredSS-Notify, eraseCC-Entry
+FROM MAP-SupplementaryServiceOperations {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
+   map-SupplementaryServiceOperations (8) version12 (12)}
+
+-- imports operations from SS-Operations
+processUnstructuredSS-Data, notifySS, forwardChargeAdvice, buildMPTY, holdMPTY, retrieveMPTY,
+splitMPTY, explicitCT, forwardCUG-Info, accessRegisterCCEntry, callDeflection, userUserService,
+lcs-LocationNotification, lcs-MOLR, lcs-AreaEventRequest, lcs-AreaEventReport, lcs-AreaEventCancellation, lcs-PeriodicLocationRequest, lcs-LocationUpdate, lcs-PeriodicLocationCancellation
+FROM SS-Operations {
+   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
+   ss-Operations (0) version12 (12)} 
+
+;
+
+Supported-SS-Operations OPERATION ::= {forwardCheckSS-Indication | registerSS | eraseSS | 
+	activateSS | deactivateSS | interrogateSS | registerPassword | getPassword | 
+	processUnstructuredSS-Request | unstructuredSS-Request | unstructuredSS-Notify | eraseCC-Entry | 
+	processUnstructuredSS-Data | notifySS | forwardChargeAdvice | buildMPTY | holdMPTY | 
+	retrieveMPTY | splitMPTY | explicitCT | forwardCUG-Info | accessRegisterCCEntry | 
+	callDeflection | userUserService | lcs-LocationNotification | lcs-MOLR | lcs-AreaEventRequest |	lcs-AreaEventReport | lcs-AreaEventCancellation | lcs-PeriodicLocationRequest | lcs-LocationUpdate | lcs-PeriodicLocationCancellation }
+
+
+
+END
diff --git a/src/SS_Types.ttcn b/src/SS_Types.ttcn
new file mode 100644
index 0000000..c9898ca
--- /dev/null
+++ b/src/SS_Types.ttcn
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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:               SS_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 832
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 24.080 v13.0.0
+
+module SS_Types
+{
+
+import from SS_PDU_Defs all;
+
+//Coding functions
+external function enc_SS_FacilityInformation (in SS_FacilityInformation pdu) return octetstring;
+external function dec_SS_FacilityInformation (in octetstring stream) return SS_FacilityInformation;
+external function dec_SS_FacilityInformation_backtrack (in octetstring stream, out SS_FacilityInformation pdu) return integer;
+
+//Type for extracted facilityInformation in Facility IE
+type record of SS_Component SS_FacilityInformation;
+
+//24.080 3.6.1
+type union SS_Component
+{
+  SS_Invoke       invoke,
+  SS_ReturnResult returnResult,
+  SS_ReturnError  returnError,
+  SS_Reject       reject
+}
+
+}