diff --git a/demo/Isobus.ttcn b/demo/Isobus.ttcn
index 4ac98b8..bfc7afa 100644
--- a/demo/Isobus.ttcn
+++ b/demo/Isobus.ttcn
@@ -11,12 +11,11 @@
 //  File:               Isobus.ttcn
 //  Description:        Encoder / Decoder for Isobus message frames
 //
-
+// Revision R1A
 
 module Isobus {
 import from General_Types all
 import from Can all
-import from IsobusMessageTypes all
 import from IsobusCMMessageTypes all
 import from IsobusNMMessageTypes all
 import from IsobusVTMessageTypes all
@@ -75,14 +74,17 @@
 
 
 type union AnyIsoBusPdu {
-  TopLevelMessage_VT2ECU_PDU vt2ecu,  // Message Virtual Terminal (VT) to ECU
-  TopLevelMessage_ECU2VT_PDU ecu2vt,   // Message ECU to Virtual Terminal (VT)
+  ETP_DT                     etp_dt,  // extended TP data transfer
+  ETP_CM                     etp_cm,  // extended TP connection management 
+  VT2ECU                     vt2ecu,  // Message Virtual Terminal (VT) to ECU
+  ECU2VT                     ecu2vt,  // Message ECU to Virtual Terminal (VT)
   RequestForAddressClaimed   requestForAddressClaimed,
-  TP_DT                      tp_dt,
-  TP_CM                      tp_cm,
-  CannotClaimSourceAddress cannotClaimSourceAddress,
-  AddressClaimed addressClaimed,
-  CommandedAddress commandedAddress
+  TP_DT                      tp_dt,   // TP data transfer
+  TP_CM                      tp_cm,   // TP connection management
+  NetworkMessage             networkMessage, // Network Message according ISO 11873-4
+  CannotClaimSourceAddress   cannotClaimSourceAddress,
+  AddressClaimed             addressClaimed,
+  CommandedAddress           commandedAddress
   // other upper layer isobus protocols like Task Comtroller are added here ...
 }
 with { variant "" }
@@ -97,17 +99,22 @@
   J1939mod            can_j1939,
   AnyIsoBusPdu        can_pdu 
 }with {
-  variant (can_pdu) "CROSSTAG( 
+  variant (can_pdu) "CROSSTAG(
+  etp_dt,                   can_j1939.comp = 'C70000'O;  //199
+  etp_cm,                   can_j1939.comp = 'C80000'O;  //200
   vt2ecu,                   can_j1939.comp = 'E60000'O;  //230
   ecu2vt,                   can_j1939.comp = 'E70000'O;  //231
   requestForAddressClaimed, can_j1939.comp = 'EA0000'O;  //234
-  tp_dt,                    can_j1939.comp = 'EB0000'O;  
-  tp_cm,                    can_j1939.comp = 'EC0000'O;  
-  cannotClaimSourceAddress, can_j1939.comp = 'EEFFFE'O; //238 all and conjuction needed!!!!!!
+  tp_dt,                    can_j1939.comp = 'EB0000'O;  //235
+  tp_cm,                    can_j1939.comp = 'EC0000'O;  //236
+  networkMessage,           can_j1939.comp = 'ED0000'O;  //237
+  cannotClaimSourceAddress, can_j1939.comp = 'EEFFFE'O;  //238 all and conjuction needed!!!!!!
   addressClaimed,           can_j1939.comp = 'EEFF00'O;  //238 all and conjuction needed!!!!!!
   commandedAddress,         can_j1939.comp = 'FED800'O)" //254 all and conjuction needed!!!!!!
 }
 
+
+
 //---------------------------------------------------------------------------------------
 function j1939frame2can(in CAN_frame_j1939 p_can_frame_j1939, in Priority p_priority, in DestinationAddress p_da, in SourceAddress p_sa) return CAN_frame {
   //---------------------------------------------------------------------------------------
@@ -125,22 +132,43 @@
     ((p_j1939.res) << 25) or4b (int2bit(bit2int(p_priority), 32) << 26))
   return v_can_id
 }
+
+/*
+function j1939id2canid(in J1939 p_j1939) return CAN_id{
+var CAN_id v_can_id
+v_can_id := (p_j1939.sa << 0) or4b (p_j1939.ps << 8) or4b (p_j1939.pf << 16) or4b bit2oct(p_j1939.dp << 24) or4b 
+bit2oct(p_j1939.res << 25) or4b bit2oct(p_j1939.prio << 26)
+return v_can_id
+}
+*/
+
+function j1939id2canid(in J1939 p_j1939) return CAN_id{
+  var CAN_id v_can_id
+
+  v_can_id := int2oct(
+    oct2int(p_j1939.sa) + oct2int(p_j1939.ps)*256 + oct2int(p_j1939.pf) * 256 * 256 + 
+    bit2int(p_j1939.dp) * 256 * 256 * 256 + bit2int(p_j1939.res) * 256 * 256 * 256 * 2 + 
+    bit2int(p_j1939.prio) * 256 * 256 * 256 * 2 * 2, 
+    4 )
+  return v_can_id
+}
+
 //---------------------------------------------------------------------------------------
 function can2j1939frame(CAN_frame p_can_frame) return CAN_frame_j1939 {
   //--------------------------------------------------------------------------------------- 
   var CAN_frame_j1939 v_can_frame_j1939
 
-  log("can_id", p_can_frame.can_id)  
-  log("can_pdu", p_can_frame.can_pdu)
+  //log("can_id", p_can_frame.can_id)  
+  //log("can_pdu", p_can_frame.can_pdu)
 
   v_can_frame_j1939:=f_decode_CAN_frame_j1939(p_can_frame.can_id& p_can_frame.can_pdu)
 
-  log("Higher layer octet pdustring: ", v_can_frame_j1939)
+  //log("Higher layer octet pdustring: ", v_can_frame_j1939)
   return v_can_frame_j1939
 }
 
 function canid2j1939(in CAN_id p_can_id) return J1939 {
-//--------------------------------------------------------------------------------------- 
+  //--------------------------------------------------------------------------------------- 
 
   var bitstring v_can_id_bitstring:= oct2bit(p_can_id)
   var J1939 v_j1939
@@ -151,8 +179,8 @@
   v_j1939.pf   :=p_can_id[1];//(p_can_id and4b ISOBUS_PDUFORMAT_MASK) >> 2   // shift 16 bits = 2 octets
   v_j1939.ps   :=p_can_id[2];// (p_can_id and4b ISOBUS_PDUSPECIFIC_MASK) >> 1 // shift  8 bits = 1 octet
   v_j1939.sa   :=p_can_id[3];//(p_can_id and4b ISOBUS_SOURCEADDRESS_MASK)
-  
-   return v_j1939
+
+  return v_j1939
 }
 
 //********************************************************************************-
@@ -290,7 +318,6 @@
 function f_decode_CAN_frame_j1939(in octetstring data) return CAN_frame_j1939
 //---------------------------------------------------------------------------
 {
-
   return f_map_mod2frame(decode_CAN_frame_j1939mod(f_insert_aux_hdr(data)))
 
 
@@ -298,3 +325,4 @@
 
 
 } with { encode "RAW" } 
+
diff --git a/demo/IsobusCMMessageTypes.ttcn b/demo/IsobusCMMessageTypes.ttcn
index 276916e..715dcac 100644
--- a/demo/IsobusCMMessageTypes.ttcn
+++ b/demo/IsobusCMMessageTypes.ttcn
@@ -1,61 +1,69 @@
-/* Copyright (c) 2010, 2016  Ericsson 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
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
-
-
 module IsobusCMMessageTypes {
 import from General_Types all
 import from IsobusMessageTypes all
 
+type integer SEQ_NO (1..255) with { variant "FIELDLENGTH(8)" }
+type integer NUMBER_OF_PACKETS (1..255) with { variant "FIELDLENGTH(8)" }
+
 type OCT1 Ctrl
 
 type record RequestToSend{
-  Ctrl           ctrl ('10'O),
-  INT2           msgSizeInByte,
-  INT1           totalNumberOfPackets,
-  INT1           maxNoOfPacketsInResponseToCTS,
-  PGN            pgnOfMultiPacketMessage
+  Ctrl               ctrl ('10'O),
+  INT2               msgSizeInBytes,
+  NUMBER_OF_PACKETS  totalNumberOfPackets,
+  INT1               maxNoOfPacketsInResponseToCTS,
+  PGN                pgnOfMultiPacketMessage
 } with { variant "" };
 
 type record ClearToSend{
-  Ctrl           ctrl ('11'O),
-  INT1           totalNumberOfPackets,
-  INT1           nextPacketNumber,
-  OCT1           reserved4  ('FF'O),
-  OCT1           reserved5  ('FF'O),
-  PGN            pgnOfMultiPacketMessage
+  Ctrl               ctrl ('11'O),
+  NUMBER_OF_PACKETS  totalNumberOfPackets,
+  INT1               nextPacketNumber,
+  OCT1               reserved4  ('FF'O),
+  OCT1               reserved5  ('FF'O),
+  PGN                pgnOfMultiPacketMessage
 } with { variant "" };
 
 type record EndOfMessageAcknowledgement{
-  Ctrl           ctrl ('13'O),
-  INT2           msgSizeInByte,
-  INT1           totalNumberOfPackets,
-  OCT1           reserved5  ('FF'O),
-  PGN            pgnOfMultiPacketMessage
+  Ctrl               ctrl ('13'O),
+  INT2               msgSizeInByte,
+  NUMBER_OF_PACKETS  totalNumberOfPackets,
+  OCT1               reserved5  ('FF'O),
+  PGN                pgnOfMultiPacketMessage
 } with { variant "" };
 
+
+type enumerated e_ConnectionAbort_AbortReason { 
+  alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother                 (1),
+  systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated (2),
+  aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession                       (3),
+  cts_MessagesReceivedWhenDataTransferIsInProgress                                   (4),
+  maximumRetransmitRequestLimitReached                                               (5),
+  unexpectedDataTransferPacket                                                       (6),
+  badSequenceNumber                                                                  (7),
+  duplicateSequenceNumber                                                            (8),
+  iso_11783_7_error_code_251                                                       (251),
+  iso_11783_7_error_code_252                                                       (252), 
+  iso_11783_7_error_code_253                                                       (253),
+  iso_11783_7_error_code_254                                                       (254),
+  iso_11783_7_error_code_255                                                       (255)}
+with {variant "PADDING(octet)" };
+
 type record ConnectionAbort{
-  Ctrl           ctrl ('FF'O),
-  OCT1           connectionAbortReason,
-  OCT1           reserved3  ('FF'O),
-  OCT1           reserved4  ('FF'O),
-  OCT1           reserved5  ('FF'O),
-  PGN            pgnOfMultiPacketMessage
+  Ctrl               ctrl ('FF'O),
+  e_ConnectionAbort_AbortReason        connectionAbortReason,
+  OCT1               reserved3  ('FF'O),
+  OCT1               reserved4  ('FF'O),
+  OCT1               reserved5  ('FF'O),
+  PGN                pgnOfMultiPacketMessage
 } with { variant "" };
 
-type record BroadcastAnnonce{
-  Ctrl           ctrl ('20'O),
-  INT2           msgSizeInByte,
-  INT1           totalNumberOfPackets,
-  OCT1           reserved5  ('FF'O),
-  PGN            pgnOfMultiPacketMessage
+type record BroadcastAnnounce{
+  Ctrl               ctrl ('20'O),
+  INT2               msgSizeInByte,
+  NUMBER_OF_PACKETS  totalNumberOfPackets,
+  OCT1               reserved5  ('FF'O),
+  PGN                pgnOfMultiPacketMessage
 } with { variant "" };
 
 type union TP_CM
@@ -63,11 +71,11 @@
   RequestToSend                   requestToSend,
   ClearToSend                     clearToSend,
   EndOfMessageAcknowledgement     endOfMessageAcknowledgement,
-  BroadcastAnnonce                broadcastAnnounce,
+  BroadcastAnnounce               broadcastAnnounce,
   ConnectionAbort                 connectionAbort
 }
 with {variant "TAG	(
-  // put all ECU2VT request messages here
+  // put all TP_CM request messages here
   requestToSend,                ctrl = '10'O;
   clearToSend,                  ctrl = '11'O;
   endOfMessageAcknowledgement,  ctrl = '13'O;
@@ -75,11 +83,101 @@
   connectionAbort,              ctrl = 'FF'O;
   ) " 
 }
+// ETP_CM
+type integer ETP_MSG_SIZE (1786..117440505) 
+with { variant "FIELDLENGTH(32)" };
 
+type record ExtendedMessageRequestToSend{
+  Ctrl               ctrl ('20'O),
+  ETP_MSG_SIZE       msgSizeInBytes,
+  PGN                pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type integer ETP_NextPacketNumberToSend (0..16777215) 
+with { variant "FIELDLENGTH(32)" };
+
+type record ExtendedMessageClearToSend{
+  Ctrl               ctrl ('21'O),
+  INT1               NumberOfPacketsToSend,
+  ETP_NextPacketNumberToSend   nextPacketNumberToSend,
+  PGN                pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type integer ETP_NoPacketForOffset (1..255) 
+with { variant "FIELDLENGTH(8)" };
+
+type record ExtendedMessageDataPacketOffset{
+  Ctrl               ctrl ('22'O),
+  ETP_NoPacketForOffset numberOfPacketsToWhichToApplyTheOffset,
+  NUMBER_OF_PACKETS  totalNumberOfPackets,
+  ETP_NextPacketNumberToSend    dataPacketOffset,
+  PGN                pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type record ExtendedMessageEndOfMessageAcknowledgement{
+  Ctrl               ctrl ('23'O),
+  ETP_MSG_SIZE       numberOfBytesTransferred,
+  PGN                pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type enumerated e_ETP_ConnectionAbort_AbortReason { 
+  alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother                 (1),
+  systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated (2),
+  aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession                       (3),
+  cts_MessagesReceivedWhenDataTransferIsInProgress                                   (4),
+  maximumRetransmitRequestLimitReached                                               (5),
+  unexpectedDataTransferPacket                                                       (6),
+  badSequenceNumber                                                                  (7),
+  duplicateSequenceNumber                                                            (8),
+  unexpectedEDPO_Packet                                                              (9),
+  unexpectedEDPO_PGN                                                                (10),
+  edpo_numberOfPacketsIsGreaterThanCTS                                              (11),
+  badEDPO_Offset                                                                    (12),
+  unexpectedECTS_PGN                                                                (14),
+  ECTS_requestedPacketsExceedsMessageSize                                           (15),
+  iso_11783_7_error_code_251                                                       (251),
+  iso_11783_7_error_code_252                                                       (252), 
+  iso_11783_7_error_code_253                                                       (253),
+  iso_11783_7_error_code_254                                                       (254),
+  iso_11783_7_error_code_255                                                       (255)}
+with {variant "PADDING(octet)" };
+
+type record ExtendedMessageConnectionAbort{
+  Ctrl               ctrl ('FF'O),
+  e_ETP_ConnectionAbort_AbortReason        connectionAbortReason,
+  OCT1               reserved3  ('FF'O),
+  OCT1               reserved4  ('FF'O),
+  OCT1               reserved5  ('FF'O),
+  PGN                pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type union ETP_CM
+{
+  ExtendedMessageRequestToSend                   extendedMessageRequestToSend,
+  ExtendedMessageClearToSend                     extendedMessageClearToSend,
+  ExtendedMessageDataPacketOffset                extendedMessageDataPacketOffset,
+  ExtendedMessageEndOfMessageAcknowledgement     extendedMessageEndOfMessageAcknowledgement,
+  ExtendedMessageConnectionAbort                 extendedMessageConnectionAbort
+}
+with {variant "TAG	(
+  // put all ETP_CM request messages here
+  extendedMessageRequestToSend,                ctrl = '20'O;
+  extendedMessageClearToSend,                  ctrl = '21'O;
+  extendedMessageDataPacketOffset,             ctrl = '22'O;
+  extendedMessageEndOfMessageAcknowledgement,  ctrl = '23'O;
+  extendedMessageConnectionAbort,              ctrl = 'FF'O;
+  ) " 
+}
 
 type record TP_DT{
-  INT1 seq_no,
-  OCT7 data
+  SEQ_NO seq_no,
+  OCT7   data
+} with { variant "" }
+
+type record ETP_DT{
+  SEQ_NO seq_no,
+  OCT7   data
 } with { variant "" }
 
 } with { encode "RAW" } 
+
diff --git a/demo/IsobusMessageTypes.ttcn b/demo/IsobusMessageTypes.ttcn
index d44a57b..e706f17 100644
--- a/demo/IsobusMessageTypes.ttcn
+++ b/demo/IsobusMessageTypes.ttcn
@@ -1,12 +1,7 @@
-/* Copyright (c) 2010, 2016  Ericsson 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
-*
+/*
 * Contributors:
 * Michael Josenhans
-******************************************************************************/
+*/
 
 module IsobusMessageTypes {
 
@@ -14,12 +9,14 @@
 type integer INT24nb (0..16777215) with { variant "FIELDLENGTH(24), COMP(nosign), BYTEORDER(last)" };
 type INT24nb PGN
 
-
-
+type bitstring BIT21 length(21) with { variant "FIELDLENGTH(21)" };
+  
 type integer INT2 (0..65535) 
 with { variant "FIELDLENGTH(16)" };
 
 type integer INT3 (0..16777215) 
 with { variant "FIELDLENGTH(24)" };
+
 }
 with { encode "RAW" }
+
diff --git a/demo/IsobusNMMessageTypes.ttcn b/demo/IsobusNMMessageTypes.ttcn
index 2e293eb..7b2171c 100644
--- a/demo/IsobusNMMessageTypes.ttcn
+++ b/demo/IsobusNMMessageTypes.ttcn
@@ -1,12 +1,7 @@
-/* Copyright (c) 2010, 2016  Ericsson 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
-*
+/*
 * Contributors:
 * Michael Josenhans
-******************************************************************************/
+*/
 
 module IsobusNMMessageTypes {
 
@@ -17,7 +12,38 @@
 
 type OCT1 PDUFormat
 type OCT1 SourceAddress
-type OCT8 NAME 
+//type OCT8 NAME 
+
+type bitstring Priority length(6)
+with {
+  variant "ALIGN(left)";
+  variant "FIELDLENGTH(6)"
+}
+
+type BIT1  SelfConfigurableAddressBits
+type BIT3  IndustryGroupBits
+type BIT4  DeviceClassInstanceBits
+type BIT7  DeviceClassBits
+type BIT1  ReservedBits
+type BIT8  FunctionBits
+type BIT5  FunctionInstanceBits
+type BIT3  ECUInstanceBits
+type BIT11 ManufacturerCodeBits
+type BIT21 IdentityNumberBits
+
+type record NAME {
+  SelfConfigurableAddressBits selfConfigurableAddressValue,
+  IndustryGroupBits           industryGroupValue,
+  DeviceClassInstanceBits     deviceClassInstanceValue,
+  DeviceClassBits             deviceClassValue,
+  ReservedBits                reserveValued,
+  FunctionBits                functionValue,
+  FunctionInstanceBits        functionInstanceValue,
+  ECUInstanceBits             ecuInstancceValue,
+  ManufacturerCodeBits        manufacturerCodeValue,
+  IdentityNumberBits          identityNumberBits
+} with { variant "FIELDORDER(msb)" }
+
 
 type record CannotClaimSourceAddress
 {
@@ -40,4 +66,397 @@
   SourceAddress newSourceAddress
 } with { variant "" }
 
+// --------- NetworkMessage -------------
+
+type INT1 Function
+
+type record N_MFDB_Request 
+{
+  Function                                  MsgFunction (0),
+  PortPair                                  portPair,  
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type record N_MFDB_Response
+{
+  Function                                  MsgFunction (1),
+  PortPair                                  portPair,  
+  e_FilterMode                              filterMode,
+  record length (1..infinity) of PGN        pgnEntries
+} with {variant "" };
+
+
+type record N_MFDB_Add
+{
+  Function                                  MsgFunction (2),
+  PortPair                                  portPair,  
+  record length (1..infinity) of PGN        pgnEntries
+} with {variant "" };
+
+type record N_MFDB_Delete
+{
+  Function                                  MsgFunction (3),
+  PortPair                                  portPair,  
+  record length (1..infinity) of PGN        pgnEntries
+} with {variant "" };
+
+type record N_MFDB_Clear 
+{
+  Function                                  MsgFunction (4),
+  PortPair                                  portPair,  
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type record N_MFDB_Create_Entry
+{
+  Function                                  MsgFunction (6),
+  PortPair                                  portPair,  
+  e_FilterMode                              filterMode,
+  record length (1..infinity) of PGN        pgnEntries
+} with {variant "" };
+
+type record PGNEntry
+{
+  INT1                                      maxTransferRate,
+  PGN                                       pgn,
+  NAME                                      name,
+  OCT8                                      nameQualifier
+} with {variant "" };
+
+type record N_MFDBNQ_Add
+{
+  Function                                  MsgFunction (7),
+  PortPair                                  portPair,  
+  e_FilterMode                              filterMode,
+  OCT1                                      reserved4  ('FF'O),  
+  record length (1..infinity) of PGNEntry   pgnEntries
+} with {variant "" };
+
+
+type record N_NT_Request 
+{
+  Function                                  MsgFunction (64),
+  PortNibble                                portPair,  
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type record N_NT_Response 
+{
+  Function                                      MsgFunction (65),
+  PortNibble                                    portPair,  
+  record length (1..infinity) of SourceAddress  SourceAddressEntries
+} with {variant "" };
+
+type record N_NTX_Request 
+{
+  Function                                  MsgFunction (66),
+  PortNibble                                portPair,  
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+
+type record SA_NAME_pair
+{
+  SourceAddress                             sourceAddress,
+  NAME                                      name
+} with {variant "" };
+
+type record N_NTX_Response 
+{
+  Function                                    MsgFunction (67),
+  PortNibble                                  portPair,  
+  INT1                                        numberOfReportedPorts,
+  record length (1..infinity) of SA_NAME_pair sourceaddress_NAME_pairs
+} with {
+  variant (numberOfReportedPorts) "LENGTHTO(sourceaddress_NAME_pairs)";
+  variant (numberOfReportedPorts) "UNIT(elements)"
+}
+
+type enumerated e_ParametricIdentifier { 
+  requestAllParameters                         (0),
+  buffersize                                   (1),
+  maximumFilterDatabaseSize                    (2),
+  numberOfFilterDatabaseEntries                (3),
+  maximumNumberOfMessagesReceivedPerSecond     (4),
+  maximumNumberOfMessagesForwardedPerSecond    (5),
+  maximumNumberOfMessagesFilteredPerSecond     (6),
+  maximumTransitDelayTime_ms                   (7),
+  averageTransitDelayTime_ms                   (8),
+  numberOfMessagesLostDueToBufferOverflow      (9),
+  numberOfMessagesWithExcessTransitDelayTime  (10),
+  averageNumberOfMessagesReceivedPerSecond    (11),
+  averageNumberOfMessagesForwardedPerSecond   (12),
+  averageNumberOfMessagesFilteredPerSecond    (13),
+  uptimeSinceLastPowerOnReset_s               (14),
+  numberOfPorts                               (15),
+  networkInterconnectionUnitType              (16),
+  reserved                                   (255) // for message padding (workaround) 
+}
+with {variant "PADDING(octet)"}
+
+type record N_GP_Request 
+{
+  Function                                    MsgFunction (128),
+  record length (6..255) of e_ParametricIdentifier parametricIdentifiers
+  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
+  // this is the easiest way to handle it
+} with {
+  variant "" }
+
+// begin not used
+// the following is currently not used as it is impossible to handle it with raw encoding
+type OCT2 Buffersize
+type OCT2 MaximumFilterDatabaseSize
+type OCT2 NumberOfFilterDatabaseEntries
+type OCT2 MaximumNumberOfMessagesReceivedPerSecond
+type OCT2 MaximumNumberOfMessagesForwardedPerSecond
+type OCT2 MaximumNumberOfMessagesFilteredPerSecond
+type OCT2 MaximumTransitDelayTime_ms
+type OCT2 AverageTransitDelayTime_ms
+type OCT2 NumberOfMessagesLostDueToBufferOverflow
+type OCT2 NumberOfMessagesWithExcessTransitDelayTime
+type OCT2 AverageNumberOfMessagesReceivedPerSecond
+type OCT2 AverageNumberOfMessagesForwardedPerSecond
+type OCT2 AverageNumberOfMessagesFilteredPerSecond
+type OCT4 UptimeSinceLastPowerOnReset_s
+type OCT1 NumberOfPorts
+type OCT1 NetworkInterconnectionUnitType
+type OCT1 Reserved ('FF'O)
+
+type union RequestedParametric
+{
+  Buffersize                                 buffersize,
+  MaximumFilterDatabaseSize                  maximumFilterDatabaseSize,
+  NumberOfFilterDatabaseEntries              numberOfFilterDatabaseEntries,
+  MaximumNumberOfMessagesReceivedPerSecond   maximumNumberOfMessagesReceivedPerSecond,
+  MaximumNumberOfMessagesForwardedPerSecond  maximumNumberOfMessagesForwardedPerSecond,
+  MaximumNumberOfMessagesFilteredPerSecond   maximumNumberOfMessagesFilteredPerSecond,
+  MaximumTransitDelayTime_ms                 maximumTransitDelayTime_ms,
+  AverageTransitDelayTime_ms                 averageTransitDelayTime_ms,
+  NumberOfMessagesLostDueToBufferOverflow    numberOfMessagesLostDueToBufferOverflow,
+  NumberOfMessagesWithExcessTransitDelayTime numberOfMessagesWithExcessTransitDelayTime, 
+  AverageNumberOfMessagesReceivedPerSecond   averageNumberOfMessagesReceivedPerSecond,
+  AverageNumberOfMessagesForwardedPerSecond  averageNumberOfMessagesForwardedPerSecond,
+  AverageNumberOfMessagesFilteredPerSecond   averageNumberOfMessagesFilteredPerSecond,
+  UptimeSinceLastPowerOnReset_s              uptimeSinceLastPowerOnReset_s,
+  NumberOfPorts                              numberOfPorts,  
+  NetworkInterconnectionUnitType             networkInterconnectionUnitType,
+  Reserved                                   reserved
+} with {variant ""}
+
+// end not used
+
+type record N_GP_Response
+{
+  Function                                  MsgFunction (129),
+  OCT1                                      requestedParametrics [6 .. 255]
+  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
+  // this is the easiest way to handle it
+} with {
+  variant "" }
+
+type record N_GP_Reset_Statistics 
+{
+  Function                                  MsgFunction (130),
+  PortNibble                                portPair,  
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type record N_SP_Request 
+{
+  Function                                  MsgFunction (131),
+  PortPair                                  portPair, 
+  record length (5..255) of e_ParametricIdentifier parametricIdentifiers
+  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
+  // this is the easiest way to handle it
+} with {
+  variant "" }
+  
+type record N_SP_Response
+{
+  Function                                  MsgFunction (132),
+  PortPair                                  portPair,  
+  OCT1                                      requestedParametrics [5 .. 255]
+  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
+  // this is the easiest way to handle it
+} with {
+  variant "" }
+  
+  
+  
+type record N_SP_Reset_Statistics 
+{
+  Function                                  MsgFunction (133),
+  PortPair                                  portPair, 
+  OCT1                                      reserved3  ('FF'O),
+  OCT1                                      reserved4  ('FF'O),
+  OCT1                                      reserved5  ('FF'O),
+  OCT1                                      reserved6  ('FF'O),
+  OCT1                                      reserved7  ('FF'O),
+  OCT1                                      reserved8  ('FF'O)
+} with {
+  variant "" }  
+
+
+type record N_OC_Request
+{
+  Function                                  MsgFunction (192),
+  PortPair                                  portPair,  
+  NAME                                      nameOfCF
+} with {
+  variant "" }
+
+type record N_CC_Request
+{
+  Function                                  MsgFunction (193),
+  PortPair                                  portPair,  
+  NAME                                      nameOfCF
+} with {
+  variant "" }  
+  
+type enumerated e_Status { 
+  failure                         (0),
+  success                         (1)
+}
+with {variant "PADDING(octet)"} 
+ 
+type enumerated e_FailureReasonCode { 
+  cannotFindCFwithNAME                         (0),
+  numberOfConnectionsToNAMEexceeded            (1),
+  numberOfConnectionsToNIUexceeded             (2),
+  busy                                         (3),
+  requestTypeNotSupported                      (4),
+  notAvailable                               (255)
+}
+with {variant "PADDING(octet)"}  
+  
+  
+type record N_OC_Response
+{
+  Function                                  MsgFunction (194),
+  PortPair                                  portPair, 
+  e_Status                                  status,
+  e_FailureReasonCode                       failureReasonCode 
+} with {
+  variant "" }  
+  
+type record N_CC_Response
+{
+  Function                                  MsgFunction (195),
+  PortPair                                  portPair, 
+  e_Status                                  status,
+  e_FailureReasonCode                       failureReasonCode 
+} with {
+  variant "" }    
+  
+type union NetworkMessage
+{
+  N_MFDB_Request                              n_MFDB_Request,        // CF to NIU
+  N_MFDB_Response                             n_MFDB_Response,       // NIU to CF
+  N_MFDB_Add                                  n_MFDB_Add,            // CF to NIU
+  N_MFDB_Delete                               n_MFDB_Delete,         // CF to NIU
+  N_MFDB_Clear                                n_MFDB_Clear,          // CF to NIU
+  N_MFDB_Create_Entry                         n_MFDB_Create_Entry,   // CF to NIU
+  N_MFDBNQ_Add                                n_MFDBNQ_Add,          // CF to NIU
+  N_NT_Request                                n_NT_Request,          // CF to NIU
+  N_NT_Response                               n_NT_Response,         // NIU to CF
+  N_NTX_Request                               n_NTX_Request,         // CF to NIU
+  N_NTX_Response                              n_NTX_Response,        // NIU to CF
+  N_GP_Request                                n_GP_Request,          // CF to NIU
+  N_GP_Response                               n_GP_Response,         // NIU to CF
+  N_GP_Reset_Statistics                       n_GP_Reset_Statistics, // CF to NIU
+  N_SP_Request                                n_SP_Request,          // CF to NIU
+  N_SP_Response                               n_SP_Response,         // NIU to CF
+  N_SP_Reset_Statistics                       n_SP_Reset_Statistics, // CF to NIU
+  N_OC_Request                                n_OC_Request,          // CF to NIU
+  N_OC_Response                               n_OC_Response,         // NIU to CF
+  N_CC_Request                                n_CC_Request,          // CF to NIU
+  N_CC_Response                               n_CC_Response          // NIU to CF    
+}
+with {variant "TAG	(
+  n_MFDB_Request,                        MsgFunction =   0;
+  n_MFDB_Response,                       MsgFunction =   1;
+  n_MFDB_Add,                            MsgFunction =   2;
+  n_MFDB_Delete,                         MsgFunction =   3;
+  n_MFDB_Clear,                          MsgFunction =   4;
+  n_MFDB_Create_Entry,                   MsgFunction =   6;
+  n_MFDBNQ_Add,                          MsgFunction =   7;
+  n_NT_Request,                          MsgFunction =  64;
+  n_NT_Response,                         MsgFunction =  65;
+  n_NTX_Request,                         MsgFunction =  66;
+  n_NTX_Response,                        MsgFunction =  67;
+  n_GP_Request,                          MsgFunction = 128;
+  n_GP_Response,                         MsgFunction = 129;
+  n_GP_Reset_Statistics,                 MsgFunction = 130;
+  n_SP_Request,                          MsgFunction = 131;
+  n_SP_Response,                         MsgFunction = 132;
+  n_SP_Reset_Statistics,                 MsgFunction = 133;
+  n_OC_Request,                          MsgFunction = 192;
+  n_OC_Response,                         MsgFunction = 193; // there is a specification inconsistency concerning this value 193 vs. 194
+  n_CC_Request,                          MsgFunction = 194; // there is a specification inconsistency concerning this value 194 vs. 193
+  n_CC_Response,                         MsgFunction = 195;  ) " 
+}
+
+type enumerated e_PortNumber { 
+  port_local                 (0),
+  port_1                     (1),
+  port_2                     (2),
+  port_3                     (3),
+  port_4                     (4),
+  port_5                     (5),
+  port_6                     (6),
+  port_7                     (7),
+  port_8                     (8),
+  port_9                     (9),
+  port_10                    (10),
+  port_11                    (11),
+  port_12                    (12),
+  port_13                    (13),
+  port_14                    (14),
+  port_global                (15)}
+with {variant "PADDING(nibble)" };
+
+type enumerated e_FilterMode { 
+  blockSpecificPGNs          (0),
+  passSecificPGNs            (1)}
+with {variant "PADDING(octet)" };
+
+type record PortPair
+{
+  e_PortNumber          fromPort,
+  e_PortNumber          toPort
+} with { variant "" }
+
+type record PortNibble
+{
+  e_PortNumber          portNumber,
+  HEX1                  reserved ('F'H)
+} with { variant "" }
+
 }with { encode "RAW" }
+
diff --git a/demo/IsobusVTMessageTypes.ttcn b/demo/IsobusVTMessageTypes.ttcn
index 7dac40c..c55996d 100644
--- a/demo/IsobusVTMessageTypes.ttcn
+++ b/demo/IsobusVTMessageTypes.ttcn
@@ -1,12 +1,3 @@
-/* Copyright (c) 2010, 2016  Ericsson 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
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
 module IsobusVTMessageTypes {
 
 import from General_Types all
@@ -14,376 +5,1059 @@
 
 type INT1 VTfunction
 
+type integer AnyObjectID (0..65535) with { variant "FIELDLENGTH(16)" }; // includes also 65535 as no object
+type integer ValidObjectID (0..65534) with { variant "FIELDLENGTH(16)" };
+type integer AttributeID (0..255) with { variant "FIELDLENGTH(8)" };
+type INT2 PositionType 
+type INT1 KeyNumberType
+type INT2 FrequencyType
+
+type enumerated e_SoftKeyActivationReq_KeyAactivationCode { 
+  keyHasBeenReleased     (0),
+  keyHasBeenPressed      (1),
+  keyIsStillPressed      (2),
+  keyPressAborted        (3)}
+with {variant "PADDING(octet)" };
+
+type record SoftKeyActivationReq 
+{
+  VTfunction                                vtfunction (0),
+  e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
+  ValidObjectID                             objectID,
+  ValidObjectID                             parentObjectID,
+  KeyNumberType                             keyNumber,
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type record SoftKeyActivationRes 
+{
+  VTfunction                                vtfunction (0),
+  e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,  
+  ValidObjectID                             objectID,
+  ValidObjectID                             parentObjectID,
+  KeyNumberType                             keyNumber,
+  OCT1                                      reserved8  ('FF'O)
+} with {variant "" };
+
+type enumerated e_ButtonActivationReq_KeyAactivationCode { 
+  buttonHasBeenUnlatchedorReleased     (0),
+  buttonHasBeenPressedOrLatched        (1),
+  buttonIsStillHeld                    (2),
+  buttonPressAborted                   (3)}
+with {variant "PADDING(octet)" };
+
+type record ButtonActivationReq
+{
+  VTfunction                               vtfunction (1),
+  e_ButtonActivationReq_KeyAactivationCode keyAactivationCode,
+  ValidObjectID                            objectID,
+  ValidObjectID                            parentObjectID,
+  KeyNumberType                            buttonKeyCode,
+  OCT1                                     reserved8  ('FF'O)
+} with {variant "" };
+
+type enumerated e_ButtonActivationRes_KeyAactivationCode { 
+  buttonHasBeenUnlatchedorReleased     (0),
+  buttonHasBeenPressedOrLatched        (1),
+  buttonIsStillHeld                    (2),
+  buttonPressAborted                   (3)}
+with {variant "PADDING(octet)" };
+
+type record ButtonActivationRes
+{
+  VTfunction                               vtfunction (1),
+  e_ButtonActivationRes_KeyAactivationCode keyAactivationCode,
+  ValidObjectID                            objectID,
+  ValidObjectID                            parentObjectID,
+  KeyNumberType                            buttonKeyCode,
+  OCT1                                     reserved8  ('FF'O)
+} with {variant "" };
+
+type enumerated e_PointingEvent_touchState {
+  released    (0), // version 4 and later
+  pressed     (1), // version 4 and later
+  held        (2), // version 4 and later
+  reserved  (255)} // version 3 and prior
+with {variant "PADDING(octet)" };
+
+type record PointingEventReq {
+  VTfunction                      vtfunction (2),
+  PositionType                    x_position,
+  PositionType                    y_position,
+  e_PointingEvent_touchState   touchState,
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record PointingEventRes {
+  VTfunction                      vtfunction (2),
+  PositionType                    x_position,
+  PositionType                    y_position,
+  e_PointingEvent_touchState   touchState,
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type enumerated e_VTOnUserLayoutHideShow_state { 
+  hidden     (0),
+  shown      (1)}
+with {variant "PADDING(octet)" };
+
+type enumerated e_VTSelectInputObject_selection {
+  objectIsDeselected (0),
+  objectIsSelected   (1)}
+with {variant "PADDING(octet)" };
+
+type record VTSelectInputObject_v4AndLater_Bitmask{ 
+  boolean objectIsOpenForDataInput,
+  boolean reserved1     (false),
+  boolean reserved2     (false),
+  boolean reserved3     (false),
+  boolean reserved4     (false),
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record VTSelectInputObjectReq_v3AndPrior {
+  VTfunction                      vtfunction (3),
+  ValidObjectID                   objectID,
+  e_VTSelectInputObject_selection selection,
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectReq_v4AndLater {
+  VTfunction                             vtfunction (3),
+  ValidObjectID                          objectID,
+  e_VTSelectInputObject_selection        selection,
+  VTSelectInputObject_v4AndLater_Bitmask bitmask,
+  OCT1                                   reserved6  ('FF'O),
+  OCT1                                   reserved7  ('FF'O),
+  OCT1                                   reserved8  ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectRes_v4AndPrior {
+  VTfunction                      vtfunction (3),
+  ValidObjectID                   objectID,
+  e_VTSelectInputObject_selection selection,
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectRes_v5AndLater {
+  VTfunction                             vtfunction (3),
+  ValidObjectID                          objectID,
+  e_VTSelectInputObject_selection        selection,
+  VTSelectInputObject_v4AndLater_Bitmask bitmask,
+  OCT1                                   reserved6  ('FF'O),
+  OCT1                                   reserved7  ('FF'O),
+  OCT1                                   reserved8  ('FF'O)
+} with {variant "" };
+
+type record VTChangeNumericValueReq
+{
+  VTfunction                      vtfunction (5),
+  ValidObjectID                   objectID,
+  OCT1                            reserved4  ('FF'O),
+  OCT4                            value_
+} with { variant "" };
+
+type record VTChangeNumericValueRes
+{
+  VTfunction                      vtfunction (5),
+  ValidObjectID                   objectID,
+  OCT1                            reserved4  ('FF'O),
+  OCT4                            value_
+} with { variant "" };
+
+type record VTOnUserLayoutHideShowReq
+{
+  VTfunction                      vtfunction (9),
+  ValidObjectID                   objectID1,
+  e_VTOnUserLayoutHideShow_state  state1,
+  AnyObjectID                     objectID2,
+  e_VTOnUserLayoutHideShow_state  state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+  OCT1                            reserved8  ('FF'O)
+} with { variant "" };
+
+type record VTOnUserLayoutHideShowRes
+{
+  VTfunction                      vtfunction (9),
+  ValidObjectID                   objectID1,
+  e_VTOnUserLayoutHideShow_state  state1,
+  AnyObjectID                     objectID2,
+  e_VTOnUserLayoutHideShow_state  state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+  OCT1                            reserved8  ('FF'O)
+} with { variant "" };
+
+type enumerated e_HideShowObject_state { 
+  hide      (0),
+  show      (1)}
+with {variant "PADDING(octet)" };
+
+type record HideShowObjectReq
+{
+  VTfunction                      vtfunction (160),
+  ValidObjectID                   objectID,
+  e_HideShowObject_state          hideShow,
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record HideShowObjectRes_errorCodes{ 
+  boolean referencesToMissingObjects,
+  boolean invalidObjectID,
+  boolean undefined     (false),
+  boolean AnyOtherError,
+  boolean reserved4     (false),
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record HideShowObjectRes
+{
+  VTfunction                      vtfunction (160),
+  ValidObjectID                   objectID,
+  e_HideShowObject_state          hideShow,
+  HideShowObjectRes_errorCodes    errorCodes,
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type enumerated e_SelectInputObjectReq_Option { 
+  activateForDataInputTheObjectReferencedByObjectID     (0),
+  activateForDataInputTheObjectReferencedByObjectID1    (1),
+  setFocusToObjectReferencedByObjectID                (255)}
+with {variant "PADDING(octet)" };
+
+type record SelectInputObjectReq{
+  VTfunction                      vtfunction (162),
+  AnyObjectID                     objectID,
+  e_SelectInputObjectReq_Option   option,                
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)  
+} with {variant "" };
+
+type enumerated e_SelectInputObjectRes_Response { 
+  objectReferencedByObjectIDisNotSelectedOrObjectIDisTheNULLobject     (0),
+  objectReferencedByObjectIDisSelected                                 (1),
+  objectReferencedByObjectIDisOpenedForEdit                            (2)}
+with {variant "PADDING(octet)" };
+
+type record SelectInputObjectRes_errorCodes { 
+  boolean objectIsDisabled,
+  boolean invalidObjectID,
+  boolean objectIsNotOnTheActiveMaskOrObjectIsInAHiddenContainer,
+  boolean couldNotCompleteAnotherInputFieldIsCurrentlyBeingModifiedOrAButtonOrSoftKeyisCurrentlyBeingHeld,
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record SelectInputObjectRes{
+  VTfunction                      vtfunction (162),
+  AnyObjectID                     objectID,
+  e_SelectInputObjectRes_Response response,                
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)  
+} with {variant "" };
+
+type record ControlAudioSignalReq{
+  VTfunction                      vtfunction (163),
+  INT1                            activations,
+  FrequencyType                   frequencyInHz,
+  INT2                            onTimeDuration_ms,
+  INT2                            offTimeDuration_ms
+} with {variant "" };
+
+type enumerated e_ControlAudioSignalRes_ErrorCodes { 
+  audioDeviceIsBusy     (0),
+  undefined             (1),
+  objectReferencedByObjectIDisOpenedForEdit                            (2)}
+with {variant "PADDING(octet)" };
+
+type record ControlAudioSignalRes_ErrorCodes { 
+  boolean audioDeviceIsBusy,
+  boolean undefined1    (false),
+  boolean undefined2    (false),
+  boolean undefined3    (false),
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record ControlAudioSignalRes{
+  VTfunction                        vtfunction (163),
+  ControlAudioSignalRes_ErrorCodes  errorCodes,
+  OCT1                            reserved3  ('FF'O),
+  OCT1                            reserved4  ('FF'O),
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record ChangeNumericValueReq{
+  VTfunction                      vtfunction (168),
+  ValidObjectID                   objectID,
+  OCT1                            reserved4  ('FF'O),
+  OCT4                            newValueForValueAttribute  
+} with {variant "" };
+
+type record ChangeNumericValueRes_errorCodes { 
+  boolean invalidObjectID,
+  boolean invalidValue,
+  boolean valueInUse,
+  boolean undefined     (false),
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record ChangeNumericValueRes{
+  VTfunction                        vtfunction (168),
+  ValidObjectID                     objectID,
+  ChangeNumericValueRes_errorCodes  errorCodes,
+  OCT4                              valueForValueAttribute  
+} with {variant "" };
+
+type record ChangeActiveMaskReq
+{
+  VTfunction                      vtfunction (173),
+  ValidObjectID                   workingSetObjectID,
+  ValidObjectID                   newActiveMaskObjectID,
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record ChangeActiveMaskRes_errorCodes { 
+  boolean invalidWorkingSetObjectID,
+  boolean invalidMaskObjectID,
+  boolean undefined1    (false),
+  boolean undefined2    (false),
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record ChangeActiveMaskRes
+{
+  VTfunction                      vtfunction (173),
+  ValidObjectID                   newActiveMaskObjectID,
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+}
+with {variant "" };
+
+type enumerated e_ChangeSoftKeyMaskReq_MaskType { 
+  Data                     (1),
+  Alarm                    (2)}
+with {variant "PADDING(octet)" };
+
+type record ChangeSoftKeyMaskReq 
+{
+  VTfunction                      vtfunction (174),
+  e_ChangeSoftKeyMaskReq_MaskType maskType,
+  ValidObjectID                   DataOrAlarmMaskObjectID,
+  ValidObjectID                   NewSoftKeyMaskObjectID,
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)}
+with {variant "" };
+
+type record ChangeSoftKeyMaskRes_errorCodes { 
+  boolean invalidDataOrAlarmMaskObjectID,
+  boolean invalidSoftKeyMaskObjectID,
+  boolean missingObjects,
+  boolean MaskOrChildObjectHasErrors,
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record ChangeSoftKeyMaskRes 
+{
+  VTfunction                      vtfunction (174),
+  ValidObjectID                   DataOrAlarmMaskObjectID,
+  ValidObjectID                   NewSoftKeyMaskObjectID,
+  ChangeSoftKeyMaskRes_errorCodes errorCodes,
+  OCT1                            reserved8  ('FF'O)}
+with {variant "" };
+
+type record ChangeAttributeReq
+{
+  VTfunction                      vtfunction (175),
+  ValidObjectID                   objectID,
+  AttributeID                     attributeID,
+  OCT4                            newValueOfAttribute
+}
+with {variant "" };
+
+type record ChangeAttributeRes_errorCodes { 
+  boolean invalidWorkingSetObjectID,
+  boolean invalidAttributeID,
+  boolean invalidValue,
+  boolean valueInUse,
+  boolean AnyOtherError,
+  boolean reserved5     (false),
+  boolean reserved6     (false),
+  boolean reserved7     (false)
+}
+with {variant "" };
+
+type record ChangeAttributeRes
+{
+  VTfunction                      vtfunction (175),
+  ValidObjectID                   objectID,
+  AttributeID                     attributeID,
+  ChangeAttributeRes_errorCodes   errorCodes,
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+}
+with {variant "" };
+
+type record DeleteObjectPoolReq
+{
+  VTfunction                      vtfunction (178),
+  OCT1                            reserved2  ('FF'O),
+  OCT1                            reserved3  ('FF'O),
+  OCT1                            reserved4  ('FF'O),
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record DeleteObjectPoolRes_ErrorCodes { 
+  boolean deletionError,
+  boolean undefined1      (false),
+  boolean undefined2      (false),
+  boolean undefined3      (false),
+  boolean anyOtherError,
+  boolean reserved5       (false),
+  boolean reserved6       (false),
+  boolean reserved7       (false)
+}
+
+type record DeleteObjectPoolRes
+{
+  VTfunction                      vtfunction (178),
+  DeleteObjectPoolRes_ErrorCodes  errorCodes,
+  OCT1                            reserved3  ('FF'O),
+  OCT1                            reserved4  ('FF'O),
+  OCT1                            reserved5  ('FF'O),
+  OCT1                            reserved6  ('FF'O),
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+type record ChangeStringValueReq
+{
+  VTfunction vtfunction (179),
+  ValidObjectID     objectID,
+  INT2              numberOfBytes ,
+  octetstring       newStringValue
+}
+with {
+  variant (numberOfBytes) "LENGTHTO(newStringValue)";
+  variant (numberOfBytes) "UNIT(octets)"
+}
+
+type record ChangeStringValueRes_ErrorCodes { 
+  boolean undefined       (false),
+  boolean invalidObjectID,
+  boolean stringTooLong,
+  boolean anyOtherError,
+  boolean reserved4       (false),
+  boolean reserved5       (false),
+  boolean reserved6       (false),
+  boolean reserved7       (false)
+}
+with {variant "" };
+
+type record ChangeStringValueRes
+{
+  VTfunction                      vtfunction (179),
+  OCT1                            reserved2  ('FF'O),
+  OCT1                            reserved3  ('FF'O),
+  ValidObjectID                   objectID,
+  ChangeStringValueRes_ErrorCodes errorCodes,
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with {variant "" };
+
+
+type ValidObjectID AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID
+
+type BIT2np AuxiliaryInputType2StatusInd_OperatingStateType
+
+type record AuxiliaryInputType2StatusInd
+{
+  VTfunction                                          vtfunction (38),
+  AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID auxiliaryInputObjectID,
+  OCT2                                                value1,
+  OCT2                                                value2,
+  AuxiliaryInputType2StatusInd_OperatingStateType     operationState
+} with { variant "" };
+
+type record ChangeChildPositionReq
+{
+  VTfunction vtfunction (180),
+  ValidObjectID  parentObjectID,
+  ValidObjectID  objectID,
+  PositionType   pos_x_relative, 
+  PositionType   pos_y_relative  
+} with { variant "" };
+
+type record ChangeChildPositionRes_ErrorCodes { 
+  boolean invalidParentObjectID,
+  boolean invalidObjectID,
+  boolean undefined       (false),
+  boolean anyOtherError,
+  boolean reserved4       (false),
+  boolean reserved5       (false),
+  boolean reserved6       (false),
+  boolean reserved7       (false)
+}
+with {variant "" };
+
+type record ChangeChildPositionRes
+{
+  VTfunction vtfunction (180),
+  ValidObjectID  parentObjectID,
+  ValidObjectID  objectID,
+  ChangeChildPositionRes_ErrorCodes errorCodes,
+  OCT1                            reserved7  ('FF'O),
+  OCT1                            reserved8  ('FF'O)
+} with { variant "" };
+
 type record GetMemoryReq
 {
-    VTfunction vtfunction (194),
-    OCT1           reserved2  ('FF'O),
-    INT3           memoryRequired,
-    OCT1           reserved7  ('FF'O),
-    OCT1           reserved8  ('FF'O)
+  VTfunction vtfunction (194),
+  OCT1           reserved2  ('FF'O),
+  INT3           memoryRequired,
+  OCT1           reserved7  ('FF'O),
+  OCT1           reserved8  ('FF'O)
 } with { variant "" };
 
 type enumerated e_GetMemoryResVersionNumber { 
-    compliantWithHannoverAgritechnica_2001_limitedfeatureSet          (0),
-    compliantWithFDISVersionISO11783_6_2002_E_Final_Draft             (1),
-    compliantWithISVersionISO11783_6_2004_E_First_Edition             (2),
-    compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_3  (3),
-    compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4 (4),
-    compliantWithISVersionISO11783_6_2014_E_Third_Edition             (5)}
+  compliantWithHannoverAgritechnica_2001_limitedfeatureSet          (0),
+  compliantWithFDISVersionISO11783_6_2002_E_Final_Draft             (1),
+  compliantWithISVersionISO11783_6_2004_E_First_Edition             (2),
+  compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_3  (3),
+  compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4 (4),
+  compliantWithISVersionISO11783_6_2014_E_Third_Edition             (5)}
 with {variant "PADDING(octet)" };
 
 type enumerated e_GetMemoryResStatus { 
-    thereCanBeEnoughMemory             (0),
-    thereIsNotEnoughMemoryAvailable    (1)}
+  thereCanBeEnoughMemory             (0),
+  thereIsNotEnoughMemoryAvailable    (1)}
 with {variant "PADDING(octet)" }
 
 type record GetMemoryRes
 {
-    VTfunction vtfunction (194),
-    e_GetMemoryResVersionNumber versionNumber,
-    e_GetMemoryResStatus        status,
-    OCT1    reserved4  ('FF'O),
-    OCT1    reserved5  ('FF'O),
-    OCT1    reserved6  ('FF'O),
-    OCT1    reserved7  ('FF'O),
-    OCT1    reserved8  ('FF'O)
+  VTfunction vtfunction (194),
+  e_GetMemoryResVersionNumber versionNumber,
+  e_GetMemoryResStatus        status,
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
 } with { variant "" };
 
 type record GetNumberOfSoftKeysReq
 {
-    VTfunction vtfunction (192),
-    OCT1           reserved2  ('FF'O),
-    OCT1           reserved3  ('FF'O),
-    OCT1           reserved4  ('FF'O),
-    OCT1           reserved5  ('FF'O),
-    OCT1           reserved6  ('FF'O),
-    OCT1           reserved7  ('FF'O),
-    OCT1           reserved8  ('FF'O)
+  VTfunction vtfunction (192),
+  OCT1           reserved2  ('FF'O),
+  OCT1           reserved3  ('FF'O),
+  OCT1           reserved4  ('FF'O),
+  OCT1           reserved5  ('FF'O),
+  OCT1           reserved6  ('FF'O),
+  OCT1           reserved7  ('FF'O),
+  OCT1           reserved8  ('FF'O)
 } with { variant "" };
 
 type record GetNumberOfSoftKeysRes
 {
-    VTfunction vtfunction (192),
-    OCT1           navigationSoftKeys_,
-    OCT1           reserved3  ('FF'O),
-    OCT1           reserved4  ('FF'O),
-    OCT1           x_dots,
-    OCT1           y_dots,
-    OCT1           numberOfVirtualSoftKeys_,
-    OCT1           numberOfPhysicalSoftKeys_
+  VTfunction vtfunction (192),
+  OCT1           navigationSoftKeys_,
+  OCT1           reserved3  ('FF'O),
+  OCT1           reserved4  ('FF'O),
+  OCT1           x_dots,
+  OCT1           y_dots,
+  OCT1           numberOfVirtualSoftKeys_,
+  OCT1           numberOfPhysicalSoftKeys_
 } with { variant "" };
 
 type record GetTextFontDataReq
 {
-    VTfunction vtfunction (195),
-    OCT1           reserved2  ('FF'O),
-    OCT1           reserved3  ('FF'O),
-    OCT1           reserved4  ('FF'O),
-    OCT1           reserved5  ('FF'O),
-    OCT1           reserved6  ('FF'O),
-    OCT1           reserved7  ('FF'O),
-    OCT1           reserved8  ('FF'O)
+  VTfunction vtfunction (195),
+  OCT1           reserved2  ('FF'O),
+  OCT1           reserved3  ('FF'O),
+  OCT1           reserved4  ('FF'O),
+  OCT1           reserved5  ('FF'O),
+  OCT1           reserved6  ('FF'O),
+  OCT1           reserved7  ('FF'O),
+  OCT1           reserved8  ('FF'O)
 } with { variant "" };
 
 
-type enumerated e_TextFontDataRes_small_font_sizes { 
-    font_6x8    (0),
-    font_8x8    (1),
-    font_8x12   (2),
-    font_12x16  (4),
-    font_16x16  (8),
-    font_16x24  (16),
-    font_24x32  (32),
-    font_32x32  (64),
-    reserved    (128)
-     }
-with {variant "PADDING(octet)" };
+type record TextFontDataRes_small_font_sizes { 
+  boolean font_8x8,
+  boolean font_8x12,
+  boolean font_12x16,
+  boolean font_16x16,
+  boolean font_16x24,
+  boolean font_24x32,
+  boolean font_32x32,
+  boolean reserved
+}
+with {variant "" };
 
-type enumerated e_TextFontDataRes_large_font_sizes { 
-    font_32x48    (1),
-    font_48x64    (2),
-    font_64x64    (4),
-    font_64x96    (8),
-    font_96x128   (16),
-    font_128x128  (32),
-    font_128x192  (64),
-    reserved      (128)
-     }
-with {variant "PADDING(octet)" }
+type record TextFontDataRes_large_font_sizes { 
+  boolean font_32x48,
+  boolean font_48x64,
+  boolean font_64x64,
+  boolean font_64x96,
+  boolean font_96x128,
+  boolean font_128x128,
+  boolean font_128x192,
+  boolean reserved (false)
+}
+with {variant "" }
 
-type enumerated e_TextFontDataRes_type_attribute { 
-    normal_text                      (0),
-    bold_text                        (1),
-    crossed_out_text                 (2),
-    underlined_text                  (4),
-    italics_text                     (8),
-    inverted_text                    (16),
-    flash_inverted                   (32),
-    flash_background_and_foreground  (64),
-    proportional_font_rendering_     (128)
-     }
-with {variant "PADDING(octet)"}
+type record TextFontDataRes_type_attribute { 
+  boolean bold_text,
+  boolean crossed_out_text,
+  boolean underlined_text,
+  boolean italics_text,
+  boolean inverted_text,
+  boolean flash_inverted,
+  boolean flash_background_and_foreground,
+  boolean proportional_font_rendering
+}
+with {variant ""}
 
 type record GetTextFontDataRes
 {
-    VTfunction vtfunction (195),
-    OCT1           reserved2  ('FF'O),
-    OCT1           reserved3  ('FF'O),
-    OCT1           reserved4  ('FF'O),
-    OCT1           reserved5  ('FF'O),
-    e_TextFontDataRes_small_font_sizes  small_font_sizes,
-    e_TextFontDataRes_large_font_sizes  large_font_sizes,
-    e_TextFontDataRes_type_attribute    type_attribute
+  VTfunction vtfunction (195),
+  OCT1           reserved2  ('FF'O),
+  OCT1           reserved3  ('FF'O),
+  OCT1           reserved4  ('FF'O),
+  OCT1           reserved5  ('FF'O),
+  TextFontDataRes_small_font_sizes  small_font_sizes,
+  TextFontDataRes_large_font_sizes  large_font_sizes,
+  TextFontDataRes_type_attribute    type_attribute
 } with { variant "" };
 
 type record GetHardwareReq
 {
-    VTfunction vtfunction (199),
-    OCT1           reserved2  ('FF'O),
-    OCT1           reserved3  ('FF'O),
-    OCT1           reserved4  ('FF'O),
-    OCT1           reserved5  ('FF'O),
-    OCT1           reserved6  ('FF'O),
-    OCT1           reserved7  ('FF'O),
-    OCT1           reserved8  ('FF'O)
+  VTfunction vtfunction (199),
+  OCT1           reserved2  ('FF'O),
+  OCT1           reserved3  ('FF'O),
+  OCT1           reserved4  ('FF'O),
+  OCT1           reserved5  ('FF'O),
+  OCT1           reserved6  ('FF'O),
+  OCT1           reserved7  ('FF'O),
+  OCT1           reserved8  ('FF'O)
 } with { variant "" };
 
 
 type enumerated e_GetHardwareResGraphicType { 
-    monochrome                      (0),
-    colors16                        (1),
-    colors256                       (2)
-    }
+  monochrome                      (0),
+  colors16                        (1),
+  colors256                       (2)
+}
 with {variant "PADDING(octet)"}
 
-type record e_GetHardwareResHardware {
-    boolean touchScreenandPointingEvent,
-    boolean pointingDeviceAndPointingEvent,
-    boolean multipleFrequencyAudioOutput,
-    boolean adjustableVolumeAudioOutput,
-    boolean simultaneousActivationsOfPhysicalSoftKeys,
-    boolean simultaneousActivationsOfButtons,
-    boolean dragOperationViaPointingEvent,
-    boolean intermediateCoordinatesDuringDragOperation
+type record GetHardwareResHardwareType {
+  boolean touchScreenandPointingEvent,
+  boolean pointingDeviceAndPointingEvent,
+  boolean multipleFrequencyAudioOutput,
+  boolean adjustableVolumeAudioOutput,
+  boolean simultaneousActivationsOfPhysicalSoftKeys,
+  boolean simultaneousActivationsOfButtons,
+  boolean dragOperationViaPointingEvent,
+  boolean intermediateCoordinatesDuringDragOperation
 } with { variant "" };
 
+type INT1 BootTimeType
+
 type record GetHardwareRes
 {
-    VTfunction                 vtfunction (199),
-    e_GetHardwareResGraphicType  graphicType,
-    e_GetHardwareResHardware     hardware,
-    INT2                         xPixels,
-    INT2                         yPixels
+  VTfunction                   vtfunction (199),
+  BootTimeType                 bootTimeInSeconds,  // 255 for information not available
+  e_GetHardwareResGraphicType  graphicType,
+  GetHardwareResHardwareType   hardware,
+  INT2                         xPixels,
+  INT2                         yPixels
 } with { variant "" };
 
 type enumerated e_Codeplane { 
-    codeplane0     (0),
-    codeplane1     (1),
-    codeplane2     (2),
-    codeplane3     (3),
-    codeplane4     (4),
-    codeplane5     (5),
-    codeplane6     (6),
-    codeplane7     (7),
-    codeplane8     (8),
-    codeplane9     (9),
-    codeplane10    (10),
-    codeplane11    (11),
-    codeplane12    (12),
-    codeplane13    (13),
-    codeplane14    (14),
-    codeplane15    (15),
-    codeplane16    (16)}
+  codeplane0     (0),
+  codeplane1     (1),
+  codeplane2     (2),
+  codeplane3     (3),
+  codeplane4     (4),
+  codeplane5     (5),
+  codeplane6     (6),
+  codeplane7     (7),
+  codeplane8     (8),
+  codeplane9     (9),
+  codeplane10    (10),
+  codeplane11    (11),
+  codeplane12    (12),
+  codeplane13    (13),
+  codeplane14    (14),
+  codeplane15    (15),
+  codeplane16    (16)}
 with {variant "PADDING(octet)"}
 
 
 type record GetSupportedWidecharsReq
 {
-    VTfunction vtfunction (193),
-    e_Codeplane    codeplane,
-    OCT2           firstWideCharInInquiryRange,
-    OCT2           lastWideCharInInquiryRange,
-    OCT1           reserved7  ('FF'O),
-    OCT1           reserved8  ('FF'O)
+  VTfunction vtfunction (193),
+  e_Codeplane    codeplane,
+  OCT2           firstWideCharInInquiryRange,
+  OCT2           lastWideCharInInquiryRange,
+  OCT1           reserved7  ('FF'O),
+  OCT1           reserved8  ('FF'O)
 } with { variant "" };
 
 type record WideCharRange
 {
-    OCT2           firstWideChar, 
-    OCT2           lastWideChar
+  OCT2           firstWideChar, 
+  OCT2           lastWideChar
 } with { variant "" };
 
 type record of  WideCharRange WideCharRangeArray
 
 type record GetSupportedWidecharsRes
 {
-    VTfunction vtfunction (193),
-    e_Codeplane        codeplane,
-    OCT2               firstWideCharInInquiryRange,
-    OCT2               lastWideCharInInquiryRange,
-    INT1               numberOfRanges,
-    WideCharRangeArray wideCharRangeArray
+  VTfunction vtfunction (193),
+  e_Codeplane        codeplane,
+  OCT2               firstWideCharInInquiryRange,
+  OCT2               lastWideCharInInquiryRange,
+  INT1               numberOfRanges,
+  WideCharRangeArray wideCharRangeArray
 } with {
-        variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
-	variant (numberOfRanges) "UNIT(elements)"}
+  variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
+  variant (numberOfRanges) "UNIT(elements)"}
 
 type record GetWindowMaskDataReq
 {
-    VTfunction vtfunction (196),
-    OCT1    reserved2  ('FF'O),
-    OCT1    reserved3  ('FF'O),
-    OCT1    reserved4  ('FF'O),
-    OCT1    reserved5  ('FF'O),
-    OCT1    reserved6  ('FF'O),
-    OCT1    reserved7  ('FF'O),
-    OCT1    reserved8  ('FF'O)
+  VTfunction vtfunction (196),
+  OCT1    reserved2  ('FF'O),
+  OCT1    reserved3  ('FF'O),
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
 } with { variant "" };
 
 type record GetWindowMaskDataRes
 {
-    VTfunction vtfunction (196),
-    OCT1    BackgroundColourVTUserLayoutDataMasks,
-    OCT1    BackgroundColourVTKeyCells,
-    OCT1    reserved4  ('FF'O),
-    OCT1    reserved5  ('FF'O),
-    OCT1    reserved6  ('FF'O),
-    OCT1    reserved7  ('FF'O),
-    OCT1    reserved8  ('FF'O)
+  VTfunction vtfunction (196),
+  OCT1    BackgroundColourVTUserLayoutDataMasks,
+  OCT1    BackgroundColourVTKeyCells,
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
 } with { variant "" };
 
 type record GetSupportedObjectsReq
 {
-    VTfunction vtfunction (197),
-    OCT1    reserved2  ('FF'O),
-    OCT1    reserved3  ('FF'O),
-    OCT1    reserved4  ('FF'O),
-    OCT1    reserved5  ('FF'O),
-    OCT1    reserved6  ('FF'O),
-    OCT1    reserved7  ('FF'O),
-    OCT1    reserved8  ('FF'O)
+  VTfunction vtfunction (197),
+  OCT1    reserved2  ('FF'O),
+  OCT1    reserved3  ('FF'O),
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
 } with { variant "" };
 
 type record GetSupportedObjectsRes
 {
-    VTfunction vtfunction (197),
-    INT2         numberOfBytesToFollow,
-    OCT1         supportedObjectTypes
+  VTfunction vtfunction (197),
+  INT2         numberOfBytesToFollow,
+  OCT1         supportedObjectTypes
 } with {
-        variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
-	variant (numberOfBytesToFollow) "UNIT(elements)"}
+  variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
+  variant (numberOfBytesToFollow) "UNIT(elements)"}
 
 
 type enumerated e_BusyCodes { 
-    vtIsBusyUpdatingVisibleMask            (0),
-    vtIsBusySavingDataToNonVolatileMemory  (1),
-    vtIsBusyExecutingACommand              (2),
-    vtIsBusyExecutingAMacro                (3),
-    vtIsBusyParsingAnObjectPool            (4),
-    reserved                               (5),
-    auxiliaryControlsLearnModeActive       (6),
-    vtIsOutOfMemory                        (7)}
+  vtIsBusyUpdatingVisibleMask            (0),
+  vtIsBusySavingDataToNonVolatileMemory  (1),
+  vtIsBusyExecutingACommand              (2),
+  vtIsBusyExecutingAMacro                (3),
+  vtIsBusyParsingAnObjectPool            (4),
+  reserved                               (5),
+  auxiliaryControlsLearnModeActive       (6),
+  vtIsOutOfMemory                        (7)}
 with {variant "PADDING(octet)"}
 
 type record VTStatusReq
 {
-    VTfunction vtfunction (254),
-    OCT1 	      sourceAddressOfActiveWorkingSetMaster,
-    OCT2 	      objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
-    OCT2 	      objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
-    e_BusyCodes       vtBusyCodes,
-    OCT1              vtFunctionCode
+  VTfunction vtfunction (254),
+  OCT1 	      sourceAddressOfActiveWorkingSetMaster,
+  OCT2 	      objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+  OCT2 	      objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+  e_BusyCodes       vtBusyCodes,
+  OCT1              vtFunctionCode
 } with { variant "" };
 
 type record WorkingSetMaintenanceBitMask {
-    boolean InitiatingWorkingSetMaintenance,
-    boolean reserved2 (false),
-    boolean reserved3 (false),
-    boolean reserved4 (false),
-    boolean reserved5 (false),
-    boolean reserved6 (false),
-    boolean reserved7 (false)
+  boolean initiatingWorkingSetMaintenance,
+  boolean reserved1 (false),
+  boolean reserved2 (false),
+  boolean reserved3 (false),
+  boolean reserved4 (false),
+  boolean reserved5 (false),
+  boolean reserved6 (false),
+  boolean reserved7 (false)
 } with { variant "" };
 
 type enumerated e_WorkingSetMaintenanceVersionNumber { 
-    reserved0               (0),
-    reserved1               (1),
-    reserved2               (2),
-    compliantWithVTVersion3 (3),
-    compliantWithVTVersion4 (4),
-    compliantWithVTVersion5 (5),
-    compliantWithVTVersion2 (255)}
+  reserved0               (0),
+  reserved1               (1),
+  reserved2               (2),
+  compliantWithVTVersion3 (3),
+  compliantWithVTVersion4 (4),
+  compliantWithVTVersion5 (5),
+  compliantWithVTVersion2 (255)}
 with {variant "PADDING(octet)"}
 
+
+type OCT7 VersionLabel7Char
+
+type record LoadVersionReq
+{
+  VTfunction vtfunction (209),
+  VersionLabel7Char versionLabel
+} with { variant "" };
+
+type record LoadVersionRes_errorCodesType {
+  boolean fileSystemErrorOrPoolDataCorruption,
+  boolean versionLabelIsNotCorrectOrVersionLabeUnknown,
+  boolean insufficientMemoryAvailable,
+  boolean anyOtherError,
+  boolean reserved5,
+  boolean reserved6,
+  boolean reserved7,
+  boolean reserved8
+} with {variant ""}
+
+type record LoadVersionRes
+{
+  VTfunction vtfunction (209),
+  OCT1    reserved2  ('FF'O),
+  OCT1    reserved3  ('FF'O),
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  LoadVersionRes_errorCodesType    errorCodes,
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
+} with { variant "" };
+
+type record GetVersionsReq
+{
+  VTfunction vtfunction (223),
+  OCT1    reserved2  ('FF'O),
+  OCT1    reserved3  ('FF'O),
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
+} with { variant "" };
+
+type record GetVersionsRes
+{
+  VTfunction vtfunction (223),
+  INT1              numberOfVersionStrings,
+  VersionLabel7Char versionStrings
+}
+with{
+  variant (numberOfVersionStrings) "LENGTHTO(versionStrings)";
+  variant (numberOfVersionStrings) "UNIT(elements)"
+}
+
 type record WorkingSetMaintenanceReq
 {
-    VTfunction vtfunction (255),
-    WorkingSetMaintenanceBitMask         bitMask,
-    e_WorkingSetMaintenanceVersionNumber versionNumber,
-    OCT1    reserved4  ('FF'O),
-    OCT1    reserved5  ('FF'O),
-    OCT1    reserved6  ('FF'O),
-    OCT1    reserved7  ('FF'O),
-    OCT1    reserved8  ('FF'O)
+  VTfunction vtfunction (255),
+  WorkingSetMaintenanceBitMask         bitMask,
+  e_WorkingSetMaintenanceVersionNumber versionNumber,
+  OCT1    reserved4  ('FF'O),
+  OCT1    reserved5  ('FF'O),
+  OCT1    reserved6  ('FF'O),
+  OCT1    reserved7  ('FF'O),
+  OCT1    reserved8  ('FF'O)
 } with { variant "" };
 
-type record DummyVTStatusRes
+type union VT2ECU
 {
-    VTfunction vtfunction (254)
-} with { variant "" };
-
-type union TopLevelMessage_VT2ECU_PDU
-{
-// put all VT2ECU request messages here
-    VTStatusReq                    vtStatusReq,
-// put all VT2ECU response messages here
-    GetMemoryRes                   getMemoryRes,
-    GetNumberOfSoftKeysRes         getNumberOfSoftKeysRes,
-    GetTextFontDataRes             getTextFontDataRes,
-    GetHardwareRes                 getHardwareRes,
-    GetSupportedWidecharsRes       getSupportedWidecharsRes,
-    GetWindowMaskDataRes           getWindowMaskDataRes,
-    GetSupportedObjectsRes         getSupportedObjectsRes
+  // put all VT2ECU request messages here
+  SoftKeyActivationReq           softKeyActivationReq,
+  ButtonActivationReq            buttonActivationReq,
+  PointingEventReq               pointingEventReq,
+  //VTSelectInputObjectReq_v3AndPrior vtSelectInputObjectReq,  // for v3 and prior
+  VTSelectInputObjectReq_v4AndLater vtSelectInputObjectReq,    // for v4 and later
+  VTChangeNumericValueReq        vtChangeNumericValueReq,
+  VTOnUserLayoutHideShowReq      vtOnUserLayoutHideShowReq,
+  VTStatusReq                    vtStatusReq,
+  // put all VT2ECU response messages here
+  HideShowObjectRes              hideShowObjectRes,
+  SelectInputObjectRes           selectInputObjectRes,  
+  ControlAudioSignalRes          controlAudioSignalRes,
+  ChangeNumericValueRes          changeNumericValueRes,
+  ChangeActiveMaskRes            changeActiveMaskRes,
+  ChangeSoftKeyMaskRes           changeSoftKeyMaskRes,
+  ChangeAttributeRes             changeAttributeRes,
+  DeleteObjectPoolRes            deleteObjectPoolRes,
+  ChangeStringValueRes           changeStringValueRes,
+  ChangeChildPositionRes         changeChildPositionRes,
+  GetMemoryRes                   getMemoryRes,
+  GetNumberOfSoftKeysRes         getNumberOfSoftKeysRes,
+  GetTextFontDataRes             getTextFontDataRes,
+  GetHardwareRes                 getHardwareRes,
+  GetSupportedWidecharsRes       getSupportedWidecharsRes,
+  GetWindowMaskDataRes           getWindowMaskDataRes,
+  GetSupportedObjectsRes         getSupportedObjectsRes,
+  LoadVersionRes                 loadVersionRes,
+  GetVersionsRes                 getVersionsRes
 }
 with {variant "TAG	(
-// put all VT2ECU request messages here
-    vtStatusReq, 	vtfunction = 254;
-// put all VT2ECU response messages here
-    getMemoryRes,                  vtfunction = 194;
-    getNumberOfSoftKeysRes,        vtfunction = 192;
-    getTextFontDataRes,            vtfunction = 195;
-    getHardwareRes,                vtfunction = 199;
-    getSupportedWidecharsRes,      vtfunction = 193;
-    getWindowMaskDataRes,          vtfunction = 196;
-    getSupportedObjectsRes,        vtfunction = 197;)"
+  // put all VT2ECU request messages here
+  softKeyActivationReq,          vtfunction =   0; 
+  buttonActivationReq,           vtfunction =   1;
+  pointingEventReq,              vtfunction =   2; 
+  vtSelectInputObjectReq,        vtfunction =   3;
+  vtChangeNumericValueReq,       vtfunction =   5;
+  vtOnUserLayoutHideShowReq,     vtfunction =   9;
+  vtStatusReq, 	                 vtfunction = 254;
+  // put all VT2ECU response messages here
+  hideShowObjectRes,             vtfunction = 160;
+  selectInputObjectRes,          vtfunction = 162; 
+  controlAudioSignalRes,         vtfunction = 163;  
+  changeNumericValueRes,         vtfunction = 168;
+  changeActiveMaskRes,           vtfunction = 173;
+  changeSoftKeyMaskRes,          vtfunction = 174; 
+  changeAttributeRes,            vtfunction = 175;
+  deleteObjectPoolRes,           vtfunction = 178;
+  changeStringValueRes,          vtfunction = 179;
+  changeChildPositionRes,        vtfunction = 180;
+  getMemoryRes,                  vtfunction = 192;
+  getNumberOfSoftKeysRes,        vtfunction = 194;
+  getTextFontDataRes,            vtfunction = 195;
+  getHardwareRes,                vtfunction = 199;
+  getSupportedWidecharsRes,      vtfunction = 193;
+  getWindowMaskDataRes,          vtfunction = 196;
+  getSupportedObjectsRes,        vtfunction = 197;
+  loadVersionRes,                vtfunction = 209;
+  getVersionsRes,                vtfunction = 223;)"
 } 
 
-type union TopLevelMessage_ECU2VT_PDU
+type union ECU2VT
 {
-// put all ECU2VT request messages here
-    GetMemoryReq                    getMemoryReq,
-    GetNumberOfSoftKeysReq          getNumberOfSoftKeysReq,
-    GetTextFontDataReq              getTextFontDataReq,
-    GetHardwareReq                  getHardwareReq,
-    GetSupportedWidecharsReq        getSupportedWidecharsReq,
-    GetWindowMaskDataReq            getWindowMaskDataReq,
-    GetSupportedObjectsReq          getSupportedObjectsReq,
-    WorkingSetMaintenanceReq        workingSetMaintenanceReq
-// put all ECU2VT response messages here
-    //Dummy_ECU2VT_Res                dummy_ECU2VT_Res
+  // put all ECU2VT request messages here
+  SoftKeyActivationRes           softKeyActivationRes,
+  ButtonActivationRes            buttonActivationRes,
+  PointingEventRes               pointingEventRes,
+  // VTSelectInputObjectRes_v4AndPrior  vtSelectInputObjectRes,   // for v4 and prior
+  VTSelectInputObjectRes_v5AndLater  vtSelectInputObjectRes,      // for v5 and later
+  VTChangeNumericValueRes        vtChangeNumericValueRes,
+  VTOnUserLayoutHideShowRes      vtOnUserLayoutHideShowRes,  
+  AuxiliaryInputType2StatusInd   auxiliaryInputType2StatusInd,   // Note: ECU2VT may not be the right addressing 
+  HideShowObjectReq              hideShowObjectReq,
+  SelectInputObjectReq           selectInputObjectReq,
+  ControlAudioSignalReq          controlAudioSignalReq,
+  ChangeNumericValueReq          changeNumericValueReq,
+  ChangeActiveMaskReq            changeActiveMaskReq,
+  ChangeSoftKeyMaskReq           changeSoftKeyMaskReq,
+  ChangeAttributeReq             changeAttributeReq,
+  DeleteObjectPoolReq            deleteObjectPoolReq,
+  ChangeStringValueReq           changeStringValueReq,
+  ChangeChildPositionReq         changeChildPositionReq,
+  GetMemoryReq                   getMemoryReq,
+  GetNumberOfSoftKeysReq         getNumberOfSoftKeysReq,
+  GetTextFontDataReq             getTextFontDataReq,
+  GetHardwareReq                 getHardwareReq,
+  GetSupportedWidecharsReq       getSupportedWidecharsReq,
+  GetWindowMaskDataReq           getWindowMaskDataReq,
+  GetSupportedObjectsReq         getSupportedObjectsReq,
+  LoadVersionReq                 loadVersionReq,
+  GetVersionsReq                 getVersionsReq,
+  WorkingSetMaintenanceReq       workingSetMaintenanceReq
+  // put all ECU2VT response messages here
+  //Dummy_ECU2VT_Res                dummy_ECU2VT_Res
 }
 with {variant "TAG	(
-// put all ECU2VT request messages here
-    getMemoryReq,                 vtfunction = 194;
-    getNumberOfSoftKeysReq,       vtfunction = 192;
-    getTextFontDataReq,           vtfunction = 195;
-    getHardwareReq,               vtfunction = 199;
-    getSupportedWidecharsReq,     vtfunction = 193;
-    getWindowMaskDataReq,         vtfunction = 196;
-    getSupportedObjectsReq,       vtfunction = 197;
-    workingSetMaintenanceReq,     vtfunction = 255;
-// put all ECU2VT response messages here
-    //dummy_ECU2VT_Res, 	          vtfunction = '00000000'B;
-    ) " 
-    } 
+  // put all ECU2VT request messages here
+  softKeyActivationRes,          vtfunction =   0; 
+  buttonActivationRes,           vtfunction =   1;
+  pointingEventRes,              vtfunction =   2;
+  vtSelectInputObjectRes,        vtfunction =   3;
+  vtChangeNumericValueRes,       vtfunction =   5;
+  vtOnUserLayoutHideShowRes,     vtfunction =   9;
+  auxiliaryInputType2StatusInd,  vtfunction =  38;
+  hideShowObjectReq,             vtfunction = 160;
+  selectInputObjectReq,          vtfunction = 162;
+  controlAudioSignalReq,         vtfunction = 163;
+  changeNumericValueReq,         vtfunction = 168;
+  changeActiveMaskReq,           vtfunction = 173;
+  changeSoftKeyMaskReq,          vtfunction = 174; 
+  changeAttributeReq,            vtfunction = 175;
+  deleteObjectPoolReq,           vtfunction = 178;
+  changeStringValueReq,          vtfunction = 179;
+  changeChildPositionReq,        vtfunction = 180;
+  getMemoryReq,                  vtfunction = 192;
+  getNumberOfSoftKeysReq,        vtfunction = 194;
+  getTextFontDataReq,            vtfunction = 195;
+  getHardwareReq,                vtfunction = 199;
+  getSupportedWidecharsReq,      vtfunction = 193;
+  getWindowMaskDataReq,          vtfunction = 196;
+  getSupportedObjectsReq,        vtfunction = 197;
+  loadVersionReq,                vtfunction = 209;
+  getVersionsReq,                vtfunction = 223;
+  workingSetMaintenanceReq,      vtfunction = 255;
+  // put all ECU2VT response messages here
+  //dummy_ECU2VT_Res, 	         vtfunction = 0;
+  ) " 
+} 
 
 } with { encode "RAW" }
+
diff --git a/demo/Isobus_Templates.ttcn b/demo/Isobus_Templates.ttcn
index aadca7f..13fdd15 100644
--- a/demo/Isobus_Templates.ttcn
+++ b/demo/Isobus_Templates.ttcn
@@ -1,13 +1,3 @@
-/* Copyright (c) 2010, 2016  Ericsson 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
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
 module Isobus_Templates {
 
 import from IsobusMessageTypes all
@@ -16,7 +6,7 @@
 import from General_Types all
 
 
-template TopLevelMessage_ECU2VT_PDU t_GetMemoryReqX( INT3 p_memoryRequired) := {
+template ECU2VT t_GetMemoryReqX( INT3 p_memoryRequired) := {
   getMemoryReq := {
     vtfunction                      := 194,
     reserved2                       := 'FF'O,
@@ -26,25 +16,25 @@
   }
 };
 
-template AnyIsoBusPdu t_ecu2vt(template TopLevelMessage_ECU2VT_PDU t_Message) := {
+template AnyIsoBusPdu t_ecu2vt(template ECU2VT t_Message) := {
   ecu2vt := t_Message
 };
 
-template AnyIsoBusPdu t_vt2ecu(template TopLevelMessage_VT2ECU_PDU t_Message) := {
+template AnyIsoBusPdu t_vt2ecu(template VT2ECU t_Message) := {
   vt2ecu := t_Message
 };
 
 template AnyIsoBusPdu t_GetMemoryReq_pdu(INT3 p_memoryRequired) := {
-     ecu2vt := {getMemoryReq := t_GetMemoryReq(p_memoryRequired)}
+  ecu2vt := {getMemoryReq := t_GetMemoryReq(p_memoryRequired)}
 }
 
 
 template GetMemoryReq t_GetMemoryReq(INT3 p_memoryRequired) := {
-    vtfunction                    := 194,
-    reserved2                     := 'FF'O,
-    memoryRequired                := p_memoryRequired,
-    reserved7                     := 'FF'O,
-    reserved8                     := 'FF'O
+  vtfunction                    := 194,
+  reserved2                     := 'FF'O,
+  memoryRequired                := p_memoryRequired,
+  reserved7                     := 'FF'O,
+  reserved8                     := 'FF'O
 }
 
 template GetMemoryRes t_GetMemoryRes(e_GetMemoryResVersionNumber p_versionNumber, e_GetMemoryResStatus p_status) := {
@@ -71,4 +61,26 @@
   numberOfRanges              := p_numberOfRanges, 
   wideCharRangeArray          := p_wideCharRangeArray
 }
+
+
+template AnyIsoBusPdu t_WorkingSetMaintenanceReq_pdu(
+  WorkingSetMaintenanceBitMask p_bitMask, 
+  e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+  ecu2vt := {workingSetMaintenanceReq := t_WorkingSetMaintenanceReq(p_bitMask, p_versionNumber)}
 }
+
+template WorkingSetMaintenanceReq t_WorkingSetMaintenanceReq(
+  WorkingSetMaintenanceBitMask p_bitMask, 
+  e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+  vtfunction                    := 255,
+  bitMask                       := p_bitMask,
+  versionNumber                 := p_versionNumber,    
+  reserved4                     := 'FF'O,
+  reserved5                     := 'FF'O,
+  reserved6                     := 'FF'O,
+  reserved7                     := 'FF'O,
+  reserved8                     := 'FF'O
+}
+
+}
+
diff --git a/demo/Isobustest.ttcn b/demo/Isobustest.ttcn
index 5938051..fc85669 100644
--- a/demo/Isobustest.ttcn
+++ b/demo/Isobustest.ttcn
@@ -11,6 +11,7 @@
 //  File:               Isobustest.ttcn
 //  Description:        Encoder / Decoder for Isobus message frames
 //
+// Revision R1A
 
 module Isobustest {
 
@@ -22,6 +23,7 @@
 import from SocketCAN_Templates all
 import from Can all
 import from Isobus all
+import from IsobusMessageTypes all
 import from Isobus_Templates all
 
 
@@ -70,17 +72,32 @@
   timer T0:= 0.2
 }
 
+const integer MAX_CONNECTIONS := 65535
+
+type record length (0..MAX_CONNECTIONS) of PTC2_CT OpenConnections
+type record length (0..MAX_CONNECTIONS) of boolean OpenConnectionsFlags
+
 type component PTC1_CT
 {
   port Isobus_PT                      pt_isobus
   //variables
+  var OpenConnections                 openConnections
+  var OpenConnectionsFlags            openConnectionsFlags
   //timers
   timer T1:= 0.2
 
 }
 type component PTC2_CT
 {
+  port Isobus_PT                      pt_isobus
   //variables
+  var octetstring receivedUnacknowledgedData
+  var INT2        msgSizeInBytes
+  var INT2        receivedUnacknowledgedMsgSizeInBytes
+  var INT1        nextExpectedPacketNumber
+  var PGN         pgnOfMultiPacketMessage
+  var OCT1        ps, sa
+  var CAN_id      tp_dt_can_id
   //timers
   timer T2:= 0.2
 }
@@ -234,13 +251,13 @@
   {
     //var SocketCAN_socket_result v_result_socketcan
     var SocketCAN_receive_CAN_or_CAN_FD_frame v_result_socketcan
-    var CAN_frame_j1939 v_result_can_frame_j1939
     //T0.start;
 
     alt 
     {
       [] pt_socketCAN.receive(a_SocketCAN_receive_CAN_frame(v_socket_id, t_CAN_EFF_FLAG, ?)) -> value v_result_socketcan
-      {log("SocketCan:Expected frame received", v_result_socketcan)
+      {
+        //log("SocketCan:Expected frame received", v_result_socketcan)
         // it is assumed that no can fd frames are received here
         if(ischosen(v_result_socketcan.frame.can_frame)){
           var CAN_frame_j1939  v_CAN_frame_j1939 := can2j1939frame(v_result_socketcan.frame.can_frame)
@@ -249,10 +266,6 @@
           setverdict(inconc, "reception of canfd frame not expected") 
         }
       }
-      [] pt_socketCAN.receive(?) -> value v_result_socketcan
-      {log("SocketCan:Unexpected frame received!", v_result_socketcan)
-        setverdict(fail)
-      }
     }//endalt
   }
   f_close_socket2(v_socket_id)
@@ -291,16 +304,253 @@
   }
 }//endfunction  var boolean condition1
 
+function f_get_component (in OCT1 connectioninitiator, in OCT1 connectionresponder) runs on PTC1_CT return PTC2_CT {
 
+  var PTC2_CT v_PTC2
+
+  var integer index
+  index:= oct2int(connectioninitiator) + 256 * oct2int(connectionresponder)
+
+  if (openConnectionsFlags[index] == false){
+
+    v_PTC2 := PTC2_CT.create
+    v_PTC2.start(f_behaviour_connections()); 
+    openConnectionsFlags[index] := true
+    openConnections[index] := v_PTC2
+    connect(v_PTC2:pt_isobus, self:pt_isobus)
+  } else {
+    v_PTC2 := openConnections[index]
+  }
+  return v_PTC2
+}
+
+
+
+function  f_behaviour2_sync() runs on PTC1_CT
+{
+
+  var boolean condition1 := true
+  var CAN_frame_j1939 v_can_frame_j1939
+
+  // initialization
+
+  var integer i
+  for(i:=1;i<=MAX_CONNECTIONS; i:= i+1){
+    openConnectionsFlags[i] := false
+  }
+
+  //periodic reception
+
+
+
+
+  while (condition1)
+  {
+    //T1.start;
+
+    alt 
+    {
+
+      /*  []syncport.receive("halt") {
+      condition1:=false  } */
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { requestToSend := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { endOfMessageAcknowledgement := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { connectionAbort := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { broadcastAnnounce := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_dt := ?}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received tp_ct: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+        var PTC2_CT v_PTC2
+        v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+        pt_isobus.send(v_can_frame_j1939) to v_PTC2
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:?) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received: ",  v_can_frame_j1939);
+      } 
+
+      //[]T1.timeout; 
+
+    }//endalt
+  }
+}//endfunction  var boolean condition1
+function  f_behaviour_connections() runs on PTC2_CT
+{
+
+  var boolean condition1 := true
+  var CAN_frame_j1939 v_can_frame_j1939
+
+  // initialization
+
+  //periodic reception
+
+
+
+
+  while (condition1)
+  {
+    //T1.start;
+
+    alt 
+    {
+
+      /*  []syncport.receive("halt") {
+      condition1:=false  } */
+      []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { requestToSend := ?}}}) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        msgSizeInBytes := v_can_frame_j1939.can_pdu.tp_cm.requestToSend.msgSizeInBytes
+        receivedUnacknowledgedData := ''O
+        receivedUnacknowledgedMsgSizeInBytes := 0
+        pgnOfMultiPacketMessage := v_can_frame_j1939.can_pdu.tp_cm.requestToSend.pgnOfMultiPacketMessage
+        ps := v_can_frame_j1939.can_j1939.ps
+        sa := v_can_frame_j1939.can_j1939.sa
+        //log incoming message 
+        log ("received requestToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+        alt // connection open requested
+        {
+          []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := {ctrl := '11'O, 
+                    totalNumberOfPackets := ?,
+                    nextPacketNumber :=1, 
+                    reserved4 := ?,
+                    reserved5 := ?, 
+                    pgnOfMultiPacketMessage := ?}}}}) -> value v_can_frame_j1939 { 
+            //T1.stop; 
+            nextExpectedPacketNumber := v_can_frame_j1939.can_pdu.tp_cm.clearToSend.nextPacketNumber
+            //log incoming message 
+            log ("received clearToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+            alt // connection open - receivig data
+            {
+              []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_dt := ?}}) -> value v_can_frame_j1939 { 
+                //T1.stop; 
+                if ((msgSizeInBytes - receivedUnacknowledgedMsgSizeInBytes) > 7) {
+                  tp_dt_can_id := j1939id2canid(v_can_frame_j1939.can_j1939) // actuallay it is only necessary to store it once
+                  receivedUnacknowledgedData := receivedUnacknowledgedData & v_can_frame_j1939.can_pdu.tp_dt.data
+                  receivedUnacknowledgedMsgSizeInBytes := receivedUnacknowledgedMsgSizeInBytes + 7
+                  nextExpectedPacketNumber := nextExpectedPacketNumber + 1 }
+                else {
+                  log("v_can_frame_j1939.can_j1939: ", v_can_frame_j1939.can_j1939)
+                  tp_dt_can_id := j1939id2canid(v_can_frame_j1939.can_j1939) // actuallay it is only necessary to store it once
+                  receivedUnacknowledgedData := receivedUnacknowledgedData & substr(v_can_frame_j1939.can_pdu.tp_dt.data
+                    ,0 , (msgSizeInBytes - receivedUnacknowledgedMsgSizeInBytes))
+                  nextExpectedPacketNumber := 0 
+                  receivedUnacknowledgedMsgSizeInBytes := msgSizeInBytes
+                }
+                //log incoming message 
+                log ("received tp_dt: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+                repeat
+              }
+              []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := ?}}}) -> value v_can_frame_j1939 { 
+                //T1.stop; 
+                //log incoming message 
+                log ("received clearToSend: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+                repeat
+              }
+              []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { endOfMessageAcknowledgement := ?}}}) -> value v_can_frame_j1939 { 
+                //T1.stop; 
+                //log incoming message 
+                log ("received endOfMessageAcknowledgement: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+                if (receivedUnacknowledgedMsgSizeInBytes == msgSizeInBytes) {
+                  var octetstring receivedData
+                  //var PGN pgn := v_can_frame_j1939.can_pdu.tp_cm.endOfMessageAcknowledgement.pgnOfMultiPacketMessage
+                  if (oct2int((int2oct(pgnOfMultiPacketMessage, 3) and4b '00FF00'O)>> 1 ) < 240) {
+                    log ("pgnOfMultiPacketMessage: ", pgnOfMultiPacketMessage, ", ", int2oct(pgnOfMultiPacketMessage, 3))
+                    log ("ps: ", ps)
+                    log ("sa: ", sa)
+                    receivedData := int2oct(oct2int((int2oct(pgnOfMultiPacketMessage, 3) and4b '03FFFF'O)>> 1 ), 2) & ps & sa & receivedUnacknowledgedData
+                  }
+                  else
+                  {
+                    log ("pgnOfMultiPacketMessage: ", pgnOfMultiPacketMessage, ", ", int2oct(pgnOfMultiPacketMessage, 3))
+                    log ("sa: ", sa)
+                    receivedData := (int2oct(pgnOfMultiPacketMessage, 3) and4b '03FFFF'O) & sa & receivedUnacknowledgedData
+                  }
+                  //var octetstring receivedData := (tp_dt_can_id and4b  '0003FFFF'O) & receivedUnacknowledgedData
+                  log("tp_dt_can_id: ", tp_dt_can_id)
+                  //var octetstring receivedData := tp_dt_can_id & receivedUnacknowledgedData
+                  //var octetstring receivedData := receivedUnacknowledgedData
+                  log ("received tp_dt frame with PGN: ",  receivedData);
+
+                  v_can_frame_j1939:=f_decode_CAN_frame_j1939(receivedData)
+                  log ("received tp_dt frame j1939: ",  v_can_frame_j1939);
+                }
+                else {
+                  log ("received incomplete message frame: ",  receivedUnacknowledgedData);
+                }
+              }
+            }
+          }
+          []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { connectionAbort := ?}}}) -> value v_can_frame_j1939 { 
+            //T1.stop; 
+            //log incoming message 
+            log ("received connectionAbort: ",  v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+          }
+        }
+
+
+      } 
+      []pt_isobus.receive(CAN_frame_j1939:?) -> value v_can_frame_j1939 { 
+        //T1.stop; 
+        //log incoming message 
+        //log ("received: ",  v_can_frame_j1939);
+      } 
+
+      //[]T1.timeout; 
+
+    }//endalt
+  }
+}//endfunction  var boolean condition1
 
 
 testcase tc_encdec() runs on MTC_CT
 
 {
 
-
-
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E9'O, ps := 'FD'O, sa := 'E6'O }, can_pdu := { addressClaimed := { name := 'A80056AAABBCC778'O }}}
+  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E9'O, ps := 'FD'O, sa := 'E6'O },     
+  can_pdu := { addressClaimed := { name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B } }}}
   log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939)))
   log("--------------------------------------------")
   log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
@@ -312,14 +562,14 @@
   log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_2))))
   log("--------------------------------------------")
 
-  template CAN_frame_j1939 t_CAN_frame_j1939_3 :=  { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := '1122334455667788'O }}}
+  template CAN_frame_j1939 t_CAN_frame_j1939_3 :=  { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B } }}}
   log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_3)))
   log("--------------------------------------------")
   log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_3))))
   log("--------------------------------------------")
 
   template CAN_frame_j1939 t_CAN_frame_j1939_6 :=  { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E6'O , ps := 'FD'O, sa := '00'O }, can_pdu := { commandedAddress := {
-        name:='1122334455667788'O,
+        name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B },
         newSourceAddress:='AA'O
       } } }
   log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_6)))
@@ -372,6 +622,23 @@
   log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
 }
 
+testcase tc_encdec_ecu2vt_workingSetMaintenanceReq() runs on MTC_CT // using a template
+{
+  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
+    t_WorkingSetMaintenanceReq_pdu({
+        initiatingWorkingSetMaintenance := true,
+        reserved1 := false,
+        reserved2 := false,
+        reserved3 := false,
+        reserved4 := false,
+        reserved5 := false,
+        reserved6 := false,
+        reserved7 := false}, compliantWithVTVersion4)}
+  log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939)))
+  log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
+}
+
+
 testcase tc_dec_requestForAddressClaimed() runs on MTC_CT
 {
 
@@ -384,6 +651,39 @@
   log("--------------------------------------------")
 }
 
+
+
+testcase tc_dec_largemessage() runs on MTC_CT
+{
+
+  var octetstring j1939_pdu
+                
+  j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
+  //  j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
+  /*
+03FE00F82A66696C65207365727665722A3139373136392A2D2A
+03FE00262A6661726D20646973706C61792A3139373136392A2D2A
+03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A
+03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A
+01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+02FE00FD016661726D20646973706C617920312E33372E31362E3733352A
+02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A
+02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A
+9CFE0DF8FE01FFFFFFFFFFFFFF
+*/
+
+
+
+  log(j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_CAN_frame_j1939(j1939_pdu))
+  log("--------------------------------------------")
+}
+
 //test case declarations
 testcase tc_Example001()  runs on MTC_CT
 {
@@ -416,6 +716,39 @@
 //when the test case terminates, MTC will terminate as well
 //PTCs terminate (reach the state done) when the function with which they were started terminates
 
+//test case declarations
+testcase tc_Example002()  runs on MTC_CT
+{
+
+  var PTC_isobus_CT v_PTC_isobus 
+  var PTC1_CT v_PTC1
+
+  //create components
+  v_PTC_isobus:=PTC_isobus_CT.create; 
+  v_PTC1:=PTC1_CT.create; 
+
+  //connnect ports
+  //map ports
+
+  //start components 
+
+  v_PTC1.start(f_behaviour2_sync());
+  v_PTC_isobus.start(f_behaviour_isobus(v_PTC1));
+
+  //wait for termination
+  all component.done
+
+
+  //unmap ports
+  //disconnect ports
+  //terminate all parallel test componenets
+  all component.kill
+
+}
+//when the test case terminates, MTC will terminate as well
+//PTCs terminate (reach the state done) when the function with which they were started terminates
+
+
 control 
 {
 
@@ -426,3 +759,4 @@
 }//endcontrol
 
 } with { encode "RAW" } 
+
diff --git a/src/SocketCAN_Templates.ttcn b/src/SocketCAN_Templates.ttcn
index 7ca8e96..e9e1678 100644
--- a/src/SocketCAN_Templates.ttcn
+++ b/src/SocketCAN_Templates.ttcn
@@ -1,3 +1,18 @@
+/* Copyright (c) 2010, 2016  Ericsson 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
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+//  File:               SocketCANtest.ttcn
+//  Description:        SocketCAN port type test
+//
+
+
 module SocketCAN_Templates {
 
 import from SocketCAN_Types all;
@@ -90,3 +105,4 @@
 }
 
 }
+
