significant update to Isobus covering bug fixes and functionality
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 @@
 }
 
 }
+