diff --git a/README.md b/README.md
index 7e94e9e..c475a24 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-# titan.TestPorts.SocketCANasp
-# compiled with: Titan CRL 113 200/6 R5A
-# GCC 7.3.0 Using OpenSSL 1.0.2n  
-
+# titan.TestPorts.SocketCANasp
 
 Main project page:
 
@@ -22,28 +19,33 @@
 http://www.can-cia.de/fileadmin/resources/documents/proceedings/2012_hartkopp.pdf
 http://v2.can-newsletter.org/uploads/media/raw/46c15d02e1fdd3b04e671693ec548ff7.pdf
 
-# See file: src/initscript.sh:
+# See file: demo/initscript.sh:
 
 #--------------------------------------
 #!/bin/bash
 
+
+# create a virtual can interface:
+
+sudo modprobe vcan
+sudo ip link add dev vcan0 type vcan
+sudo ip link set vcan0 up
+
+#!/bin/bash
+
 # Add vcan module to kernel
 sudo modprobe vcan
 
 # Setup of virtual can vcan0
 sudo ip link add dev vcan0 type vcan
-# set it up at as a canfd can interface
+# set it up at as a canfd capable can interface
 sudo ip link set vcan0 mtu 72
 sudo ip link set vcan0 up
 
-# Setup of virtual can vcan1
-sudo ip link add dev vcan1 type vcan
-sudo ip link set vcan1 up
+# or create a physical can interface
+# sudo ip link set can0 up type can bitrate 1000000
 
-# example configuration of a physical can bus interface
-#sudo ip link set can0 up type can bitrate 1000000
-
-ifconfig
+ip a
 
 #--------------------------------------
 
@@ -56,10 +58,12 @@
 make clean; make
 
 ttcn3_start SocketCAN SocketCAN.cfg
+or 
+ttcn3_start SocketCAN CAN_matrix_test.cfg
 
 or to run a certain testcase:
 
-ttcn3_start SocketCAN SocketCAN.cfg  SocketCANtest.tc_can_raw1 SocketCANtest.tc_can_bcm1
+ttcn3_start SocketCAN SocketCAN.cfg  SocketCAN_RAW_test.tc_can_raw_send_and_receive_can_frame SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FILTER
 
 Review the newly created log files in the src directory
 and use e.g. Wireshark to trace the CAN interfacce.
@@ -78,16 +82,22 @@
  test interfaces for each interface have to be defined in the MTC.
  
 -CAN RAW:
- CAN and CANFD has been implemented and tested.
- Depending on the availability of the C-code #define CANFD_SUPPORT
- in src/SocketCAN_PT.cc CAN-FD support is enabled at compile time.
- If you kernel does not have CANFD support comment out the #define CANFD_SUPPORT
- the file "src/SocketCAN_PT.cc"
+ CAN FD has been implemented, however not been tested.
+ Depending on the availability of the C-code #define "CAN_FD_FRAME"
+ in /usr/include/linux/can/bcm.h, CAN-FD support is enabled at compile time.
+ The RAW setsockopt has path coverage. However no test coverage that insures
+ the setsockopt functionality provided by the kernel is working correctly. 
+ For this purpose in the future might be added additional test cases.
 
 -CAN BCM:
  TX_SETUP, TX_DELETE have been tested, TX_READ is known to fail test cases.
- The BCM has test coverage for TX_SETUP and TX_DELETE. 
+ Some tests have indicated, that that SocketCAN BCM does not support concurrently
+ active BCM channels.
+ The BCM has test coverage for TX_SETUP and TX_DELETE. However no test coverage
+ that insures the BCM functionality provided by the kernel is working correctly. 
+ For this purpose in the future might be added additional test cases.
  Return values other than the error code by the BCM are not yet supported.
+ BCM wth CAN FD frames has not been tested yet.
 
 -ISOTP:
  Iso TP functionality has been added, however currently no options like padding 
@@ -103,13 +113,45 @@
  There is an endlessly running test case: 
  ttcn3_start SocketCAN SocketCAN.cfg Isotptest.tc_Isotp_Example001
  
+-CAN J1939:
+Configure CAN J1939 as following (requires Kernel 5.4 and compiled with can-j1939 kernel module):
+sudo modprobe vcan
+sudo ip link add vcan0 type vcan
+sudo ip link set vcan0 up
+sudo modprobe can-j1939
+
+For the following test cases, the messages are so huge that screen output of the log file takes too long.
+Thus comment out as following the following lines in J1939.cfg:
+//FileMask := LOG_ALL | DEBUG | MATCHING
+//ConsoleMask := LOG_ALL | DEBUG | MATCHING
+
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message_parallel
+
+Here above lines can be commented in:
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_request_for_address_claimed
+
+
+
+ 
 -Merging of logfiles:
  To merge the logfies from multiple Parallel Test Componets (PTCs) from a
- single run in timely order into sigle file, run in demo directory:
-   $  ./merge.sh
-      the merged and pretty printed log file is found in "demo/log_merged_pretty.txt"
+ single run in timely order into sigle file, run:
+ ttcn3_logmerge -o log_merged.txt *.log
+ The merged log-file is found at log_merged.txt
  
-
--Dunping CAN Frames using SocketCAN:
+ -Pretty printing the log file:
+ ttcn3_logformat -o log_merged_format.log log_merged.log
+ 
+-Dumping CAN Frames using SocketCAN:
  To dump all received can frames of e.g. "vcan0" run a seperate terminal:
-   $ candump "vcan0"
+   $ candump -td -d "vcan0"
+
+-Spying J1939 CAN-Frames using SocketCAN (only for SocketCAN J1939):
+   $ j1939spy -td -P -b 4193977 vcan0
+
+- Runnung ttcn compiler and merging logs:
+
+rm *.log;make;ttcn3_start SocketCAN J1939.cfg J1939_Isobus_test.tc_can_j1939_IsobusVtEcuSimulation ;ttcn3_logmerge -o log_merged.log *.log;ttcn3_logformat -o log_merged_format.log log_merged.log;kate log_merged_format.log
+ 2004  history | grep ttcn
diff --git a/demo/Isobus.ttcn b/demo/Isobus.ttcn
index 6c525f6..20b6702 100644
--- a/demo/Isobus.ttcn
+++ b/demo/Isobus.ttcn
@@ -15,58 +15,27 @@
 
 module Isobus {
 import from General_Types all
-import from Can all
 import from IsobusCMMessageTypes all
 import from IsobusNMMessageTypes all
 import from IsobusVTMessageTypes all
 import from J1939 all
 
-// Note:
-// SocketCAN Error frames are not considered here
-// SocketCAN RTR frames are not considered here
-// SocketCAN Basic frames are not considered here
-
-external function encode_CAN_frame_j1939mod(in CAN_frame_j1939mod pdu) return octetstring 
+external function f_encode_J1939_message(in J1939_messageWithPGN pdu) return octetstring 
 with { extension "prototype(convert) encode(RAW)" }
-external function decode_CAN_frame_j1939mod(in octetstring data) return CAN_frame_j1939mod
+external function f_decode_J1939_message(in octetstring data) return J1939_messageWithPGN
 with { extension "prototype(convert) decode(RAW)" }
 
-const octetstring ISOBUS_PRIORITY_MASK    := '1C000000'O;
-const octetstring ISOBUS_RESERVED_MASK    := '02000000'O;
-const octetstring ISOBUS_DATAPAGE_MASK    := '01000000'O;
-const octetstring ISOBUS_PDUFORMAT_MASK   := '00FF0000'O;
-const octetstring ISOBUS_PDUSPECIFIC_MASK := '0000FF00'O;
-const octetstring ISOBUS_SOURCEADDRESS_MASK := '000000FF'O;
-
 type J1939_Priority Priority
 
-type record J1939_header { // Error & RTR Frames are not considered here
-  //PGN   pgn optional,
-  //BIT3           ignore,
-  Priority       prio,
-  BIT1           res, 
-  BIT1           dp,
-  OCT1           pf,
-  OCT1           ps,
-  SourceAddress  sa
-} with { variant "FIELDORDER(msb)" }
+type record J1939PDU_with_NAME
+{
+  J1939_ADDR                            addr,
+  J1939_NAME                            name,
+  J1939_messageWithPGN                  pdu
+} with {variant "" };
 
 
-
-type record J1939mod { // Error & RTR Frames are not considered here
-  //PGN   pgn optional,
-  //BIT3           ignore,
-  Priority       prio,
-  BIT1           res, 
-  BIT1           dp,
-  OCT1           pf,
-  OCT1           ps,
-  SourceAddress  sa,
-  OCT3           comp
-} with { variant "FIELDORDER(msb)" }
-
-
-type union AnyIsoBusPdu {
+type union Isobus_message {
   ETP_DT                     etp_dt,  // extended TP data transfer
   ETP_CM                     etp_cm,  // extended TP connection management 
   VT2ECU                     vt2ecu,  // Message Virtual Terminal (VT) to ECU
@@ -75,240 +44,35 @@
   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,
+  //CannotClaimSourceAddress   cannotClaimSourceAddress,
+  //AddressClaimed             addressClaimed,
+  AddressClaimed               addressClaimedOrCannotClaimSourceAddress, 
   CommandedAddress           commandedAddress
   // other upper layer isobus protocols like Task Comtroller are added here ...
 }
 with { variant "" }
 
-type record CAN_frame_j1939 {
-  J1939_header               can_j1939,
-  AnyIsoBusPdu        can_pdu 
-}with { variant "" }
 
-
-type record CAN_frame_j1939mod {
-  J1939mod            can_j1939,
-  AnyIsoBusPdu        can_pdu 
-}with {
-  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;  //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!!!!!!
+type record J1939_messageWithPGN {
+J1939_PGN pgn,
+Isobus_message pdu
 }
-
-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 {
-  var CAN_frame v_can_frame
-  v_can_frame.can_id := pdu1_j1939id2canid(p_can_frame_j1939.can_j1939, p_priority, p_da, p_sa)
-  // v_can_frame.can_pdu := encode_AnyIsoBusPdu(p_can_frame_j1939.can_pdu)
-  v_can_frame.can_pdu := substr(f_encode_CAN_frame_j1939(p_can_frame_j1939),0,3)//strip 3 byte header 
-  return v_can_frame
-}
-
-function pdu1_j1939id2canid(in J1939_header p_j1939, in Priority p_priority, in DestinationAddress p_da, in SourceAddress p_sa) return CAN_id{
-  var CAN_id v_can_id
-  v_can_id := bit2oct(oct2bit(p_sa) or4b (oct2bit(p_da) << 8) or4b (oct2bit(p_j1939.pf) << 16) or4b ((p_j1939.dp) << 24) or4b 
-    ((p_j1939.res) << 25) or4b (int2bit(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_header 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 + 
-    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)
-
-  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)
-  return v_can_frame_j1939
-}
-
-function canid2j1939(in CAN_id p_can_id) return J1939_header {
-  //--------------------------------------------------------------------------------------- 
-
-  var bitstring v_can_id_bitstring:= oct2bit(p_can_id)
-  var J1939_header v_j1939
-
-  v_j1939.prio :=bit2int(substr(v_can_id_bitstring, 0, 6)); //3 ,3
-  v_j1939.res  :=v_can_id_bitstring[6];
-  v_j1939.dp   :=v_can_id_bitstring[7];
-  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
-}
-
-//********************************************************************************-
-
-
-
-//---------------------------------------------------------------------------
-function f_insert_aux_hdr(in octetstring p_os) return octetstring
-//---------------------------------------------------------------------------
-{
-  var OCT3 v_os
-
-
-  v_os[0]:=p_os[1];//pf
-  if(p_os[1] == 'FE'O)
-  {
-    if (p_os[2]=='D8'O) {v_os[1]:='D8'O;v_os[2]:='00'O;}
-  }
-
-  else if(p_os[1] == 'EE'O)
-  {
-    if (p_os[2] == 'FF'O) 
-    { if (p_os[3]=='FE'O) {v_os[1]:='FF'O;v_os[2]:='FE'O;}
-      else                  {v_os[1]:='FF'O;v_os[2]:='00'O;}
-    }
-
-  } 
-
-
-  else  { v_os[1]:='00'O;v_os[2]:='00'O;}
-
-
-  //log("replace(p_os,4,0,v_os)  :",replace(p_os,4,0,v_os))
-
-  return replace(p_os,4,0,v_os)//insert aux header
-}
-
-//---------------------------------------------------------------------------
-function f_remove_aux_hdr(in octetstring p_os) return octetstring
-//---------------------------------------------------------------------------
-{
-  //log("p_os  :",p_os)
-
-
-  p_os[1]:=p_os[4]; //pf := aux[0];
-  if (p_os[4] == 'EE'O)  
-  {
-    if (p_os[6] == 'FE'O ) { //'EEFFFE' O
-      p_os[2]:=p_os[5]; //ps := aux[1];
-      p_os[3]:=p_os[6]; //sa := aux[2];
-    }
-    else    { //'EEFFXX'O
-      p_os[2]:=p_os[5]; //ps := aux[1];
-    }
-  } 
-  else  if  (p_os[4] == 'FE'O) //'FED8XX'O
-  {
-    p_os[2]:=p_os[5]; //ps := aux[1];
-  }
-
-
-  //log("p_os  :",p_os)
-
-  //log("replace(p_os,4,3,''O)   :",replace(p_os,4,3,''O))
-  return replace(p_os,4,3,''O); //remove aux header
-}
-
-//---------------------------------------------------------------------------
-function f_map_mod2frame(in CAN_frame_j1939mod p_frame) return CAN_frame_j1939
-//---------------------------------------------------------------------------
-{
-  var CAN_frame_j1939 v_CAN_frame_j1939
-
-  v_CAN_frame_j1939.can_pdu:=p_frame.can_pdu;
-  v_CAN_frame_j1939.can_j1939.prio:=p_frame.can_j1939.prio;
-  v_CAN_frame_j1939.can_j1939.res:=p_frame.can_j1939.res;
-  v_CAN_frame_j1939.can_j1939.dp:=p_frame.can_j1939.dp;
-  v_CAN_frame_j1939.can_j1939.pf:=p_frame.can_j1939.pf;
-  v_CAN_frame_j1939.can_j1939.ps:=p_frame.can_j1939.ps;
-  v_CAN_frame_j1939.can_j1939.sa:=p_frame.can_j1939.sa;
-
-
-  //log("v_CAN_frame_j1939   :",v_CAN_frame_j1939)
-  return v_CAN_frame_j1939
-
-}
-
-
-//---------------------------------------------------------------------------
-function f_map_frame2mod(in CAN_frame_j1939 p_frame) return CAN_frame_j1939mod
-//---------------------------------------------------------------------------
-{
-  var CAN_frame_j1939mod v_CAN_frame_j1939mod
-
-
-  v_CAN_frame_j1939mod.can_pdu:=p_frame.can_pdu;
-  v_CAN_frame_j1939mod.can_j1939.prio:=p_frame.can_j1939.prio;
-  v_CAN_frame_j1939mod.can_j1939.res:=p_frame.can_j1939.res;
-  v_CAN_frame_j1939mod.can_j1939.dp:=p_frame.can_j1939.dp;
-  v_CAN_frame_j1939mod.can_j1939.pf:=p_frame.can_j1939.pf;
-  v_CAN_frame_j1939mod.can_j1939.ps:=p_frame.can_j1939.ps;
-  v_CAN_frame_j1939mod.can_j1939.sa:=p_frame.can_j1939.sa;
-  if (p_frame.can_j1939.pf == 'EE'O)
-  {
-    if (p_frame.can_j1939.ps == 'D8'O)  { 
-      v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&p_frame.can_j1939.ps&'00'O;
-    } else if (p_frame.can_j1939.ps == 'FF'O) {
-      if (p_frame.can_j1939.sa == 'FE'O) {
-        v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&p_frame.can_j1939.ps&p_frame.can_j1939.sa
-      } else {//??
-        v_CAN_frame_j1939mod.can_j1939.comp:=p_frame.can_j1939.pf&'0000'O;
-      }
-    } else {//?? 
-      v_CAN_frame_j1939mod.can_j1939.comp:=p_frame.can_j1939.pf&'0000'O;
-    } 
-  } else {
-    v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&'0000'O;
-  }
-  //log("v_CAN_frame_j1939mod  :",v_CAN_frame_j1939mod)
-  return v_CAN_frame_j1939mod;
-}
-
-
-
-//---------------------------------------------------------------------------
-function f_encode_CAN_frame_j1939(in CAN_frame_j1939 pdu) return octetstring 
-//---------------------------------------------------------------------------
-{
-
-  return f_remove_aux_hdr(encode_CAN_frame_j1939mod(f_map_frame2mod(pdu)))
-
-
-}
-//---------------------------------------------------------------------------
-function f_decode_CAN_frame_j1939(in octetstring data) return CAN_frame_j1939
-//---------------------------------------------------------------------------
-{
-  log("f_insert_aux_hdr(data)", f_insert_aux_hdr(data));
-  return f_map_mod2frame(decode_CAN_frame_j1939mod(f_insert_aux_hdr(data)))
-
-
+with {
+  variant (pdu) "CROSSTAG(
+  etp_dt,                   pgn = '00C700'O;  //199
+  etp_cm,                   pgn = '00C800'O;  //200
+  vt2ecu,                   pgn = '00E600'O;  //230
+  ecu2vt,                   pgn = '00E700'O;  //231
+  requestForAddressClaimed, pgn = '00EA00'O;  //234
+  tp_dt,                    pgn = '00EB00'O;  //235
+  tp_cm,                    pgn = '00EC00'O;  //236
+  networkMessage,           pgn = '00ED00'O;  //237
+  // cannotClaimSourceAddress, pgn = '00EEFFFE'O;  //238 where the SA is 'FE'O
+  // addressClaimed,           pgn = '00EEFFXX'O;   //238 where the SA is XX != FE!
+  addressClaimedOrCannotClaimSourceAddress,   pgn = '00EEFF'O;  //238, the SA determies
+                                                                // if it is addressClaimed (SA != 'FE'O)
+                                                                // or it is cannotClaimSourceAddress (SA == 'FE'O)
+  commandedAddress,         pgn = '00FED8'O)"  //254 
 }
 
 
diff --git a/demo/IsobusMessageTypes.ttcn b/demo/IsobusMessageTypes.ttcn
index e706f17..794f35d 100644
--- a/demo/IsobusMessageTypes.ttcn
+++ b/demo/IsobusMessageTypes.ttcn
@@ -9,8 +9,7 @@
 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)" };
 
diff --git a/demo/IsobusNMMessageTypes.ttcn b/demo/IsobusNMMessageTypes.ttcn
index 3a4ed24..c110803 100644
--- a/demo/IsobusNMMessageTypes.ttcn
+++ b/demo/IsobusNMMessageTypes.ttcn
@@ -5,6 +5,7 @@
 
 module IsobusNMMessageTypes {
 
+import from J1939 all
 import from General_Types all
 import from IsobusMessageTypes all
 
@@ -20,39 +21,22 @@
   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
 {
-  NAME          name
+  J1939_NAME_RECORD_REVERSE_BYTE_ENCODING          name
+    // or alternatively
+  // J1939_NAME          name 
 } with { variant "" }
 
 type record AddressClaimed
 {
-  NAME          name
+  J1939_NAME_RECORD_REVERSE_BYTE_ENCODING          name
+  // or alternatively
+  // J1939_NAME          name 
 } with { variant "" }
 
 type record RequestForAddressClaimed {
@@ -62,8 +46,10 @@
 
 
 type record CommandedAddress {
-  NAME          name,
-  SourceAddress newSourceAddress
+  J1939_NAME_RECORD_REVERSE_BYTE_ENCODING          name,
+    // or alternatively
+  // J1939_NAME          name 
+  SourceAddress                                    newSourceAddress
 } with { variant "" }
 
 // --------- NetworkMessage -------------
@@ -129,7 +115,7 @@
 {
   INT1                                      maxTransferRate,
   PGN                                       pgn,
-  NAME                                      name,
+  J1939_NAME                                name,
   OCT8                                      nameQualifier
 } with {variant "" };
 
@@ -178,7 +164,7 @@
 type record SA_NAME_pair
 {
   SourceAddress                             sourceAddress,
-  NAME                                      name
+  J1939_NAME                                name
 } with {variant "" };
 
 type record N_NTX_Response 
@@ -327,7 +313,7 @@
 {
   Function                                  msgFunction (192),
   PortPair                                  portPair,  
-  NAME                                      nameOfCF
+  J1939_NAME                                nameOfCF
 } with {
   variant "" }
 
@@ -335,7 +321,7 @@
 {
   Function                                  msgFunction (193),
   PortPair                                  portPair,  
-  NAME                                      nameOfCF
+  J1939_NAME                                nameOfCF
 } with {
   variant "" }  
   
diff --git a/demo/IsobusVTMessageTypes.ttcn b/demo/IsobusVTMessageTypes.ttcn
index ab0edba..b127d80 100644
--- a/demo/IsobusVTMessageTypes.ttcn
+++ b/demo/IsobusVTMessageTypes.ttcn
@@ -3,16 +3,6 @@
 import from General_Types all
 import from IsobusMessageTypes all
 
-external function encode_VT2ECU(in VT2ECU pdu) return octetstring 
-with { extension "prototype(convert) encode(RAW)" }
-external function decode_VT2ECU(in octetstring data) return VT2ECU
-with { extension "prototype(convert) decode(RAW)" }
-
-external function encode_ECU2VT(in ECU2VT pdu) return octetstring 
-with { extension "prototype(convert) encode(RAW)" }
-external function decode_ECU2VT(in octetstring data) return ECU2VT
-with { extension "prototype(convert) decode(RAW)" }
-
 type INT1 VTfunction
 
 type integer AnyObjectID (0..65535) with { variant "FIELDLENGTH(16)" }; // includes also 65535 as no object
@@ -62,9 +52,8 @@
   e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
   ValidObjectID                             objectID,
   ValidObjectID                             parentObjectID,
-  KeyNumberType                             keyNumber,
-  OCT1                                      reserved8  ('FF'O)
-} with {variant "" };
+  KeyNumberType                             keyNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SoftKeyActivationRes 
 {
@@ -72,9 +61,8 @@
   e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,  
   ValidObjectID                             objectID,
   ValidObjectID                             parentObjectID,
-  KeyNumberType                             keyNumber,
-  OCT1                                      reserved8  ('FF'O)
-} with {variant "" };
+  KeyNumberType                             keyNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_ButtonActivationReq_KeyAactivationCode { 
   buttonHasBeenUnlatchedorReleased     (0),
@@ -89,9 +77,8 @@
   e_ButtonActivationReq_KeyAactivationCode keyAactivationCode,
   ValidObjectID                            objectID,
   ValidObjectID                            parentObjectID,
-  KeyNumberType                            buttonKeyCode,
-  OCT1                                     reserved8  ('FF'O)
-} with {variant "" };
+  KeyNumberType                            buttonKeyCode
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_ButtonActivationRes_KeyAactivationCode { 
   buttonHasBeenUnlatchedorReleased     (0),
@@ -106,9 +93,8 @@
   e_ButtonActivationRes_KeyAactivationCode keyAactivationCode,
   ValidObjectID                            objectID,
   ValidObjectID                            parentObjectID,
-  KeyNumberType                            buttonKeyCode,
-  OCT1                                     reserved8  ('FF'O)
-} with {variant "" };
+  KeyNumberType                            buttonKeyCode
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_PointingEvent_touchState {
   released    (0), // version 4 and later
@@ -121,19 +107,15 @@
   VTfunction                      vtfunction (2),
   PositionType                    x_position,
   PositionType                    y_position,
-  e_PointingEvent_touchState   touchState,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with {variant "" };
+  e_PointingEvent_touchState   touchState
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  e_PointingEvent_touchState   touchState
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_VTOnUserLayoutHideShow_state { 
   hidden     (0),
@@ -175,61 +157,41 @@
   VTfunction                             vtfunction (3),
   ValidObjectID                          objectID,
   e_VTSelectInputObject_selection        selection,
-  VTSelectInputObject_Bitmask            bitmask,
-  OCT1                                   reserved6  ('FF'O),
-  OCT1                                   reserved7  ('FF'O),
-  OCT1                                   reserved8  ('FF'O)
-} with {variant "" };
+  VTSelectInputObject_Bitmask            bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  e_VTSelectInputObject_selection selection
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  VTSelectInputObject_v4AndLater_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTSelectInputObjectRes {
   VTfunction                             vtfunction (3),
   ValidObjectID                          objectID,
   e_VTSelectInputObject_selection        selection,
-  VTSelectInputObject_Bitmask            bitmask,
-  OCT1                                   reserved6  ('FF'O),
-  OCT1                                   reserved7  ('FF'O),
-  OCT1                                   reserved8  ('FF'O)
-} with {variant "" };
+  VTSelectInputObject_Bitmask            bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  e_VTSelectInputObject_selection selection
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  VTSelectInputObject_v4AndLater_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTESC_ErrorCodes{ 
   boolean noInputFieldIsSelected,
@@ -247,22 +209,13 @@
 type record VTESCReq {
   VTfunction                             vtfunction (4),
   AnyObjectID                            objectID, // Object ID where input was aborted if no error code
-  VTESC_ErrorCodes                       errorCodes,
-  OCT1                                   reserved5  ('FF'O),
-  OCT1                                   reserved6  ('FF'O),
-  OCT1                                   reserved7  ('FF'O),
-  OCT1                                   reserved8  ('FF'O)
-} with {variant "" };
+  VTESC_ErrorCodes                       errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTESCRes {
   VTfunction                             vtfunction (4),
-  AnyObjectID                            objectID, // Object ID where input was aborted if no error code
-  OCT1                                   reserved4  ('FF'O),
-  OCT1                                   reserved5  ('FF'O),
-  OCT1                                   reserved6  ('FF'O),
-  OCT1                                   reserved7  ('FF'O),
-  OCT1                                   reserved8  ('FF'O)
-} with {variant "" };
+  AnyObjectID                            objectID // Object ID where input was aborted if no error code
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTChangeNumericValueReq
 {
@@ -304,13 +257,8 @@
 type record VTChangeActiveMaskRes
 {
   VTfunction                      vtfunction (6),
-  ValidObjectID                   activeMaskObjectID,
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ValidObjectID                   activeMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 type record VTChangeSoftKeyMaskErrorCodes{ 
@@ -330,20 +278,15 @@
   VTfunction                      vtfunction (7),
   ValidObjectID                   dataOrAlarmMaskObjectID,
   ValidObjectID                   softKeyMaskObjectID,
-  VTChangeSoftKeyMaskErrorCodes   errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  VTChangeSoftKeyMaskErrorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTChangeSoftKeyMaskRes
 {
   VTfunction                      vtfunction (7),
   ValidObjectID                   dataOrAlarmMaskObjectID,
-  ValidObjectID                   softKeyMaskObjectID,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ValidObjectID                   softKeyMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTChangeStringValueReq
 {
@@ -361,11 +304,8 @@
   VTfunction                      vtfunction (8),
   OCT1                            reserved2  ('FF'O),
   OCT1                            reserved3  ('FF'O),
-  ValidObjectID                   inputStringOrStringVariableObjectID,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ValidObjectID                   inputStringOrStringVariableObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTOnUserLayoutHideShowReq
 {
@@ -373,9 +313,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 "" };
+  e_VTOnUserLayoutHideShow_state  state2 // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTOnUserLayoutHideShowRes
 {
@@ -383,9 +323,8 @@
   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 "" };
+  e_VTOnUserLayoutHideShow_state  state2 // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTControlAudioSignalTerminationParameterTerminationCause
 { 
@@ -404,14 +343,8 @@
 type record VTControlAudioSignalTerminationInd // version V4 or higher
 {
   VTfunction                                                vtfunction (10),
-  VTControlAudioSignalTerminationParameterTerminationCause  terminationCause,
-  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 "" };
+  VTControlAudioSignalTerminationParameterTerminationCause  terminationCause
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type octetstring ObjectPoolRecords  with { variant "" };
 
@@ -423,15 +356,8 @@
 
 type record EndOfObjectPoolReq
 {
-  VTfunction                      vtfunction (18),
-  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 "" };
+  VTfunction                      vtfunction (18)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record EndOfObjectPoolResErrorCodes
 { 
@@ -465,9 +391,8 @@
   EndOfObjectPoolResErrorCodes           errorCodes,
   AnyObjectID                            parentObjectIDoFaultyObject, // set to NULL Object ID if there are no
   AnyObjectID                            objectIDofFaultyObject,      // set to NULL Object ID if there are no
-  EndOfObjectPoolResObjectPoolErrorCodes objectPoolErrorCodes,
-  OCT1                                   reserved8  ('FF'O)
-} with { variant "" };
+  EndOfObjectPoolResObjectPoolErrorCodes objectPoolErrorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTfunction32VT2ECU
 {
@@ -552,15 +477,8 @@
 
 type record ESCreq
 {
-  VTfunction                      vtfunction (146),
-  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 "" };
+  VTfunction                      vtfunction (146)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ESCerrorCodes
 { 
@@ -595,12 +513,8 @@
 {
   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 "" };
+  e_HideShowObject_state          hideShow
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record HideShowObjectRes_errorCodes{ 
   boolean referencesToMissingObjects,
@@ -619,11 +533,8 @@
   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 "" };
+  HideShowObjectRes_errorCodes    errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record VTfunction161VT2ECU
 {
@@ -646,12 +557,8 @@
 {
   VTfunction                          vtfunction (161),
   ValidObjectID                       objectID,
-  e_EnableDisableObject_DisableEnable DisableEnable,
-  OCT1                                reserved5  ('FF'O),
-  OCT1                                reserved6  ('FF'O),
-  OCT1                                reserved7  ('FF'O),
-  OCT1                                reserved8  ('FF'O)
-} with {variant "" };
+  e_EnableDisableObject_DisableEnable DisableEnable
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record EnableDisableObjectRes_errorCodes { 
   boolean reserved0     (false),
@@ -670,11 +577,8 @@
   VTfunction                          vtfunction (161),
   ValidObjectID                       objectID,
   e_EnableDisableObject_DisableEnable DisableEnable,
-  EnableDisableObjectRes_errorCodes   errorCodes,
-  OCT1                                reserved6  ('FF'O),
-  OCT1                                reserved7  ('FF'O),
-  OCT1                                reserved8  ('FF'O)
-} with {variant "" };
+  EnableDisableObjectRes_errorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 
@@ -688,12 +592,8 @@
 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 "" };
+  e_SelectInputObjectReq_Option   option 
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_SelectInputObjectRes_Response { 
   objectReferencedByObjectIDisNotSelectedOrObjectIDisTheNULLobject     (0),
@@ -716,12 +616,8 @@
 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 "" };
+  e_SelectInputObjectRes_Response response 
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ControlAudioSignalReq{
   VTfunction                      vtfunction (163),
@@ -751,25 +647,14 @@
 
 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 "" };
+  ControlAudioSignalRes_ErrorCodes  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SetAudioVolumeReq
 {
   VTfunction                      vtfunction (164),
-  PercentType                     volumeInPercent,
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  PercentType                     volumeInPercent
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SetAudioVolumeErrorCodes
 { 
@@ -787,14 +672,8 @@
 type record SetAudioVolumeRes
 {
   VTfunction                      vtfunction (164),
-  SetAudioVolumeErrorCodes        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 "" }; 
+  SetAudioVolumeErrorCodes        errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record  ChangeChildLocationReq 
 {
@@ -802,9 +681,8 @@
   ValidObjectID                   parentObjectID,
   ValidObjectID                   objectIDofObjectToMove,
   DeltaPositionType               relativeChangeInXposition,
-  DeltaPositionType               relativeChangeInYposition,
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  DeltaPositionType               relativeChangeInYposition
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeChildLocationRes_errorCodes
 { 
@@ -824,19 +702,16 @@
   VTfunction                        vtfunction (165),
   ValidObjectID                     parentObjectID,
   ValidObjectID                     objectIDofObjectToMove,
-  ChangeChildLocationRes_errorCodes errorCodes,
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeChildLocationRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeSizeReq
 {
   VTfunction                        vtfunction (166),
   ValidObjectID                     objectIDofObjectToSize,
   WidthType                         newWidth,
-  HeightType                        newHeight,
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  HeightType                        newHeight
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 type record ChangeSizeRes_errorCodes
@@ -856,23 +731,15 @@
 {
   VTfunction                        vtfunction (166),
   ValidObjectID                     objectIDofObjectToSize,
-  ChangeSizeRes_errorCodes          errorCodes,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeSizeRes_errorCodes          errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeBackgroundColourReq
 {
   VTfunction                        vtfunction (167),
   ValidObjectID                     objectIDofObjectToChange,
-  ColorType                         newBackgroundColour,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ColorType                         newBackgroundColour
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeBackgroundColourRes_errorCodes { 
   boolean invalidObjectID,
@@ -891,11 +758,8 @@
   VTfunction                           vtfunction (167),
   ValidObjectID                        objectIDofObjectToChange,
   ColorType                            newBackgroundColour,
-  ChangeBackgroundColourRes_errorCodes errorCodes,
-  OCT1                                 reserved6  ('FF'O),
-  OCT1                                 reserved7  ('FF'O),
-  OCT1                                 reserved8  ('FF'O)
-} with { variant "" };
+  ChangeBackgroundColourRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeNumericValueReq{
   VTfunction                      vtfunction (168),
@@ -940,12 +804,8 @@
 {
   VTfunction                        vtfunction (169),
   ValidObjectID                     objectID,
-  ChangeEndPointRes_errorCodes      errorCodes,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeEndPointRes_errorCodes      errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 
@@ -980,12 +840,8 @@
 {
   VTfunction                        vtfunction (170),
   ValidObjectID                     objectID,
-  ChangeFontAttributesRes_errorCodes errorCodes,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeFontAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeFontAttributesReq 
 {
@@ -994,9 +850,8 @@
   ColorType                         fontColour, 
   FontSize                          fontSize,
   FontType                          fontType,
-  FontStyle                         fontStyle,
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  FontStyle                         fontStyle
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeLineAttributesRes_errorCodes
 { 
@@ -1015,12 +870,8 @@
 {
   VTfunction                        vtfunction (171),
   ValidObjectID                     objectID,
-  ChangeLineAttributesRes_errorCodes errorCodes,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeLineAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record  ChangeLineAttributesReq
 {
@@ -1028,9 +879,8 @@
   ValidObjectID                     ObjectIDofObjectToChange, 
   ColorType                         lineColour, 
   LineWidth                         lineWidth,
-  LineArt                           LineArt,
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  LineArt                           LineArt
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeFillAttributesRes_errorCodes
 { 
@@ -1049,12 +899,8 @@
 {
   VTfunction                      vtfunction (172),
   ValidObjectID                     objectID,
-  ChangeFillAttributesRes_errorCodes errorCodes,
-  OCT1                              reserved5  ('FF'O),
-  OCT1                              reserved6  ('FF'O),
-  OCT1                              reserved7  ('FF'O),
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ChangeFillAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeFillAttributesReq 
 {
@@ -1063,19 +909,15 @@
   ColorType                         lineColour, 
   LineWidth                         lineWidth,
   LineArt                           lineArt,
-  ValidObjectID                     fillPatternObjectID,
-  OCT1                              reserved8  ('FF'O)
-} with { variant "" };
+  ValidObjectID                     fillPatternObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeActiveMaskReq
 {
   VTfunction                      vtfunction (173),
   ValidObjectID                   workingSetObjectID,
-  ValidObjectID                   newActiveMaskObjectID,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with {variant "" };
+  ValidObjectID                   newActiveMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeActiveMaskRes_errorCodes { 
   boolean invalidWorkingSetObjectID,
@@ -1092,13 +934,8 @@
 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 "" };
+  ValidObjectID                   newActiveMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_ChangeSoftKeyMaskReq_MaskType { 
   Data                     (1),
@@ -1110,10 +947,8 @@
   VTfunction                      vtfunction (174),
   e_ChangeSoftKeyMaskReq_MaskType maskType,
   ValidObjectID                   DataOrAlarmMaskObjectID,
-  ValidObjectID                   NewSoftKeyMaskObjectID,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)}
-with {variant "" };
+  ValidObjectID                   NewSoftKeyMaskObjectID
+  } with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeSoftKeyMaskRes_errorCodes { 
   boolean invalidDataOrAlarmMaskObjectID,
@@ -1132,9 +967,8 @@
   VTfunction                      vtfunction (174),
   ValidObjectID                   DataOrAlarmMaskObjectID,
   ValidObjectID                   NewSoftKeyMaskObjectID,
-  ChangeSoftKeyMaskRes_errorCodes errorCodes,
-  OCT1                            reserved8  ('FF'O)}
-with {variant "" };
+  ChangeSoftKeyMaskRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeAttributeReq
 {
@@ -1162,12 +996,8 @@
   VTfunction                      vtfunction (175),
   ValidObjectID                   objectID,
   AttributeID                     attributeID,
-  ChangeAttributeRes_errorCodes   errorCodes,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-}
-with {variant "" };
+  ChangeAttributeRes_errorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangePriorityRes_errorCodes { 
   boolean invalidObjectID,
@@ -1186,20 +1016,15 @@
   VTfunction                      vtfunction (176),
   ValidObjectID                   objectIDofArlarmMask,
   Priority                        newPriority,
-  ChangePriorityRes_errorCodes    errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ChangePriorityRes_errorCodes    errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangePriorityReq
 {
   VTfunction                      vtfunction (176),
   ValidObjectID                   objectIDofArlarmMask,
-  Priority                        newPriority,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  Priority                        newPriority
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeListItemRes_errorCodes { 
   boolean invalidObjectID, // Invalid Input List object ID or Output List object ID , 
@@ -1220,9 +1045,8 @@
   ValidObjectID                   objectID,  // of an Input List object, Output List object, Animation object, 
   // or External Object Definition object
   Index                           listIndex, // (items are numbered 0-n)
-  AnyObjectID                     newObjectID, //  or 0xFFFF to set empty item
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  AnyObjectID                     newObjectID //  or 0xFFFF to set empty item
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeListItemReq
 {
@@ -1230,22 +1054,13 @@
   ValidObjectID                   objectID, // of an Input List object, Output List object, Animation object, 
   // or External Object Definition object
   Index                           listIndex, // (items are numbered 0-n)
-  AnyObjectID                     newObjectID, //  or 0xFFFF to set empty item
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  AnyObjectID                     newObjectID //  or 0xFFFF to set empty item
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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 "" };
+  VTfunction                      vtfunction (178)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record DeleteObjectPoolRes_ErrorCodes { 
   boolean deletionError,
@@ -1261,14 +1076,8 @@
 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 "" };
+  DeleteObjectPoolRes_ErrorCodes  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeStringValueReq
 {
@@ -1300,10 +1109,8 @@
   OCT1                            reserved2  ('FF'O),
   OCT1                            reserved3  ('FF'O),
   ValidObjectID                   objectID,
-  ChangeStringValueRes_ErrorCodes errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with {variant "" };
+  ChangeStringValueRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeChildPositionReq
 {
@@ -1351,14 +1158,8 @@
 type record ChangeObjectLabelRes
 {
   VTfunction                      vtfunction (181),
-  ChangeObjectLabelRes_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 "" };
+  ChangeObjectLabelRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangeObjectLabelReq
 {
@@ -1393,13 +1194,8 @@
 {
   VTfunction                      vtfunction (182),
   ValidObjectID                   objectIDofTheOutputPolygonObjectToChange,
-  ChangePolygonPointRes_ErrorCodes errorCodes,
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ChangePolygonPointRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ChangePolygonPointReq
 {
@@ -1439,9 +1235,8 @@
   VTfunction                      vtfunction (183),
   ValidObjectID                   objectIDofaOutputPolygonObjectToScale,
   WidthType                       newWidthAttribute,
-  HeightType                      newHeightAttribute,
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  HeightType                      newHeightAttribute
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record GraphicsContextRes_ErrorCodes { 
   boolean invalidObjectIDorObjectIsNotAGraphics,
@@ -1460,11 +1255,8 @@
   VTfunction                      vtfunction (184),
   ValidObjectID                   objectIDofAGraphicsContextObject,
   INT1                            subcommandID,   
-  GraphicsContextRes_ErrorCodes   errorCodes,
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  GraphicsContextRes_ErrorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SetGraphicsCursor
 {
@@ -1694,12 +1486,8 @@
 {
   VTfunction                      vtfunction (185),
   ValidObjectID                   objectID,
-  AttributeID                     AttributeIDofTheObject,
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  AttributeID                     AttributeIDofTheObject
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SelectColourMapRes_ErrorCodes { 
   boolean invalidObjectID,
@@ -1717,48 +1505,25 @@
 {
   VTfunction                      vtfunction (186),
   ValidObjectID                   objectIDofTheColourMapObject,  
-  SelectColourMapRes_ErrorCodes   errorCodes,
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  SelectColourMapRes_ErrorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record SelectColourMapReq
 {
   VTfunction                      vtfunction (186),
-  ValidObjectID                   ObjectIDofTheColourMapObjectOrFFFFtoRestoreTheDefaultColourTable,
+  ValidObjectID                   ObjectIDofTheColourMapObjectOrFFFFtoRestoreTheDefaultColourTable
   // (See A.3 VT standard colour palette)
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record IdentifyVTRes
 {
-  VTfunction                      vtfunction (187),
-  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 "" };
+  VTfunction                      vtfunction (187)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record IdentifyVTReq 
 {
-  VTfunction                      vtfunction (187),
-  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 "" };
+  VTfunction                      vtfunction (187)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExecuteExtendedMacroRes_ErrorCodes { 
   boolean objectIDdoesNotExist,
@@ -1776,23 +1541,14 @@
 {
   VTfunction                      vtfunction (188),
   ValidObjectID                   ObjectIDofMacroObject,
-  ExecuteExtendedMacroRes_ErrorCodes   errorCodes,
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ExecuteExtendedMacroRes_ErrorCodes   errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExecuteExtendedMacroReq
 {
   VTfunction                      vtfunction (188),
-  ValidObjectID                   ObjectIDofMacroObject,
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ValidObjectID                   ObjectIDofMacroObject
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 type record LockUnlockMaskRes_ErrorCodes { 
@@ -1811,13 +1567,8 @@
 {
   VTfunction                      vtfunction (189),
   e_LockUnlockMaskReqCommand      command,
-  LockUnlockMaskRes_ErrorCodes    errorCodes,
-  OCT1                            reserved4  ('FF'O), 
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  LockUnlockMaskRes_ErrorCodes    errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_LockUnlockMaskReqCommand { 
   unlockDataMaskOrUserLayoutDataMask           (0),
@@ -1830,10 +1581,8 @@
   VTfunction                      vtfunction (189),
   e_LockUnlockMaskReqCommand      command,
   ValidObjectID                   ObjectIDofTheDataMaskOrUserLayoutDataMaskToLockOrUnlock,
-  INT2                            lockTimeout,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  INT2                            lockTimeout
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExecuteMacroReq_ErrorCodes { 
   boolean objectIDdoesNotExist,
@@ -1851,34 +1600,21 @@
 {
   VTfunction                      vtfunction (190),
   ValidObjectID                   objectIDofMacroObject,
-  ExecuteMacroReq_ErrorCodes      errorCodes,
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ExecuteMacroReq_ErrorCodes      errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExecuteMacroReq
 {
   VTfunction                      vtfunction (190),
-  ValidObjectID                   objectIDofMacroObject,
-  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 "" };
+  ValidObjectID                   objectIDofMacroObject
+  } with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record GetMemoryReq
 {
-  VTfunction vtfunction (194),
+  VTfunction vtfunction (192),
   OCT1           reserved2  ('FF'O),
-  INT3           memoryRequired,
-  OCT1           reserved7  ('FF'O),
-  OCT1           reserved8  ('FF'O)
-} with { variant "" };
+  INT3           memoryRequired
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_GetMemoryResVersionNumber { 
   compliantWithHannoverAgritechnica_2001_limitedfeatureSet          (0),
@@ -1896,51 +1632,32 @@
 
 type record GetMemoryRes
 {
-  VTfunction vtfunction (194),
+  VTfunction vtfunction (192),
   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 "" };
+  e_GetMemoryResStatus        status
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 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)
-} with { variant "" };
+  VTfunction vtfunction (194)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record GetNumberOfSoftKeysRes
 {
-  VTfunction vtfunction (192),
-  OCT1           navigationSoftKeys_,
+  VTfunction vtfunction (194),
+  OCT1           navigationSoftKeys,
   OCT1           reserved3  ('FF'O),
   OCT1           reserved4  ('FF'O),
   OCT1           x_dots,
   OCT1           y_dots,
-  OCT1           numberOfVirtualSoftKeys_,
-  OCT1           numberOfPhysicalSoftKeys_
+  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)
-} with { variant "" };
+  VTfunction vtfunction (195)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 type record TextFontDataRes_small_font_sizes { 
@@ -1991,17 +1708,87 @@
   TextFontDataRes_type_attribute    type_attribute
 } 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)}
+with {variant "PADDING(octet)"}
+
+
+type record GetSupportedWidecharsReq
+{
+  VTfunction vtfunction (193),
+  e_Codeplane    codeplane,
+  OCT2           firstWideCharInInquiryRange,
+  OCT2           lastWideCharInInquiryRange
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record WideCharRange
+{
+  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
+} with {
+  variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
+  variant (numberOfRanges) "UNIT(elements)"}
+
+type record GetWindowMaskDataReq
+{
+  VTfunction vtfunction (196)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetWindowMaskDataRes
+{
+  VTfunction vtfunction (196),
+  OCT1    BackgroundColourVTUserLayoutDataMasks,
+  OCT1    BackgroundColourVTKeyCells
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetSupportedObjectsReq
+{
+  VTfunction vtfunction (197)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetSupportedObjectsRes
+{
+  VTfunction vtfunction (197),
+  INT2         numberOfBytesToFollow,
+  OCT1         supportedObjectTypes
+} with {
+  variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
+  variant (numberOfBytesToFollow) "UNIT(elements)"}
+
 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)
-} with { variant "" };
+  VTfunction vtfunction (199)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 
 type enumerated e_GetHardwareResGraphicType { 
@@ -2034,102 +1821,6 @@
   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)}
-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)
-} with { variant "" };
-
-type record WideCharRange
-{
-  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
-} with {
-  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)
-} 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)
-} 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)
-} with { variant "" };
-
-type record GetSupportedObjectsRes
-{
-  VTfunction vtfunction (197),
-  INT2         numberOfBytesToFollow,
-  OCT1         supportedObjectTypes
-} with {
-  variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
-  variant (numberOfBytesToFollow) "UNIT(elements)"}
-
 type record StoreVersionRes_errorCodesType {
   boolean reserved0,
   boolean versionLabelIsNotCorrect,
@@ -2141,6 +1832,12 @@
   boolean reserved7
 } with {variant ""}
 
+type record  StoreVersionReq
+{
+  VTfunction                      vtfunction (208),
+  VersionLabel7Char               versionLabel
+} with { variant "" };
+
 type record StoreVersionRes
 {
   VTfunction                      vtfunction (208),
@@ -2148,16 +1845,8 @@
   OCT1                            reserved3  ('FF'O),
   OCT1                            reserved4  ('FF'O),
   OCT1                            reserved5  ('FF'O),
-  StoreVersionRes_errorCodesType  errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
-
-type record  StoreVersionReq
-{
-  VTfunction                      vtfunction (208),
-  VersionLabel7Char               versionLabel
-} with { variant "" };
+  StoreVersionRes_errorCodesType  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record WorkingSetMaintenanceBitMask {
   boolean initiatingWorkingSetMaintenance,
@@ -2204,10 +1893,8 @@
   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 "" };
+  LoadVersionRes_errorCodesType    errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record DeleteVersionRes_errorCodesType {
   boolean reserved0,
@@ -2227,10 +1914,8 @@
   OCT1                            reserved3  ('FF'O),
   OCT1                            reserved4  ('FF'O),
   OCT1                            reserved5  ('FF'O),
-  DeleteVersionRes_errorCodesType  errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  DeleteVersionRes_errorCodesType  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record  DeleteVersionReq
 {
@@ -2254,15 +1939,8 @@
 
 type record ExtendedGetVersionsReq 
 {
-  VTfunction                      vtfunction (211),
-  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 "" };
+  VTfunction                      vtfunction (211)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExtendedStoreVersionRes_errorCodesType {
   boolean reserved0,
@@ -2282,10 +1960,8 @@
   OCT1                            reserved3  ('FF'O),
   OCT1                            reserved4  ('FF'O),
   OCT1                            reserved5  ('FF'O),
-  ExtendedStoreVersionRes_errorCodesType  errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ExtendedStoreVersionRes_errorCodesType  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExtendedStoreVersionReq 
 {
@@ -2311,10 +1987,8 @@
   OCT1                            reserved3  ('FF'O),
   OCT1                            reserved4  ('FF'O),
   OCT1                            reserved5  ('FF'O),
-  ExtendedLoadVersionRes_errorCodesType  errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ExtendedLoadVersionRes_errorCodesType  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExtendedLoadVersionReq
 {
@@ -2340,10 +2014,8 @@
   OCT1                            reserved3  ('FF'O),
   OCT1                            reserved4  ('FF'O),
   OCT1                            reserved5  ('FF'O),
-  ExtendedDeleteVersionRes_errorCodesType  errorCodes,
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
-} with { variant "" };
+  ExtendedDeleteVersionRes_errorCodesType  errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record ExtendedDeleteVersionReq
 {
@@ -2353,21 +2025,16 @@
 
 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 "" };
+  VTfunction                      vtfunction (223)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record of VersionLabel7Char VersionLabel7Chars
 
 type record GetVersionsRes
 {
   VTfunction                      vtfunction (224),
   INT1                            numberOfVersionStrings,
-  VersionLabel7Char               versionStrings
+  VersionLabel7Chars               versionStrings
 }
 with{
   variant (numberOfVersionStrings) "LENGTHTO(versionStrings)";
@@ -2377,39 +2044,21 @@
 type record  VTUnsupportedVTFunctionInd 
 {
   VTfunction                      vtfunction (253),
-  OCT1                            unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
-  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 "" };
+  OCT1                            unsupportedVTfunction // should be VTfunction, but since unsupported is OCT1
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type record  UnsupportedVTFunctionInd 
 {
   VTfunction                      vtfunction (253),
-  OCT1                            unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
-  OCT1                            reserved3  ('FF'O),
-  OCT1                            reserved4  ('FF'O),
-  OCT1                            reserved5  ('FF'O),
-  OCT1                            reserved6  ('FF'O),
-  OCT1                            reserved7  ('FF'O),
-  OCT1                            reserved8  ('FF'O)
+  OCT1                            unsupportedVTfunction // should be VTfunction, but since unsupported is OCT1
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
-} with { variant "" };
-
-type record WorkingSetMaintenanceReq
+type record WorkingSetMaintenanceInd
 {
   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 "" };
+  e_WorkingSetMaintenanceVersionNumber versionNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
 
 type enumerated e_BusyCodes { 
   vtIsBusyUpdatingVisibleMask            (0),
@@ -2422,7 +2071,7 @@
   vtIsOutOfMemory                        (7)}
 with {variant "PADDING(octet)"}
 
-type record VTStatusReq
+type record VTStatusInd
 {
   VTfunction                      vtfunction (254),
   OCT1 	                          sourceAddressOfActiveWorkingSetMaster,
@@ -2487,10 +2136,10 @@
   LockUnlockMaskRes                  lockUnlockMaskRes,
   ExecuteMacroRes                    executeMacroRes,
   GetMemoryRes                       getMemoryRes,
+  GetSupportedWidecharsRes           getSupportedWidecharsRes,
   GetNumberOfSoftKeysRes             getNumberOfSoftKeysRes,
   GetTextFontDataRes                 getTextFontDataRes,
   GetHardwareRes                     getHardwareRes,
-  GetSupportedWidecharsRes           getSupportedWidecharsRes,
   GetWindowMaskDataRes               getWindowMaskDataRes,
   GetSupportedObjectsRes             getSupportedObjectsRes,
   StoreVersionRes                    storeVersionRes,
@@ -2502,7 +2151,7 @@
   ExtendedDeleteVersionRes           extendedDeleteVersionRes,
   GetVersionsRes                     getVersionsRes,
   VTUnsupportedVTFunctionInd         vtUnsupportedVTFunctionInd,
-  VTStatusReq                        vtStatusReq
+  VTStatusInd                        vtStatusInd
 }
 with {variant "TAG	(
   // put all VT2ECU messages here
@@ -2556,10 +2205,10 @@
   lockUnlockMaskRes,                 vtfunction = 189;
   executeMacroRes,                   vtfunction = 190;
   getMemoryRes,                      vtfunction = 192;
+  getSupportedWidecharsRes,          vtfunction = 193;
   getNumberOfSoftKeysRes,            vtfunction = 194;
   getTextFontDataRes,                vtfunction = 195;
   getHardwareRes,                    vtfunction = 199;
-  getSupportedWidecharsRes,          vtfunction = 193;
   getWindowMaskDataRes,              vtfunction = 196;
   getSupportedObjectsRes,            vtfunction = 197;
   storeVersionRes,                   vtfunction = 208;
@@ -2571,7 +2220,7 @@
   extendedDeleteVersionRes,          vtfunction = 214;
   getVersionsRes,                    vtfunction = 224;
   vtUnsupportedVTFunctionInd,        vtfunction = 253;
-  vtStatusReq, 	                     vtfunction = 254;)"
+  vtStatusInd, 	                     vtfunction = 254;)"
 } 
 
 type union ECU2VT
@@ -2586,7 +2235,7 @@
   VTESCRes                           vtESCRes, 
   VTChangeNumericValueRes            vtChangeNumericValueRes,
   VTChangeActiveMaskRes              vtChangeActiveMaskRes,
-  VTChangeSoftKeyMaskReq             vtChangeSoftKeyMaskReq,
+  VTChangeSoftKeyMaskRes             vtChangeSoftKeyMaskRes,
   VTChangeStringValueRes             vtChangeStringValueRes,
   VTOnUserLayoutHideShowRes          vtOnUserLayoutHideShowRes, 
   ObjectPoolTransferInd              objectPoolTransferInd,
@@ -2631,10 +2280,10 @@
   LockUnlockMaskReq                  lockUnlockMaskReq,
   ExecuteMacroReq                    executeMacroReq,
   GetMemoryReq                       getMemoryReq,
+  GetSupportedWidecharsReq           getSupportedWidecharsReq,
   GetNumberOfSoftKeysReq             getNumberOfSoftKeysReq,
   GetTextFontDataReq                 getTextFontDataReq,
   GetHardwareReq                     getHardwareReq,
-  GetSupportedWidecharsReq           getSupportedWidecharsReq,
   GetWindowMaskDataReq               getWindowMaskDataReq,
   GetSupportedObjectsReq             getSupportedObjectsReq,
   StoreVersionReq                    storeVersionReq,
@@ -2646,7 +2295,7 @@
   ExtendedDeleteVersionReq           extendedDeleteVersionReq,
   GetVersionsReq                     getVersionsReq,
   UnsupportedVTFunctionInd           unsupportedVTFunctionInd,
-  WorkingSetMaintenanceReq           workingSetMaintenanceReq
+  WorkingSetMaintenanceInd           workingSetMaintenanceInd
   // put all ECU2VT response messages here
   //Dummy_ECU2VT_Res                dummy_ECU2VT_Res
 }
@@ -2659,7 +2308,7 @@
   vtESCRes,                          vtfunction =   4;
   vtChangeNumericValueRes,           vtfunction =   5;
   vtChangeActiveMaskRes,             vtfunction =   6;
-  vtChangeSoftKeyMaskReq,            vtfunction =   7;
+  vtChangeSoftKeyMaskRes,            vtfunction =   7;
   vtChangeStringValueRes,            vtfunction =   8;
   vtOnUserLayoutHideShowRes,         vtfunction =   9;
   objectPoolTransferInd,             vtfunction =  17;
@@ -2704,10 +2353,10 @@
   lockUnlockMaskReq,                 vtfunction = 189;
   executeMacroReq,                   vtfunction = 190;
   getMemoryReq,                      vtfunction = 192;
+  getSupportedWidecharsReq,          vtfunction = 193;
   getNumberOfSoftKeysReq,            vtfunction = 194;
   getTextFontDataReq,                vtfunction = 195;
   getHardwareReq,                    vtfunction = 199;
-  getSupportedWidecharsReq,          vtfunction = 193;
   getWindowMaskDataReq,              vtfunction = 196;
   getSupportedObjectsReq,            vtfunction = 197;
   storeVersionReq,                   vtfunction = 208;
@@ -2719,7 +2368,7 @@
   extendedDeleteVersionReq,          vtfunction = 214;
   getVersionsReq,                    vtfunction = 223;
   unsupportedVTFunctionInd,          vtfunction = 253;
-  workingSetMaintenanceReq,          vtfunction = 255;
+  workingSetMaintenanceInd,          vtfunction = 255;
   ) " 
 } 
 
diff --git a/demo/IsobusVT_Templates.ttcn b/demo/IsobusVT_Templates.ttcn
new file mode 100644
index 0000000..e9d8cd5
--- /dev/null
+++ b/demo/IsobusVT_Templates.ttcn
@@ -0,0 +1,524 @@
+module IsobusVT_Templates {
+
+import from IsobusMessageTypes all
+import from IsobusVTMessageTypes all
+import from IsobusCMMessageTypes all
+import from IsobusNMMessageTypes all
+import from Isobus all
+import from General_Types all
+import from J1939 all
+
+template J1939PDU_with_NAME t_J1939PDU_with_NAME(template J1939_ADDR p_addr, template J1939_NAME p_name, template J1939_messageWithPGN p_pdu)
+:= {
+  addr     := p_addr,
+  name     := p_name,
+  pdu      := p_pdu
+}
+
+template Isobus.J1939_messageWithPGN t_ButtonActivationReq(
+  template e_ButtonActivationReq_KeyAactivationCode p_keyAactivationCode,
+  template ValidObjectID                            p_objectID,
+  template ValidObjectID                            p_parentObjectID,
+  template KeyNumberType                            p_buttonKeyCode) 
+:= {pgn := '00E600'O, pdu := {vt2ecu := {buttonActivationReq := {
+        vtfunction                    := 1,
+        keyAactivationCode            := p_keyAactivationCode,
+        objectID                      := p_objectID,
+        parentObjectID                := p_parentObjectID,
+        buttonKeyCode                 := p_buttonKeyCode
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_ButtonActivationRes (
+  template e_ButtonActivationRes_KeyAactivationCode p_keyAactivationCode,
+  template ValidObjectID                            p_objectID,
+  template ValidObjectID                            p_parentObjectID,
+  template KeyNumberType                            p_buttonKeyCode
+) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {buttonActivationRes := {
+        vtfunction                    := 1,
+        keyAactivationCode            := p_keyAactivationCode,
+        objectID                      := p_objectID,
+        parentObjectID                := p_parentObjectID,
+        buttonKeyCode                 := p_buttonKeyCode
+      }}}} 
+
+template Isobus.J1939_messageWithPGN t_PointingEventReq (
+  template PositionType                    p_x_position,
+  template PositionType                    p_y_position,
+  template e_PointingEvent_touchState      p_touchState) 
+:= {pgn := '00E600'O, pdu := {vt2ecu := {pointingEventReq := {
+        vtfunction                    := 2,
+        x_position                    := p_x_position,
+        y_position                    := p_y_position,
+        touchState                    := p_touchState
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_PointingEventRes (
+  template PositionType                  p_x_position,
+  template PositionType                  p_y_position,
+  template e_PointingEvent_touchState    p_touchState) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {pointingEventRes := {
+        vtfunction                  := 2,
+        x_position                  := p_x_position,
+        y_position                  := p_y_position,
+        touchState                  := p_touchState
+      }}}}
+
+template Isobus.J1939_messageWithPGN  t_VTSelectInputObjectReq (
+  template ValidObjectID                          p_objectID,
+  template e_VTSelectInputObject_selection        p_selection,
+  template boolean                                p_objectIsOpenForDataInput,
+  template boolean                                p_reserved
+  // p_reserved for v3 or earlier: true , for v4 and later: false
+)  := {pgn := '00E600'O, pdu := {vt2ecu := {vtSelectInputObjectReq := {
+        vtfunction                   := 3,
+        objectID                     := p_objectID,
+        selection                    := p_selection,
+        bitmask                      := {
+          objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
+          reserved1                    := p_reserved,
+          reserved2                    := p_reserved,
+          reserved3                    := p_reserved,
+          reserved4                    := p_reserved,
+          reserved5                    := p_reserved,
+          reserved6                    := p_reserved,
+          reserved7                    := p_reserved}
+      }}}}
+
+//template VTSelectInputObjectReq_v3AndPrior t_VTSelectInputObjectReq_v3AndPrior (
+//  template ValidObjectID                   p_objectID,
+//  template e_VTSelectInputObject_selection p_selection) := {
+//  vtfunction                   := 3,
+//  objectID                     := p_objectID,
+//  selection                    := p_selection,
+//  reserved5                    := 'FF'O,
+//  reserved6                    := 'FF'O,
+//  reserved7                    := 'FF'O,
+//  reserved8                    := 'FF'O
+//} 
+
+//template VTSelectInputObjectReq_v4AndLater t_VTSelectInputObjectReq_v4AndLater (
+//  template ValidObjectID                          p_objectID,
+//  template e_VTSelectInputObject_selection        p_selection,
+//  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
+//  vtfunction                   := 3,
+//  objectID                     := p_objectID,
+//  selection                    := p_selection,
+//  bitmask                      := p_bitmask,
+//  reserved6                    := 'FF'O,
+//  reserved7                    := 'FF'O,
+//  reserved8                    := 'FF'O
+//}
+
+template Isobus.J1939_messageWithPGN t_VTSelectInputObjectRes(
+  template ValidObjectID                          p_objectID,
+  template e_VTSelectInputObject_selection        p_selection,
+  template boolean                                p_objectIsOpenForDataInput,
+  template boolean                                p_reserved
+  // p_reserved for v3 or earlier: true , for v4 and later: false
+)   := {pgn := '00E700'O, pdu := {ecu2vt := {vtSelectInputObjectRes := {
+        vtfunction                    := 3,
+        objectID                      := p_objectID,
+        selection                     := p_selection,
+        bitmask                      := {
+          objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
+          reserved1                    := p_reserved,
+          reserved2                    := p_reserved,
+          reserved3                    := p_reserved,
+          reserved4                    := p_reserved,
+          reserved5                    := p_reserved,
+          reserved6                    := p_reserved,
+          reserved7                    := p_reserved}
+      }}}}
+
+//template VTSelectInputObjectRes_v4AndPrior t_VTSelectInputObjectRes_v4AndPrior(
+//  template   ValidObjectID                   p_objectID,
+//  template   e_VTSelectInputObject_selection p_selection) := {
+//  vtfunction                   := 3,
+//  objectID                     := p_objectID,
+//  selection                    := p_selection
+//}
+
+//template VTSelectInputObjectRes_v5AndLater t_VTSelectInputObjectRes_v5AndLater(
+//  template ValidObjectID                          p_objectID,
+//  template e_VTSelectInputObject_selection        p_selection,
+//  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
+//  vtfunction                    := 3,
+//  objectID                      := p_objectID,
+//  selection                     := p_selection,
+//  bitmask                       := p_bitmask
+//}
+
+template Isobus.J1939_messageWithPGN t_VTESCReq (
+  template AnyObjectID          p_objectID,
+  template VTESC_ErrorCodes     p_errorCodes) 
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtESCReq := {
+        vtfunction                    := 4,
+        objectID                      := p_objectID,
+        errorCodes                    := p_errorCodes
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTESCRes (
+  template AnyObjectID        p_objectID) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtESCRes := {
+        vtfunction                    := 4,
+        objectID                      := p_objectID
+      }}}}
+
+template Isobus.J1939_messageWithPGN  t_VTChangeNumericValueReq (
+  template ValidObjectID       p_objectID,
+  template OCT4                p_value) 
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeNumericValueReq := {
+        vtfunction                     := 5,
+        objectID                       := p_objectID,
+        reserved4                      := 'FF'O,
+        value_                         := p_value
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeNumericValueRes (
+  template ValidObjectID       p_objectID,
+  template OCT4                p_value) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeNumericValueRes := {
+        vtfunction                     := 5,
+        objectID                       := p_objectID,
+        reserved4                      := 'FF'O,
+        value_                         := p_value
+      }}}}
+
+template Isobus.J1939_messageWithPGN  t_VTChangeActiveMaskReq (
+  template ValidObjectID                   p_activeMaskOrWindowMaskOrKeyGroupObjectID,
+  template VTChangeActiveMasErrorcodes     p_errorCodes,
+  template ValidObjectID                   p_objectIDcontainingError,
+  template ValidObjectID                   p_parentObjectIDofErrorObjectID)   
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeActiveMaskReq := {
+        vtfunction                               := 6,
+        activeMaskOrWindowMaskOrKeyGroupObjectID := p_activeMaskOrWindowMaskOrKeyGroupObjectID,
+        errorCodes                               := p_errorCodes,
+        objectIDcontainingError                  := p_objectIDcontainingError,
+        parentObjectIDofErrorObjectID            := p_parentObjectIDofErrorObjectID
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeActiveMaskRes (
+  template   ValidObjectID                   p_activeMaskObjectID) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeActiveMaskRes := {
+        vtfunction                    := 6,
+        activeMaskObjectID            := p_activeMaskObjectID
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeSoftKeyMaskReq(
+  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
+  template ValidObjectID                   p_softKeyMaskObjectID,
+  template VTChangeSoftKeyMaskErrorCodes   p_errorCodes)  
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeSoftKeyMaskReq := {
+        vtfunction                    := 7,
+        dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
+        softKeyMaskObjectID           := p_softKeyMaskObjectID,
+        errorCodes                    := p_errorCodes
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeSoftKeyMaskRes(
+  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
+  template ValidObjectID                   p_softKeyMaskObjectID) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeSoftKeyMaskRes := {
+        vtfunction                    := 7,
+        dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
+        softKeyMaskObjectID           := p_softKeyMaskObjectID
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeStringValueReq (
+  template   ValidObjectID                   p_inputStringOrStringVariableObjectID,
+  template   INT1                            p_numberOfBytes,
+  template   octetstring                     p_enteredStringValue) 
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeStringValueReq := {
+        vtfunction                            := 8,
+        inputStringOrStringVariableObjectID := p_inputStringOrStringVariableObjectID,
+        numberOfBytes := lengthof(p_enteredStringValue),
+        enteredStringValue   := p_enteredStringValue
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeStringValueRes (
+  template ValidObjectID                   p_inputStringOrStringVariableObjectID) 
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeStringValueRes := {
+        vtfunction                            := 8,
+        reserved2                             := 'FF'O,
+        reserved3                             := 'FF'O,
+        inputStringOrStringVariableObjectID   := p_inputStringOrStringVariableObjectID
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_ObjectPoolTransferInd(
+  template ObjectPoolRecords p_objectPoolRecords) 
+:= {pgn := '00E700'O,
+  pdu := {ecu2vt := {objectPoolTransferInd := {
+        vtfunction                                             := 17,
+        objectPoolRecords                                      := p_objectPoolRecords
+      }}}
+}
+
+template Isobus.J1939_messageWithPGN t_EndOfObjectPoolReq 
+:= {pgn := '00E700'O,
+  pdu := {ecu2vt := {endOfObjectPoolReq := {
+        vtfunction := 18
+      }}}
+}
+
+
+template Isobus.J1939_messageWithPGN t_EndOfObjectPoolRes (
+  template EndOfObjectPoolResErrorCodes p_errorCodes,
+  template AnyObjectID p_parentObjectIDoFaultyObject,
+  template AnyObjectID p_objectIDofFaultyObject,
+  template EndOfObjectPoolResObjectPoolErrorCodes p_objectPoolErrorCodes
+):= {pgn := '00E600'O,
+  pdu := {vt2ecu := {endOfObjectPoolRes := {
+        vtfunction                  := 18,
+        errorCodes                  := p_errorCodes,
+        parentObjectIDoFaultyObject := p_parentObjectIDoFaultyObject, // set to NULL Object ID if there are no
+        objectIDofFaultyObject      := p_objectIDofFaultyObject,      // set to NULL Object ID if there are no
+        objectPoolErrorCodes        := p_objectPoolErrorCodes
+      }}}
+}
+
+template Isobus.J1939_messageWithPGN t_GetMemoryReq(
+  template INT3 p_memoryRequired) 
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {getMemoryReq := {
+        vtfunction                    := 192,
+        reserved2                     := 'FF'O,
+        memoryRequired                := p_memoryRequired
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_GetMemoryRes(
+  template e_GetMemoryResVersionNumber p_versionNumber, 
+  template e_GetMemoryResStatus p_status) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getMemoryRes :=  {
+        vtfunction                      := 192,
+        versionNumber                   := p_versionNumber,
+        status                          := p_status
+      }}}}
+
+
+template Isobus.J1939_messageWithPGN t_GetSupportedWidecharsReq(
+  template e_Codeplane p_codeplane, 
+  template OCT2 p_firstWideCharInInquiryRange, 
+  template OCT2 p_lastWideCharInInquiryRange)
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := { getSupportedWidecharsReq := {
+        vtfunction                  := 193,
+        codeplane                   := p_codeplane,
+        firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
+        lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_GetSupportedWidecharsRes(
+  template e_Codeplane p_codeplane, 
+  template OCT2 p_firstWideCharInInquiryRange, 
+  template OCT2 p_lastWideCharInInquiryRange,
+  template  INT1 p_numberOfRanges, 
+  WideCharRangeArray p_wideCharRangeArray) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getSupportedWidecharsRes := {
+        vtfunction                  := 193,
+        codeplane                   := p_codeplane,
+        firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
+        lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange,
+        numberOfRanges              := p_numberOfRanges, 
+        wideCharRangeArray          := p_wideCharRangeArray
+      }}}}
+
+
+template Isobus.J1939_messageWithPGN t_GetNumberOfSoftKeysReq
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {getNumberOfSoftKeysReq := {
+        vtfunction                 := 194
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_GetNumberOfSoftKeysRes(
+  template OCT1           p_navigationSoftKeys,
+  template OCT1           p_x_dots,
+  template OCT1           p_y_dots,
+  template OCT1           p_numberOfVirtualSoftKeys,
+  template OCT1           p_numberOfPhysicalSoftKeys
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getNumberOfSoftKeysRes :=  {
+        vtfunction                 := 194,
+        navigationSoftKeys        := p_navigationSoftKeys,
+        reserved3                 := 'FF'O,
+        reserved4                 := 'FF'O,
+        x_dots                    := p_x_dots,
+        y_dots                    := p_y_dots,
+        numberOfVirtualSoftKeys   := p_numberOfVirtualSoftKeys,
+        numberOfPhysicalSoftKeys  := p_numberOfPhysicalSoftKeys
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_GetTextFontDataReq
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {getTextFontDataReq := {
+        vtfunction                := 195
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_GetTextFontDataRes(
+  template TextFontDataRes_small_font_sizes  p_small_font_sizes,
+  template TextFontDataRes_large_font_sizes  p_large_font_sizes,
+  template TextFontDataRes_type_attribute    p_type_attribute
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getTextFontDataRes :=  {
+        vtfunction         := 195,
+        reserved2         := 'FF'O,
+        reserved3         := 'FF'O,
+        reserved4         := 'FF'O,
+        reserved5         := 'FF'O,
+        small_font_sizes  := p_small_font_sizes,
+        large_font_sizes  := p_large_font_sizes,
+        type_attribute    := p_type_attribute
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_GetHardwareReq
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {getHardwareReq := {
+        vtfunction                    := 199
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_GetHardwareRes(
+  template BootTimeType p_bootTimeInSeconds,  
+  template e_GetHardwareResGraphicType  p_graphicType,
+  template GetHardwareResHardwareType   p_hardware,
+  template INT2                         p_xPixels,
+  template INT2                         p_yPixels
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getHardwareRes :=  {
+        vtfunction                      := 199,
+        bootTimeInSeconds               := p_bootTimeInSeconds,  // 255 for information not available
+        graphicType                     := p_graphicType,
+        hardware                        := p_hardware,
+        xPixels                         := p_xPixels,
+        yPixels                         := p_yPixels
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_StoreVersionReq(VersionLabel7Char p_versionLabel)
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {storeVersionReq := {
+        vtfunction                    := 208,
+        versionLabel                  := p_versionLabel
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_StoreVersionRes(
+  StoreVersionRes_errorCodesType  p_errorCodes
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {storeVersionRes :=  {
+        vtfunction                      := 208,
+        reserved2  := 'FF'O,
+        reserved3  := 'FF'O,
+        reserved4  := 'FF'O,
+        reserved5  := 'FF'O,
+        errorCodes := p_errorCodes
+      }}}}
+
+
+template Isobus.J1939_messageWithPGN t_LoadVersionReq(VersionLabel7Char p_versionLabel)
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {loadVersionReq := {
+        vtfunction                    := 209,
+        versionLabel                  := p_versionLabel
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_LoadVersionRes(
+  template LoadVersionRes_errorCodesType    p_errorCodes
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {loadVersionRes :=  {
+        vtfunction                      := 209,
+        reserved2  := 'FF'O,
+        reserved3  := 'FF'O,
+        reserved4  := 'FF'O,
+        reserved5  := 'FF'O,
+        errorCodes := p_errorCodes
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_GetVersionsReq
+:= {  
+  pgn := '00E700'O,
+  pdu := {ecu2vt := {getVersionsReq := {
+        vtfunction                    := 223
+      }
+    }
+  }
+}
+
+template Isobus.J1939_messageWithPGN t_GetVersionsRes(
+  template INT1                            p_numberOfVersionStrings,
+  template VersionLabel7Chars              p_versionStrings
+) 
+:= {  
+  pgn := '00E600'O,
+  pdu := {vt2ecu := {getVersionsRes :=  {
+        vtfunction                      := 224,
+        numberOfVersionStrings          := p_numberOfVersionStrings,
+        versionStrings                  := p_versionStrings
+      }}}}
+
+template Isobus.J1939_messageWithPGN t_VTStatusInd(
+  template OCT1 p_sourceAddressOfActiveWorkingSetMaster, 
+  template OCT2 p_objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+  template OCT2 p_objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+  template e_BusyCodes p_vtBusyCodes,
+  template OCT1 p_vtFunctionCode) := {pgn := '00E600'O,
+  pdu := {vt2ecu := {vtStatusInd := {
+        vtfunction											   := 254,
+        sourceAddressOfActiveWorkingSetMaster                  := p_sourceAddressOfActiveWorkingSetMaster,
+        objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := p_objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+        objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet   := p_objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+        vtBusyCodes                                            := p_vtBusyCodes,
+        vtFunctionCode                                         := p_vtFunctionCode
+      }}}
+}
+
+template Isobus.J1939_messageWithPGN  t_WorkingSetMaintenanceInd(
+  template boolean p_initiatingWorkingSetMaintenance, 
+  template e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+  pgn := '00E700'O,
+  pdu := {
+    ecu2vt := {workingSetMaintenanceInd := {
+        vtfunction                    := 255,
+        bitMask                       := { initiatingWorkingSetMaintenance := p_initiatingWorkingSetMaintenance, reserved1 := false, reserved2 := false, reserved3 := false, reserved4 := false, reserved5 := false, reserved6 := false, reserved7 := false },
+        versionNumber                 := p_versionNumber
+      }}}
+}
+
+}
+
diff --git a/demo/Isobus_Templates.ttcn b/demo/Isobus_Templates.ttcn
deleted file mode 100644
index 48e6e26..0000000
--- a/demo/Isobus_Templates.ttcn
+++ /dev/null
@@ -1,395 +0,0 @@
-module Isobus_Templates {
-
-import from IsobusMessageTypes all
-import from IsobusVTMessageTypes all
-import from IsobusCMMessageTypes all
-import from IsobusNMMessageTypes all
-import from Isobus all
-import from General_Types all
-
-
-template CAN_frame_j1939 t_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param, 
-  OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template AnyIsoBusPdu t_can_pdu) 
-:= { can_j1939 := {
-    prio := prio_param, 
-    res := res_param, 
-    dp  := dp_param,
-    pf  := pf_param,
-    ps  := ps_param,
-    sa  := sa_param},
-  can_pdu := t_can_pdu
-}
-
-template CAN_frame_j1939 t_network_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param, 
-  OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template IsobusNMMessageTypes.NetworkMessage t_networkMessage) 
-:= { can_j1939 := {
-    prio := prio_param, 
-    res := res_param, 
-    dp  := dp_param,
-    pf  := pf_param,
-    ps  := ps_param,
-    sa  := sa_param},
-  can_pdu := {networkMessage := t_networkMessage}
-}
-
-template ECU2VT t_GetMemoryReqX( INT3 p_memoryRequired) := {
-  getMemoryReq := {
-    vtfunction                      := 194,
-    reserved2                       := 'FF'O,
-    memoryRequired                  := p_memoryRequired,
-    reserved7                       := 'FF'O,
-    reserved8                       := 'FF'O
-  }
-};
-
-template AnyIsoBusPdu t_ecu2vt(template ECU2VT t_Message) := {
-  ecu2vt := 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)}
-}
-
-
-template ButtonActivationReq t_ButtonActivationReq(
-  template e_ButtonActivationReq_KeyAactivationCode p_keyAactivationCode,
-  template ValidObjectID                            p_objectID,
-  template ValidObjectID                            p_parentObjectID,
-  template KeyNumberType                            p_buttonKeyCode) := {
-  vtfunction                    := 1,
-  keyAactivationCode            := p_keyAactivationCode,
-  objectID                      := p_objectID,
-  parentObjectID                := p_parentObjectID,
-  buttonKeyCode                 := p_buttonKeyCode,
-  reserved8                     := 'FF'O
-}
-
-template ButtonActivationRes t_ButtonActivationRes (
-  template e_ButtonActivationRes_KeyAactivationCode p_keyAactivationCode,
-  template ValidObjectID                            p_objectID,
-  template ValidObjectID                            p_parentObjectID,
-  template KeyNumberType                            p_buttonKeyCode
-) := {
-  vtfunction                    := 1,
-  keyAactivationCode            := p_keyAactivationCode,
-  objectID                      := p_objectID,
-  parentObjectID                := p_parentObjectID,
-  buttonKeyCode                 := p_buttonKeyCode,
-  reserved8                     := 'FF'O
-} 
-
-template PointingEventReq t_PointingEventReq (
-  template PositionType                    p_x_position,
-  template PositionType                    p_y_position,
-  template e_PointingEvent_touchState      p_touchState) := {
-  vtfunction                    := 2,
-  x_position                    := p_x_position,
-  y_position                    := p_y_position,
-  touchState                    := p_touchState,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template PointingEventRes t_PointingEventRes (
-  template PositionType                  p_x_position,
-  template PositionType                  p_y_position,
-  template e_PointingEvent_touchState    p_touchState) := {
-  vtfunction                  := 2,
-  x_position                  := p_x_position,
-  y_position                  := p_y_position,
-  touchState                  := p_touchState,
-  reserved7                   := 'FF'O,
-  reserved8                   := 'FF'O
-}
-
-template VTSelectInputObjectReq t_VTSelectInputObjectReq (
-  template ValidObjectID                          p_objectID,
-  template e_VTSelectInputObject_selection        p_selection,
-  template boolean                                p_objectIsOpenForDataInput,
-  template boolean                                p_reserved
-  // p_reserved for v3 or earlier: true , for v4 and later: false
-) := {
-  vtfunction                   := 3,
-  objectID                     := p_objectID,
-  selection                    := p_selection,
-  bitmask                      := {
-    objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
-    reserved1                    := p_reserved,
-    reserved2                    := p_reserved,
-    reserved3                    := p_reserved,
-    reserved4                    := p_reserved,
-    reserved5                    := p_reserved,
-    reserved6                    := p_reserved,
-    reserved7                    := p_reserved},
-  reserved6                    := 'FF'O,
-  reserved7                    := 'FF'O,
-  reserved8                    := 'FF'O
-}
-
-template VTSelectInputObjectReq_v3AndPrior t_VTSelectInputObjectReq_v3AndPrior (
-  template ValidObjectID                   p_objectID,
-  template e_VTSelectInputObject_selection p_selection) := {
-  vtfunction                   := 3,
-  objectID                     := p_objectID,
-  selection                    := p_selection,
-  reserved5                    := 'FF'O,
-  reserved6                    := 'FF'O,
-  reserved7                    := 'FF'O,
-  reserved8                    := 'FF'O
-} 
-
-template VTSelectInputObjectReq_v4AndLater t_VTSelectInputObjectReq_v4AndLater (
-  template ValidObjectID                          p_objectID,
-  template e_VTSelectInputObject_selection        p_selection,
-  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
-  vtfunction                   := 3,
-  objectID                     := p_objectID,
-  selection                    := p_selection,
-  bitmask                      := p_bitmask,
-  reserved6                    := 'FF'O,
-  reserved7                    := 'FF'O,
-  reserved8                    := 'FF'O
-}
-
-template VTSelectInputObjectRes t_VTSelectInputObjectRes(
-  template ValidObjectID                          p_objectID,
-  template e_VTSelectInputObject_selection        p_selection,
-  template boolean                                p_objectIsOpenForDataInput,
-  template boolean                                p_reserved
-  // p_reserved for v3 or earlier: true , for v4 and later: false
-) := {
-  vtfunction                    := 3,
-  objectID                      := p_objectID,
-  selection                     := p_selection,
-  bitmask                      := {
-    objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
-    reserved1                    := p_reserved,
-    reserved2                    := p_reserved,
-    reserved3                    := p_reserved,
-    reserved4                    := p_reserved,
-    reserved5                    := p_reserved,
-    reserved6                    := p_reserved,
-    reserved7                    := p_reserved},
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTSelectInputObjectRes_v4AndPrior t_VTSelectInputObjectRes_v4AndPrior(
-  template   ValidObjectID                   p_objectID,
-  template   e_VTSelectInputObject_selection p_selection) := {
-  vtfunction                   := 3,
-  objectID                     := p_objectID,
-  selection                    := p_selection,
-  reserved5                    := 'FF'O,
-  reserved6                    := 'FF'O,
-  reserved7                    := 'FF'O,
-  reserved8                    := 'FF'O
-}
-
-template VTSelectInputObjectRes_v5AndLater t_VTSelectInputObjectRes_v5AndLater(
-  template ValidObjectID                          p_objectID,
-  template e_VTSelectInputObject_selection        p_selection,
-  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
-  vtfunction                    := 3,
-  objectID                      := p_objectID,
-  selection                     := p_selection,
-  bitmask                       := p_bitmask,
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTESCReq t_VTESCReq (
-  template AnyObjectID          p_objectID,
-  template VTESC_ErrorCodes     p_errorCodes) := {
-  vtfunction                    := 4,
-  objectID                      := p_objectID,
-  errorCodes                    := p_errorCodes,
-  reserved5                     := 'FF'O,
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTESCRes t_VTESCRes (
-  template AnyObjectID        p_objectID) :={
-  vtfunction                    := 4,
-  objectID                      := p_objectID, 
-  reserved4                     := 'FF'O,
-  reserved5                     := 'FF'O,
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTChangeNumericValueReq t_VTChangeNumericValueReq (
-  template ValidObjectID       p_objectID,
-  template OCT4                p_value) := {
-  vtfunction                     := 5,
-  objectID                       := p_objectID,
-  reserved4                      := 'FF'O,
-  value_                         := p_value
-} 
-
-template VTChangeNumericValueRes t_VTChangeNumericValueRes (
-  template ValidObjectID       p_objectID,
-  template OCT4                p_value) := {
-  vtfunction                     := 5,
-  objectID                       := p_objectID,
-  reserved4                      := 'FF'O,
-  value_                         := p_value
-} 
-
-template VTChangeActiveMaskReq t_VTChangeActiveMaskReq (
-  template ValidObjectID                   p_activeMaskOrWindowMaskOrKeyGroupObjectID,
-  template VTChangeActiveMasErrorcodes     p_errorCodes,
-  template ValidObjectID                   p_objectIDcontainingError,
-  template ValidObjectID                   p_parentObjectIDofErrorObjectID) := 
-{
-  vtfunction                               := 6,
-  activeMaskOrWindowMaskOrKeyGroupObjectID := p_activeMaskOrWindowMaskOrKeyGroupObjectID,
-  errorCodes                               := p_errorCodes,
-  objectIDcontainingError                  := p_objectIDcontainingError,
-  parentObjectIDofErrorObjectID            := p_parentObjectIDofErrorObjectID
-}
-
-template VTChangeActiveMaskRes t_VTChangeActiveMaskRes (
-	template   ValidObjectID                   p_activeMaskObjectID) := {
-  vtfunction                    := 6,
-  activeMaskObjectID            := p_activeMaskObjectID,
-  reserved4                     := 'FF'O,
-  reserved5                     := 'FF'O,
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTChangeSoftKeyMaskReq t_VTChangeSoftKeyMaskReq(
-  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
-  template ValidObjectID                   p_softKeyMaskObjectID,
-  template VTChangeSoftKeyMaskErrorCodes   p_errorCodes) := 
-{
-  vtfunction                    := 7,
-  dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
-  softKeyMaskObjectID           := p_softKeyMaskObjectID,
-  errorCodes                    := p_errorCodes,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTChangeSoftKeyMaskRes t_VTChangeSoftKeyMaskRes(
-  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
-  template ValidObjectID                   p_softKeyMaskObjectID) := 
-{
-  vtfunction                    := 7,
-  dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
-  softKeyMaskObjectID           := p_softKeyMaskObjectID,
-  reserved6                     := 'FF'O,
-  reserved7                     := 'FF'O,
-  reserved8                     := 'FF'O
-}
-
-template VTChangeStringValueReq t_VTChangeStringValueReq (
-  template ValidObjectID                   p_inputStringOrStringVariableObjectID,
-  template octetstring                     p_enteredStringValue) := 
-{
-  vtfunction                            := 8,
-  inputStringOrStringVariableObjectID   := p_inputStringOrStringVariableObjectID,
-  numberOfBytes                         := lengthof(p_enteredStringValue),
-  enteredStringValue                    := p_enteredStringValue
-} 
-
-template VTChangeStringValueRes t_VTChangeStringValueRes (
-	template ValidObjectID                   p_inputStringOrStringVariableObjectID) :=
-{
-  vtfunction                            := 8,
-  reserved2                             := 'FF'O,
-  reserved3                             := 'FF'O,
-  inputStringOrStringVariableObjectID   := p_inputStringOrStringVariableObjectID,
-  reserved6                             := 'FF'O,
-  reserved7                             := 'FF'O,
-  reserved8                             := 'FF'O
-}
-
-template GetSupportedWidecharsReq t_GetSupportedWidecharsReq(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange, OCT2 p_lastWideCharInInquiryRange) := {
-  vtfunction                  := 193,
-  codeplane                   := p_codeplane,
-  firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
-  lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange,
-  reserved7                   := 'FF'O,
-  reserved8                   := 'FF'O
-}
-
-template GetSupportedWidecharsRes t_GetSupportedWidecharsRes(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange, 
-  OCT2 p_lastWideCharInInquiryRange,
-  INT1 p_numberOfRanges, 
-  WideCharRangeArray p_wideCharRangeArray) := 
-{
-  vtfunction                  := 193,
-  codeplane                   := p_codeplane,
-  firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
-  lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange,
-  numberOfRanges              := p_numberOfRanges, 
-  wideCharRangeArray          := p_wideCharRangeArray
-}
-
-template GetMemoryReq t_GetMemoryReq(INT3 p_memoryRequired) := {
-  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) := {
-  vtfunction                      := 194,
-  versionNumber                   := p_versionNumber,
-  status                          := p_status,
-  reserved4                       := 'FF'O,
-  reserved5                       := 'FF'O,
-  reserved6                       := 'FF'O,
-  reserved7                       := 'FF'O,
-  reserved8                       := 'FF'O
-}
-
-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
-}
-
-template N_SP_Response t_N_SP_Response(template e_PortNumber t_fromPort, 
-  template e_PortNumber t_toPort, 
-  template N_SP_Response.requestedParametrics requestedParametrics_param) := {  
-  msgFunction := 132,
-  portPair := {fromPort := t_fromPort, toPort := t_toPort},
-  requestedParametrics := requestedParametrics_param
-}
-
-template AnyIsoBusPdu t_N_SP_Response_pdu(template e_PortNumber t_fromPort, 
-  template e_PortNumber t_toPort, 
-  template N_SP_Response.requestedParametrics t_requestedParametrics_param) := {  
-  networkMessage := {n_SP_Response := t_N_SP_Response(t_fromPort, t_toPort, t_requestedParametrics_param)
-  }}
-
-
-}
-
diff --git a/demo/Isobus_test.ttcn b/demo/Isobus_test.ttcn
new file mode 100644
index 0000000..d170980
--- /dev/null
+++ b/demo/Isobus_test.ttcn
@@ -0,0 +1,1290 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+//  File:               J1939test.ttcn
+//  Description:        J1939 port type test
+//
+
+
+module Isobus_test {
+
+import from SocketCAN_Types all;
+import from SocketCAN_PortType all;
+import from SocketCAN_Templates all;
+import from J1939 all;
+import from IsobusVT_Templates all;
+import from Isobus all;
+
+template WorkingSetMaintenanceMessages t_WorkingSetMaintenanceTick(template boolean p_tickvalue) := 
+{workingSetMaintenanceTick := p_tickvalue}
+
+template WorkingSetMaintenanceMessages t_WorkingSetMaintenanceInitialize(template boolean p_tickvalue) := 
+{workingSetMaintenanceInitialize := p_tickvalue}
+const float c_guard := 50.0
+
+type enumerated SocketCAN_open_socket_type
+{ 
+  OPEN_CAN_RAW,
+  OPEN_CAN_BCM,
+  OPEN_CAN_ISOTP,
+  OPEN_CAN_J1939
+}
+
+type enumerated e_Phase {
+  e_open_socket, 
+  e_testbody1, 
+  e_testbody2,
+  e_testbody3,
+  e_testbody4,
+  e_testbody5,
+  e_testbody6,
+  e_testbody7,
+  e_testbodyEnd,
+  e_testcase_complete
+}
+
+type record SocketCAN_open_j1939_result{
+  SocketCAN_ifr                    ifr,
+  SocketCAN_socketid               socket_id} 
+
+type record J1939_message  {
+  e_Phase phase,
+  SocketCAN_J1939_PDU j1939_pdu
+}
+
+const integer J1939_MAX_PDU_NUMBER := 256;  // for testing purposes
+
+type record length (0 .. J1939_MAX_PDU_NUMBER) of SocketCAN_J1939_PDU SocketCAN_J1939_PDUs
+
+// workarounds as (x .. enum2int(e_testcase_complete)) fails but:
+// workarounds as (x .. enum2int(c_testcase_complete)) works
+const e_Phase c_firstPhase        := e_open_socket
+const e_Phase c_testcase_complete := e_testcase_complete
+
+type record PhaseStartReq {
+  e_Phase phase,
+  integer phase_int
+}
+type record PhaseEndInd   {
+  e_Phase phase, 
+  integer phase_int
+}
+
+type boolean HaltReq
+type boolean HaltInd
+
+type union  Command_MTC2PTC{
+  PhaseStartReq                       phaseStartReq,
+  HaltReq                             haltReq
+}
+
+type union  Command_PTC2MTC{
+  PhaseEndInd                         phaseEndInd,
+  HaltInd                             haltInd
+}
+
+type port SyncMasterPort message {
+  out Command_MTC2PTC
+  in  Command_PTC2MTC
+} with { extension "internal" }
+
+type port SyncSlavePort message {
+  in  Command_MTC2PTC
+  out Command_PTC2MTC
+} with { extension "internal" }
+
+type port J1939PDU_PT message {
+  inout   J1939PDU_with_NAME
+} with { extension "internal" }
+
+type boolean PoolUploadOngoing
+
+type port PoolUploadOngoingIn message {
+  in   PoolUploadOngoing
+} with { extension "internal" }
+
+type port PoolUploadOngoingOut message {
+  out   PoolUploadOngoing
+} with { extension "internal" }
+
+type boolean VTStatusTick
+
+type port VTStatusTickIn message {
+  in   VTStatusTick
+} with { extension "internal" }
+
+type port VTStatusTickOut message {
+  out   VTStatusTick
+} with { extension "internal" }
+
+type boolean WorkingSetMaintenaceOnOff
+
+type port WorkingSetMaintenaceOnOffIn message {
+  in   WorkingSetMaintenaceOnOff
+} with { extension "internal" }
+
+type port WorkingSetMaintenaceOnOffOut message {
+  out   WorkingSetMaintenaceOnOff
+} with { extension "internal" }
+
+type union WorkingSetMaintenanceMessages
+{
+  // put all workingSetMaintenance messages here
+  boolean               workingSetMaintenanceTick,
+  boolean               workingSetMaintenanceInitialize
+}
+
+type port WorkingSetMaintenanceIn message {
+  in   WorkingSetMaintenanceMessages
+} with { extension "internal" }
+
+type port WorkingSetMaintenanceOut message {
+  out   WorkingSetMaintenanceMessages
+} with { extension "internal" }
+
+//component declarations
+
+type component SyncPTC {
+  port SyncSlavePort                      pt_sync
+  var  e_Phase                            v_phase := c_firstPhase
+}
+
+type component PTC_Isobus_VT_VTSTATUSCycleSend_CT extends SyncPTC
+{
+  port VTStatusTickOut                    pt_VTStatusTick
+  port PoolUploadOngoingIn                pt_PoolUploadOngoing
+  //variables
+  //timers
+}
+
+type component PTC_Isobus_ECU_VTSTATUSCycleReceive_CT extends SyncPTC
+{
+  port VTStatusTickIn                     pt_VTStatusTick
+  port WorkingSetMaintenaceOnOffOut       pt_WorkingSetMaintenaceOnOff
+  //variables
+  //timers
+}
+
+type component PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT extends SyncPTC
+{
+  port WorkingSetMaintenaceOnOffIn        pt_WorkingSetMaintenaceOnOff
+  port WorkingSetMaintenanceOut           pt_WorkingSetMaintenance
+  //timers
+}
+
+type component PTC_Isobus_VT_CT extends SyncPTC
+{
+  port J1939PDU_PT                        pt_j1939PDU
+  port VTStatusTickIn                     pt_VTStatusTick
+  //variables
+  var J1939_ADDR v_peeraddr := J1939_NO_ADDR
+  var J1939_NAME v_peername := J1939_NO_NAME
+  //timers
+}
+
+type component PTC_Isobus_ECU_CT extends SyncPTC
+{
+  port J1939PDU_PT                        pt_j1939PDU
+  port WorkingSetMaintenanceIn            pt_WorkingSetMaintenance
+  port VTStatusTickOut                    pt_VTStatusTick
+  //variables
+  var J1939_ADDR v_peeraddr := J1939_NO_ADDR
+  var J1939_NAME v_peername := J1939_NO_NAME
+  //timers
+}
+
+type component PTCAdapter extends SyncPTC {
+  port SocketCAN_PT                       pt_socketCAN
+  port J1939PDU_PT                        pt_j1939PDU
+}
+
+type record of PTCs PTCSet 
+
+type union  PTCs{
+  PTCAdapter                                          ptc_Adapter,
+  PTC_Isobus_VT_VTSTATUSCycleSend_CT                  ptc_Isobus_VT_VTSTATUSCycleSend_CT,
+  PTC_Isobus_VT_CT                                    ptc_Isobus_VT_CT,
+  PTC_Isobus_ECU_CT                                   ptc_Isobus_ECU_CT, 
+  PTC_Isobus_ECU_VTSTATUSCycleReceive_CT              ptc_Isobus_ECU_VTSTATUSCycleReceive_CT,
+  PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT
+}
+
+
+type component MTC{ 
+  timer t_guard
+  port  SyncMasterPort pt_sync
+  var PTCSet         v_PTCSet := {}
+}
+
+altstep alt_awaitPhaseStartReq(in e_Phase p_phase) runs on SyncPTC {
+  var Command_MTC2PTC v_PhaseStartReq;
+  [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := p_phase, phase_int := ?}}){
+    log("PTC name: ", self)
+    log("Waits for start of phase: ", p_phase)
+  }
+  // between v_phase and p_phase
+  [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := ?, phase_int := (enum2int(c_firstPhase) .. enum2int(v_phase))}}) -> value v_PhaseStartReq 
+  { 
+    //v_phase := f_incPhase(v_phase)
+    log("PTC name: ", self)
+    log("Waits for start of phase: ", p_phase)
+    log("Received completion of phase: ", p_phase)
+    f_sendPhaseEndInd()
+    repeat
+  }
+  [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := ?, phase_int :=?}}) -> value v_PhaseStartReq
+  {log("Received unexpected message:", v_PhaseStartReq);setverdict(inconc)}
+}
+
+function f_startPhase (in e_Phase p_phase) runs on MTC {
+  var integer v_i
+  var integer v_amount := sizeof(v_PTCSet)
+  var Command_MTC2PTC v_phaseStartReq := {phaseStartReq:={ phase := p_phase, phase_int := enum2int(p_phase)}}
+
+  for (v_i := 0; v_i < v_amount; v_i := v_i +1){
+    log("MTC instance: ", self)
+    if        (ischosen(v_PTCSet[v_i].ptc_Adapter))   { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Adapter}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_VT_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_CT)){ pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT)){ pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT}
+    else {
+      log("Chosen PTC type misssing, please add handling for all PTC types!");
+      setverdict(inconc)}//something wrong, this should not happen
+  }
+}
+
+function f_haltAllComponents () runs on MTC {
+  var integer v_i
+  var integer v_amount := sizeof(v_PTCSet)
+  var Command_MTC2PTC v_haltReq := {haltReq:=true}
+  for (v_i := 0; v_i < v_amount; v_i := v_i +1){
+    log("MTC instance: ", self)
+    if        (ischosen(v_PTCSet[v_i].ptc_Adapter))   { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Adapter}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_VT_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_CT)){ pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT}
+    else if   (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT)){ pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT}
+    else {
+      log("Chosen PTC type misssing, please add handling for all PTC types!");
+      setverdict(inconc)}//something wrong, this should not happen
+  }
+}
+
+function f_incPTCPhase(in e_Phase p_currentPhase) runs on SyncPTC return e_Phase {
+  var e_Phase v_nextPhase
+  log("PTC: ", self)
+  log("PTC instance: ", self)
+  log("Current PTC phase: ", p_currentPhase)
+  int2enum( enum2int(p_currentPhase)+1, v_nextPhase)
+  log("Next PTC phase:", v_nextPhase)
+  return v_nextPhase
+}
+
+function f_sendPhaseEndInd() runs on SyncPTC{
+  // just to allow matching with integer ranges on the reception side, as it is not poosible to do so with enums
+  var Command_PTC2MTC v_PhaseEndInd := {phaseEndInd :={phase := v_phase, phase_int := enum2int(v_phase)}}
+  pt_sync.send(v_PhaseEndInd)
+  log("PTC: PhaseEndInd to MTC with content: ", v_PhaseEndInd, self)
+  v_phase := f_incPTCPhase(v_phase)
+}
+
+function f_addSyncSlaveSet (in PTCs p_slave,
+  inout PTCSet p_set) {
+  p_set[sizeof(p_set)] := p_slave
+  return
+}
+function f_incMTCPhase(in e_Phase p_currentPhase) runs on MTC return e_Phase {
+  var e_Phase v_nextPhase
+  log("MTC: ", self)
+  log("Current phase: ", p_currentPhase)
+  int2enum( enum2int(p_currentPhase)+1, v_nextPhase)
+  log("Next phase:", v_nextPhase)
+  return v_nextPhase
+}
+
+function f_awaitEndPhase(in e_Phase p_phase) runs on MTC {
+  var integer v_amount:= sizeof(v_PTCSet);
+  var integer v_i
+  t_guard.start(c_guard)
+  var Command_PTC2MTC v_PhaseEndInd
+
+  log("Available PTCs", v_PTCSet)
+
+  for(v_i := 0; v_i < v_amount; v_i := v_i +1) {
+    alt {
+      [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:= {phase :=p_phase, phase_int := ?}}) -> value v_PhaseEndInd
+      {
+        log("Nth PTC", v_i, "of n PTCs: ", v_amount, "Ended phase: ", v_PhaseEndInd.phaseEndInd.phase)
+      }
+      // value between p_phase +1  and e_testcase_complete:
+      [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:= {phase :=?, phase_int :=  (enum2int(p_phase) .. (enum2int(c_testcase_complete)))}}) -> value v_PhaseEndInd
+      {
+        log("Nth PTC", v_i, "of n PTCs: ", v_amount, "Ended phase: ", v_PhaseEndInd.phaseEndInd.phase)
+      }
+      [] t_guard.timeout {
+        log("Timeout in MTC phase:", p_phase)
+        setverdict(inconc)
+      }
+      [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:=?})  -> value v_PhaseEndInd {
+        log("Unexpected phase recieved: ", v_PhaseEndInd)
+        log("Expected phase range: ", p_phase)
+        log(" to ", c_testcase_complete)
+        setverdict(inconc)        
+      }
+      [] any port.receive{
+        log("Expected phase:", p_phase)
+        setverdict(inconc)
+      }
+
+    } 
+  }
+  t_guard.stop
+}
+
+function f_awaitAllComponentsHalt() runs on MTC {
+  var integer v_amount:= sizeof(v_PTCSet);
+  var integer v_i
+  t_guard.start(c_guard)
+
+  for(v_i := 0; v_i < v_amount; v_i := v_i +1) {
+    alt {
+      [] pt_sync.receive (Command_PTC2MTC:{haltInd :=?}){
+      }
+      [] t_guard.timeout {
+        log("Timeout in MTC while waiting for command HaltRes")
+        setverdict(inconc)
+      }
+      [] any port.receive{
+        log("Received unexpeced message")
+        setverdict(inconc)
+      }
+    } 
+  }
+  t_guard.stop
+}
+function f_open_socket(in SocketCAN_socket p_socket) 
+runs on PTCAdapter 
+return SocketCAN_socket_result {
+
+  var SocketCAN_socket_result v_result  
+  timer t_guard
+  t_guard.start(c_guard)
+
+  pt_socketCAN.send(p_socket)  
+
+  // receive response
+  alt {
+    [] pt_socketCAN.receive(
+      a_SocketCAN_socket_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("SocketCan:Socket opened: ", v_result.id)}
+    [] pt_socketCAN.receive(a_SocketCAN_socket_result(a_result(SocketCAN_ERROR)))
+    {log("Received Opening Socket failed"); setverdict(fail)}
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)}
+  }
+  t_guard.stop
+  return v_result
+}
+
+function f_ioctl_get_if_index(in SocketCAN_socketid p_socket_id) 
+runs on PTCAdapter 
+return SocketCAN_ioctl_result {
+  var SocketCAN_ioctl_result v_result   
+  timer t_guard
+  t_guard.start(c_guard)
+
+  pt_socketCAN.send(SocketCAN_ioctl:{id:= p_socket_id, ifu := omit});
+  // receive response
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Retrieved interface index", v_result.ifr.if_index)}
+    [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_ERROR)))
+    {log("Retrieving interface index failed", p_socket_id); setverdict(fail)}       
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)
+    }
+  } 
+  t_guard.stop
+  return v_result
+}
+
+function f_connect(in SocketCAN_socketid p_socket_id,
+  in SocketCAN_if_index p_if_index, 
+  in J1939_NAME p_j1939_name_destination,
+  in J1939_PGN  p_j1939_pgn_destination,
+  in J1939_ADDR  p_j1939_pgn_addr)
+runs on PTCAdapter 
+return SocketCAN_connect_result {  
+  var SocketCAN_connect_result v_result                   
+  timer t_guard
+  t_guard.start(c_guard)
+
+  pt_socketCAN.send(SocketCAN_Types.SocketCAN_connect:{id:= p_socket_id, 
+      connectu := {j1939 := {if_index:= p_if_index, 
+          j1939_destination:= {
+            name := p_j1939_name_destination /* or J1939_NO_NAME */,
+            pgn  := p_j1939_pgn_destination /* or J1939_NO_PGN */, 
+            addr := p_j1939_pgn_addr        /* or J1939_NO_ADDR */}}}});
+  // SocketCAN_connect receive response
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_connect_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Connecting socket", p_socket_id)}
+    [] pt_socketCAN.receive(a_SocketCAN_connect_result(a_result(SocketCAN_ERROR))) 
+    {log("Connecting socket failed.", p_socket_id); setverdict(fail)}       
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)}
+  } 
+  t_guard.stop
+  return v_result
+}
+
+function f_bind(
+  in SocketCAN_socketid p_socket_id,
+  in SocketCAN_if_index p_if_index, 
+  in J1939_NAME         p_j1939_name_source,
+  in J1939_PGN          p_j1939_pgn_source,
+  in J1939_ADDR         p_j1939_addr_source) 
+runs on PTCAdapter 
+return SocketCAN_bind_result {
+  var SocketCAN_bind_result v_result
+  timer t_guard
+  t_guard.start(c_guard)
+
+  log("p_socket_id", p_socket_id)
+  log("p_if_index", p_if_index)
+  log("p_j1939_name_source", p_j1939_name_source)
+  log("p_j1939_pgn_source", p_j1939_pgn_source)
+  log("p_j1939_addr_source", p_j1939_addr_source)
+
+
+  pt_socketCAN.send(SocketCAN_bind:{id:= p_socket_id, 
+      bindu := {j1939 := {if_index:= p_if_index, 
+          j1939_source:= 
+          {name :=  p_j1939_name_source /* or J1939_NO_NAME */,
+            pgn :=  p_j1939_pgn_source  /* or J1939_NO_PGN */, 
+            addr := p_j1939_addr_source /* or J1939_NO_ADDR or J1939_IDLE_ADDR */ }}}});
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Binding socket", p_socket_id)}
+    [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_ERROR))) {}
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)
+    }
+  }
+  t_guard.stop
+  return v_result
+}
+
+function f_j1939_send_data_to(
+  in SocketCAN_socketid   p_socket_id, 
+  in SocketCAN_if_index   p_if_index,
+  in J1939_hdr            p_j1939_destination,
+  in SocketCAN_J1939_PDU  p_pdu)
+runs on PTCAdapter
+return SocketCAN_j1939_send_data_to_result { 
+  var SocketCAN_j1939_send_data_to_result v_result
+
+  timer t_guard
+  t_guard.start(c_guard)
+
+  pt_socketCAN.send(SocketCAN_j1939_send_data_to:{
+      id                := p_socket_id,
+      if_index          := p_if_index,
+      j1939_destination := p_j1939_destination,
+      pdu               := p_pdu});
+
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Sending j1939_send_data_to", p_socket_id)}
+    [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_ERROR))) 
+    {log("Sending j1939_send_data_to failed", p_socket_id); setverdict(fail)}       
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)
+    }
+  }
+  t_guard.stop
+  return v_result
+}
+
+function f_j1939_send_data(in SocketCAN_socketid p_socket_id, 
+  in SocketCAN_J1939_PDU              p_pdu) 
+runs on PTCAdapter 
+return SocketCAN_j1939_send_data_result { 
+
+  var SocketCAN_j1939_send_data_result v_result
+
+  timer t_guard
+  t_guard.start(c_guard)
+  log("SocketCAN_j1939_send_data_to:{id}:", p_socket_id)
+  log("SocketCAN_j1939_send_data_to:{pdu}:", p_pdu)
+
+  pt_socketCAN.send(SocketCAN_j1939_send_data:{
+      id:= p_socket_id, 
+      pdu:=p_pdu});
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Writing data on J1939 socket: ", p_socket_id)}
+    [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_result(a_result(SocketCAN_ERROR))) 
+    {log("Writing data on J1939 socket failed", p_socket_id); 
+      setverdict(fail)}       
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)}
+  }
+  t_guard.stop
+  return v_result
+}
+
+function f_setsockopt(in SocketCAN_socketid p_socket_id,
+  in SocketCAN_setsockopt_commandu p_command)
+runs on PTCAdapter 
+return SocketCAN_setsockopt_result{
+  var SocketCAN_setsockopt_result v_result
+
+  timer t_guard
+  t_guard.start(c_guard)
+
+  pt_socketCAN.send(SocketCAN_Types.SocketCAN_setsockopt:{id:= p_socket_id, command := p_command});
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_setsockopt_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+    {log("Writing data", p_socket_id)}
+    [] pt_socketCAN.receive(a_SocketCAN_setsockopt_result(a_result(SocketCAN_ERROR))) 
+    {log("Writing data failed", p_socket_id); setverdict(fail)}       
+    [] t_guard.timeout {
+      log("guard timeout!")
+      setverdict(fail)
+    }
+  }
+  t_guard.stop
+  return v_result
+}
+
+function f_close_socket (in SocketCAN_socketid p_socket_id) 
+runs on PTCAdapter {
+  pt_socketCAN.send(SocketCAN_close:{id:= p_socket_id});
+}
+
+function f_open_j1939()
+runs on PTCAdapter 
+return SocketCAN_open_j1939_result {
+  var SocketCAN_socketid v_socket_id
+  v_socket_id := f_open_socket({domain:=PF_CAN, ptype := SOCK_DGRAM, protocol:= CAN_J1939}).id
+  var SocketCAN_ifr v_ifr
+  v_ifr := f_ioctl_get_if_index(v_socket_id).ifr
+
+  var SocketCAN_open_j1939_result v_result
+  v_result := {ifr := v_ifr, socket_id := v_socket_id}
+
+  return v_result
+}
+
+function f_ptc_J1939Adapter(
+  in e_Phase             p_phase,
+  in J1939_Priority      p_send_prio,
+  in J1939_NAME          p_j1939_name_source) runs on PTCAdapter {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_source, 
+    J1939_NO_PGN,  /* p_j1939_pgn_source */
+    J1939_NO_ADDR  /* p_j1939_addr_source */)
+  var SocketCAN_setsockopt_result            v_setsockopt_result
+  v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+  const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable} 
+  // configure broadcast:
+  v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+  f_sendPhaseEndInd() //e_open_socket
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+  f_sendPhaseEndInd()
+
+
+  var SocketCAN_receive_j1939_message v_result
+  var SocketCAN_j1939_send_data_to_result v_send_data_to_result
+  var J1939PDU_with_NAME v_pgn_and_pdu_with_name
+  var boolean condition := true
+  var boolean v_guard :=true
+
+  timer t_guard
+
+
+
+  while (condition)
+  {
+    alt 
+    {
+      [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+
+        pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+        log("PTC name: ", self)
+        log("Got HaltReq command")
+        condition := false
+      }
+
+      [v_guard] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=?,pdu:=?}) 
+      -> value v_pgn_and_pdu_with_name 
+      { 
+        t_guard.start(c_guard)
+
+        var octetstring v_j1939_pdu, v_pgn_and_pdu
+        v_pgn_and_pdu := f_encode_J1939_message (v_pgn_and_pdu_with_name.pdu)
+        v_j1939_pdu := substr(v_pgn_and_pdu,3,lengthof(v_pgn_and_pdu)-3)// strip PGN
+
+        var J1939_hdr v_j1939_destination := {
+          name := v_pgn_and_pdu_with_name.name, 
+          pgn := substr(v_pgn_and_pdu,0,3),        // strip PDU,  pgn_destination 
+          addr:= v_pgn_and_pdu_with_name.addr
+        }
+
+
+        pt_socketCAN.send(SocketCAN_j1939_send_data_to:{
+            id                := v_socket_id,
+            if_index          := v_ifr.if_index,
+            j1939_destination := v_j1939_destination,
+            // strip PGN
+            pdu               := v_j1939_pdu});
+
+        v_guard:=false;  //stop receiving until send confirmation received 
+      }
+
+      [not(v_guard)] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_SUCCESS))) -> value v_send_data_to_result
+      {
+        log("Sending j1939_send_data_to:", v_socket_id, ", ", v_ifr.if_index)
+        v_guard:=true
+        t_guard.stop
+      }
+
+      [not(v_guard)] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_ERROR))) 
+      {
+        log("Sending j1939_send_data_to failed", v_socket_id); 
+        v_guard:=true
+        t_guard.stop
+        setverdict(fail)
+      }
+
+      [] pt_socketCAN.receive(a_SocketCAN_receive_j1939_message(
+          v_socket_id,
+          v_ifr,
+          ?, /* any pgn */
+          ?, /* any peer_addr */
+          ?, /* any peer_name */
+          ?  /* any j1939_pdu */)) -> value v_result
+      {
+        log("SocketCan:J1939 message from socket received", v_result)     
+        pt_j1939PDU.send({addr:=v_result.destAddr, name:= v_result.name, 
+            // concatenate received pgn and pdu
+            pdu:=f_decode_J1939_message(v_result.pgn & v_result.pdu) /* concatenate pgn & pdu */}); 
+      }
+      [] pt_sync.receive
+      {
+        log("Fail:Unexpected message from port pt_sync received");
+        setverdict(fail)
+      }
+      [v_guard] pt_socketCAN.receive
+      {
+        log("Fail:Unexpected message from port pt_socketCAN received")
+        //this should catch any incoming message type not matched on the first alternatives
+        setverdict(fail)
+      }
+
+      [v_guard] pt_j1939PDU.receive
+      {
+        log("Fail:Unexpected message from port pt_j1939PDU received")
+        //this should catch any incoming message type not matched on the first alternatives
+        setverdict(fail)
+      }
+
+      [v_guard] any port.receive   
+      {
+        log("Fail:Message received on a different port")
+        //this should catch any incoming message type not matched on the first alternatives on any other port
+        setverdict(fail)
+      } 
+
+      [not(v_guard)] t_guard.timeout {
+        log("guard timeout!")
+        setverdict(fail)
+      }
+    }//endalt
+  } // end while
+
+
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)
+  setverdict(pass)
+}
+
+function f_ptc_J1939ECUApplication(in e_Phase p_phase) runs on PTC_Isobus_ECU_CT
+{
+
+  var boolean condition := true
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+
+
+  while (condition)
+  {
+    var J1939PDU_with_NAME v_pgn_and_pdu_with_name  
+
+    alt 
+    {
+      [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+        pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+        log("PTC name: ", self)
+        log("Got HaltReq command")
+        condition := false
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=?,
+          pdu:=t_VTStatusInd(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        v_peeraddr := v_pgn_and_pdu_with_name.addr
+        v_peername := v_pgn_and_pdu_with_name.name
+        // store peer name
+        //log incoming message 
+        log("SocketCan:Expected message VTStatusReq received!", v_pgn_and_pdu_with_name)
+        pt_VTStatusTick.send( true );
+      }  
+      [] pt_WorkingSetMaintenance.receive(t_WorkingSetMaintenanceTick(?)) {
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_WorkingSetMaintenanceInd(true, compliantWithVTVersion4)
+
+          ))
+      }
+
+      []pt_WorkingSetMaintenance.receive(t_WorkingSetMaintenanceInitialize(true)) {
+        // the ECU has received the first VTStatus message
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_GetHardwareReq
+          ))    
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_GetHardwareRes(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("SocketCan:Expected message GetHardwareRes received!", v_pgn_and_pdu_with_name)
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_GetNumberOfSoftKeysReq
+          ))    
+      }  
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_GetNumberOfSoftKeysRes(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("SocketCan:Expected message GetNumberOfSoftKeysRes received!", v_pgn_and_pdu_with_name)
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_GetTextFontDataReq
+          ))    
+      } 
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_GetTextFontDataRes(?, ?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("SocketCan:Expected message GetTextFontDataRes received!", v_pgn_and_pdu_with_name)
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_GetMemoryReq(100000)
+          ))    
+      } 
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_GetMemoryRes(?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("SocketCan:Expected message GetMemoryRes received!", v_pgn_and_pdu_with_name)
+        log("SocketCan:Sending broken object pool!")
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_ObjectPoolTransferInd('0123456789ABCDEF'O)))  
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+            v_peername,    /* set peername */
+            t_EndOfObjectPoolReq))    
+      } 
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_EndOfObjectPoolRes(?, ?, ?,               
+            /* objectPoolErrorCodes */   { 
+              methodOrAttributeNotSupportedByTheVT   :=?,
+              unknownObjectReference                 :=true,
+              anyOtherError                          :=?,
+              objectPoolWasDeletedFromVolatileMemory :=?,
+              reserved4                              :=false,
+              reserved5                              :=false,
+              reserved6                              :=false,
+              reserved7                              :=false
+            })}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("Expected message EndOfObjectPoolRes received!", v_pgn_and_pdu_with_name)
+        f_sendPhaseEndInd()
+
+        setverdict ( pass );
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+          pdu:=t_EndOfObjectPoolRes(?, ?, ?,               
+            /* objectPoolErrorCodes */   { 
+              methodOrAttributeNotSupportedByTheVT   :=?,
+              unknownObjectReference                 :=?,
+              anyOtherError                          :=?,
+              objectPoolWasDeletedFromVolatileMemory :=?,
+              reserved4                              :=false,
+              reserved5                              :=false,
+              reserved6                              :=false,
+              reserved7                              :=false
+            })}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("Unxxpected message EndOfObjectPoolRes response parameter received!", v_pgn_and_pdu_with_name)
+        f_sendPhaseEndInd()
+
+        setverdict ( fail );
+      }
+
+      [] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:=?, name:=?,pdu:=?}) -> value v_pgn_and_pdu_with_name
+      {
+        log("Unexpected message received!", v_pgn_and_pdu_with_name)
+      }
+
+      [] pt_j1939PDU.receive  
+      {log("Unexpected message received")} //this should catch any incoming message type not matched on the first alternatives
+
+      //      [] any port.receive   
+      //      {
+      //        setverdict(fail)        
+      //        log("Message received on a different port") //this should catch any incoming message type not matched on the first alternatives on any other port
+      //      }
+    }//endalt
+  } // end while
+}
+
+function f_ptc_J1939VTApplication(in e_Phase p_phase) runs on PTC_Isobus_VT_CT
+{
+  var  boolean  condition := true
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+
+
+  while (condition)
+  {
+    var J1939PDU_with_NAME v_pgn_and_pdu_with_name    
+    alt 
+    {
+      [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+        pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+        log("PTC name: ", self)
+        log("Got HaltReq command")
+        condition := false
+      }
+
+      []pt_VTStatusTick.receive(VTStatusTick:?)
+      {
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            J1939_NO_ADDR, /* send broadcast, as name is set to J1939_NO_NAME */
+            J1939_NO_NAME, /* set peername */
+            t_VTStatusInd(J1939_IDLE_ADDR, 
+              'FFFF'O, 
+              'FFFF'O, 
+              vtIsBusyUpdatingVisibleMask, 
+              'FF'O)
+          ))
+      }
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_WorkingSetMaintenanceInd(?, ?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        //log incoming message 
+        log("SocketCan:Expected WorkingSetMaintenanceInd message received!", v_pgn_and_pdu_with_name)
+        log("The version number is", v_pgn_and_pdu_with_name.pdu.pdu.ecu2vt.workingSetMaintenanceInd.versionNumber)
+        v_peeraddr := v_pgn_and_pdu_with_name.addr
+        v_peername := v_pgn_and_pdu_with_name.name
+        // store peer name
+      }  
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_GetHardwareReq}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_GetHardwareRes(
+              /* bootTimeInSeconds */ 255,
+              /* graphicType */ colors256, 
+              /* hardware */ { 
+                touchScreenandPointingEvent := true, 
+                pointingDeviceAndPointingEvent := false, 
+                multipleFrequencyAudioOutput := true, 
+                adjustableVolumeAudioOutput := true, 
+                simultaneousActivationsOfPhysicalSoftKeys := false, 
+                simultaneousActivationsOfButtons := false, 
+                dragOperationViaPointingEvent := true, 
+                intermediateCoordinatesDuringDragOperation := true }, 
+              /* xPixels */ 480, 
+              /* yPixels */480) 
+          ))  
+      }
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_GetNumberOfSoftKeysReq}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_GetNumberOfSoftKeysRes(
+              /* navigationSoftKeys */ '00'O, 
+              /* x_dots */ '7D'O, 
+              /* y_dots */ '48'O, 
+              /* numberOfVirtualSoftKeys */ '40'O , 
+              /* numberOfPhysicalSoftKeys */ '0C'O
+            )))  
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_GetTextFontDataReq}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_GetTextFontDataRes(
+              /* small_font_sizes */ { 
+                font_8x8 := true, 
+                font_8x12 := true, 
+                font_12x16 := true, 
+                font_16x16 := true, 
+                font_16x24 := true, 
+                font_24x32 := true, 
+                font_32x32 := true, 
+                reserved := false }, 
+              /* large_font_sizes */ { 
+                font_32x48 := true, 
+                font_48x64 := true, 
+                font_64x64 := true, 
+                font_64x96 := true, 
+                font_96x128 := true, 
+                font_128x128 := true, 
+                font_128x192 := true, 
+                reserved := false }, 
+              /* type_attribute */ { 
+                bold_text := true, 
+                crossed_out_text := true, 
+                underlined_text := true, 
+                italics_text := true, 
+                inverted_text := true, 
+                flash_inverted := true, 
+                flash_background_and_foreground := true, 
+                proportional_font_rendering := true }
+            )))  
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_GetMemoryReq(?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_GetMemoryRes(
+              /* versionNumber */ compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4, 
+              /* status */ thereCanBeEnoughMemory
+            )))  
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_GetVersionsReq}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_GetVersionsRes(
+              /* numberOfVersionStrings */ 0, 
+              /* versionStrings */ {  }
+            )))  
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_ObjectPoolTransferInd(?)}) -> value v_pgn_and_pdu_with_name 
+      { 
+        log("Received Object Pool", v_pgn_and_pdu_with_name.pdu.pdu.ecu2vt.objectPoolTransferInd.objectPoolRecords) 
+        log("From addr:", v_pgn_and_pdu_with_name.addr)
+        log("From name:", v_pgn_and_pdu_with_name.name)     
+      }
+
+      []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+          addr := ?, 
+          name:=?,
+          pdu:=t_EndOfObjectPoolReq}) -> value v_pgn_and_pdu_with_name 
+      { 
+        pt_j1939PDU.send(t_J1939PDU_with_NAME(
+            v_pgn_and_pdu_with_name.addr, 
+            v_pgn_and_pdu_with_name.name,    /* respond to sender */
+            t_EndOfObjectPoolRes(
+              /* errorCodes */ {
+                thereAreErrorsInTheObjectPool  := false,
+                vtRanOutOfMemoryDuringTransfer := false,
+                reserved2                      := false,
+                reserved3                      := false,
+                anyOtherError                  := false,
+                reserved5                      := false,
+                reserved6                      := false,
+                reserved7                      := false},
+              /* parentObjectIDoFaultyObject */ 1,
+              /* objectIDofFaultyObject */      2,
+              /* objectPoolErrorCodes */   { 
+                methodOrAttributeNotSupportedByTheVT   :=false,
+                unknownObjectReference                 :=true,
+                anyOtherError                          :=false,
+                objectPoolWasDeletedFromVolatileMemory :=false,
+                reserved4                              :=false,
+                reserved5                              :=false,
+                reserved6                              :=false,
+                reserved7                              :=false
+              }
+            ))) 
+        f_sendPhaseEndInd()
+
+        setverdict ( pass );
+      }
+
+      [] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr := ?, name:=?,pdu:=?}) -> value v_pgn_and_pdu_with_name
+      {
+        log("SocketCan:Unexpected message received!", v_pgn_and_pdu_with_name)
+      }
+
+      [] pt_j1939PDU.receive  
+      {log("Unexpected message received")} 
+      //this should catch any incoming message type not matched on the first alternatives
+
+      [] any port.receive   
+      {
+        setverdict(fail)
+        log("Message received on a different port")} 
+      //this should catch any incoming message type not matched on the first alternatives on any other port
+
+    }//endalt
+  } // end while
+
+  setverdict(pass)
+}
+
+
+function  f_ptc_J1939VTStatusCycleSend(in e_Phase p_phase)  runs on PTC_Isobus_VT_VTSTATUSCycleSend_CT
+{
+  //periodic sending
+  timer VTStatusClock := 1.0
+  var  boolean  condition := true
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+  f_sendPhaseEndInd()
+
+  while (condition)
+  {
+    pt_VTStatusTick.send(true);
+
+    VTStatusClock.start 
+    alt
+    {
+      [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+        pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+        log("PTC name: ", self)
+        log("Got HaltReq command")
+        condition := false
+      }
+
+      []VTStatusClock.timeout;
+    }
+  }//endwhile
+
+  setverdict(pass)
+
+}//endfunction
+
+function  f_ptc_J1939_VTStatusCycleReceive(in e_Phase p_phase)  runs on PTC_Isobus_ECU_VTSTATUSCycleReceive_CT
+{
+
+  timer T_VTStatusReceive := 3.0
+  var boolean v_VTStatusReceive_running := false
+  var boolean condition := true
+  //periodic reception
+
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+  f_sendPhaseEndInd()
+
+  while (condition)
+  {
+    select (v_VTStatusReceive_running) // state
+    {
+      case (true) {
+        alt {
+          [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+            pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+            log("PTC name: ", self)
+            log("Got HaltReq command")
+            condition := false
+          }
+
+          []pt_VTStatusTick.receive(?) { 
+            //log incoming message
+            T_VTStatusReceive.stop;
+            T_VTStatusReceive.start;
+            pt_WorkingSetMaintenaceOnOff.send( true ); 
+          } 
+
+          []T_VTStatusReceive.timeout
+          {
+            pt_WorkingSetMaintenaceOnOff.send( false );
+            v_VTStatusReceive_running := false
+          }
+        }//endalt
+      }
+      case (false) {
+        alt {
+          [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+            pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+            log("PTC name: ", self)
+            log("Got HaltReq command")
+            condition := false
+          }
+
+          []pt_VTStatusTick.receive(?) { 
+            //log incoming message
+            T_VTStatusReceive.start;
+            v_VTStatusReceive_running := true
+            pt_WorkingSetMaintenaceOnOff.send( true ); 
+          } 
+        } //endalt
+      }
+    }
+
+  }
+  setverdict(pass)
+
+}//endfunction
+
+
+function  J1939_ECU_WorkingSetMaintenanceIndCycleSend(in e_Phase p_phase)  runs on PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT
+{
+  timer T_WorkingSetMaintenanceIndCycleSend := 1.0
+  var boolean  v_WorkingSetMaintenaceOn := false
+  var boolean  condition := true
+
+  //periodic reception
+
+  alt_awaitPhaseStartReq(p_phase)
+  f_sendPhaseEndInd()
+  alt_awaitPhaseStartReq(e_testbodyEnd)
+  f_sendPhaseEndInd()
+
+  while (condition)
+  {
+    select (v_WorkingSetMaintenaceOn) {
+      case (true) {
+        alt {
+          [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+            pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+            log("PTC name: ", self)
+            log("Got HaltReq command")
+            condition := false
+          }
+
+          []pt_WorkingSetMaintenaceOnOff.receive(true) 
+          // timer already running 
+          { 
+            //do not do anything
+            //log incoming message
+          } 
+          []pt_WorkingSetMaintenaceOnOff.receive(false) { 
+            T_WorkingSetMaintenanceIndCycleSend.stop;
+            //log incoming message
+            // do not start timer
+            v_WorkingSetMaintenaceOn := false // timer is not running
+            // trigger ECU reset
+          } 
+          []T_WorkingSetMaintenanceIndCycleSend.timeout
+          {
+            // restart timer
+            T_WorkingSetMaintenanceIndCycleSend.start
+            pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceTick(true))
+          }
+        } //endalt
+      }
+      case (false) {
+        alt {
+          [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+            pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+            log("PTC name: ", self)
+            log("Got HaltReq command")
+            condition := false
+          }
+
+          []pt_WorkingSetMaintenaceOnOff.receive(true) { 
+            // timer not running 
+            // start timer
+            T_WorkingSetMaintenanceIndCycleSend.start
+            //log incoming message
+            v_WorkingSetMaintenaceOn := true // timer is running
+            pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceTick(true) )
+            pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceInitialize(true) )
+          } 
+          []pt_WorkingSetMaintenaceOnOff.receive(false) { 
+            //timer is stopped
+            //log incoming message
+            // do not start timer
+            // trigger ECU reset
+          }
+        }
+      } //endalt
+    }
+  }
+  setverdict ( pass );
+}//endfunction
+
+
+}
diff --git a/demo/Isobus_test_encoder.ttcn b/demo/Isobus_test_encoder.ttcn
new file mode 100644
index 0000000..f69a236
--- /dev/null
+++ b/demo/Isobus_test_encoder.ttcn
@@ -0,0 +1,762 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB 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:               Isobustest_plain_socketcan.ttcn
+//  Description:        Encoder / Decoder for Isobus message frames
+//
+// Revision R1A
+
+module Isobustest_test_encoder{
+
+import from Isobus all
+import from IsobusVT_Templates all
+import from J1939 all
+
+//component declarations
+type component MTC_CT
+{ 
+}
+
+testcase tc_encdec() runs on MTC_CT
+{
+  template J1939_messageWithPGN t_address_claimed :=  {pgn := '00EEFF'O,
+    pdu := {addressClaimedOrCannotClaimSourceAddress := { name := {  
+          identityNumber := 514,
+          manufacturerCode := 368,
+          ecuInstance := 3,
+          functionInstance := 5,  
+          function_ := 3,
+          reserved := 0, 
+          vehicleSystem := 101, 
+          vehicleSystemInstance := 1, 
+          industryGroup := 3, 
+          arbitraryAddresssBit := 0     
+        }}}}
+
+  log(f_encode_J1939_message(valueof(t_address_claimed)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_address_claimed))))
+  log("--------------------------------------------")
+
+  template J1939_messageWithPGN t_requestForAddressClaimed :=  {pgn := '00EA00'O,
+    pdu := {requestForAddressClaimed := {pgn := 123}}}
+
+  log(f_encode_J1939_message(valueof(t_requestForAddressClaimed)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_requestForAddressClaimed))))
+  log("--------------------------------------------")
+
+  //  template CAN_frame_j1939 t_CAN_frame_j1939_3 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := {  
+  //    arbitraryAddresssBitValue := 0, 
+  //    industryGroupValue := 3, 
+  //    vehicleSystemInstanceValue := 1, 
+  //    vehicleSystemValue := 101, 
+  //    reservedValue := 0, 
+  //    functionValue := 3, 
+  //    functionInstanceValue := 5, 
+  //    ecuInstanceValue := 3, 
+  //    manufacturerCodeValue := 368, 
+  //    identityNumberValue := 514 } }}}
+  //  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 J1939_messageWithPGN t_commandedAddress :=  {pgn := '00FED8'O,
+    pdu := { commandedAddress := {
+        name := {  
+          identityNumber := 514,
+          manufacturerCode := 368,
+          ecuInstance := 3,
+          functionInstance := 5,  
+          function_ := 3,
+          reserved := 0, 
+          vehicleSystem := 101, 
+          vehicleSystemInstance := 1, 
+          industryGroup := 3, 
+          arbitraryAddresssBit := 0 },
+        newSourceAddress:='AA'O
+      } } }
+
+  log(f_encode_J1939_message(valueof(t_commandedAddress)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+  log("--------------------------------------------")
+}
+
+testcase tc_encdec_vtStatusReq() runs on MTC_CT
+{
+  template J1939_messageWithPGN t_commandedAddress :=  {pgn := '00E600'O,
+    pdu := {vt2ecu := {vtStatusInd :=
+        { vtfunction := 254, 
+          sourceAddressOfActiveWorkingSetMaster := '11'O,
+          objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := '2233'O,
+          objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet := '4455'O,
+          vtBusyCodes := vtIsBusyExecutingACommand,
+          vtFunctionCode := '66'O}}}}
+  log(f_encode_J1939_message(valueof(t_commandedAddress)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+  log("--------------------------------------------")
+}
+
+testcase tc_encdec_getMemoryReq() runs on MTC_CT
+{
+  template J1939_messageWithPGN t_commandedAddress :=  {pgn := '00E700'O,
+    pdu := {ecu2vt := {getMemoryReq :=
+        { vtfunction := 192, 
+          reserved2 := 'FF'O,
+          memoryRequired := 1234567}}}}
+  log(f_encode_J1939_message(valueof(t_commandedAddress)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+  log("--------------------------------------------")
+}
+
+testcase tc_encdec_getMemoryReq_with_template() runs on MTC_CT // using a template
+{
+  template J1939_messageWithPGN t_getMemoryReq := t_GetMemoryReq(1234567)
+  log(f_encode_J1939_message(valueof(t_getMemoryReq)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_getMemoryReq))))
+  log("--------------------------------------------")
+}
+
+testcase tc_encdec_workingSetMaintenanceReq() runs on MTC_CT // using a template
+{
+  template J1939_messageWithPGN t_workingSetMaintenanceReq := t_WorkingSetMaintenanceInd(
+    true,
+    compliantWithVTVersion4)
+  log(f_encode_J1939_message(valueof(t_workingSetMaintenanceReq)))
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_workingSetMaintenanceReq))))
+  log("--------------------------------------------")
+}
+
+
+//testcase tc_dec_largemessage() runs on MTC_CT
+//{
+//
+//  var octetstring j1939_pdu
+//  //j1939_pdu := '18EAFFFE00EE00'O                
+//  //j1939_pdu := '18EEFFF83102032E003D0080'O
+//  //j1939_pdu := '18EEFFF73102032E008200A0'O
+//  //j1939_pdu := '18EAF8F8EBFE00'O  
+//  j1939_pdu := '18ECF8F810160004FFEBFE00'O
+//
+//  // j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
+//  // j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
+//  // j1939_pdu := '03FE00F82A66696C65207365727665722A3139373136392A2D2A'O
+//  // j1939_pdu := '03FE00262A6661726D20646973706C61792A3139373136392A2D2A'O
+//  // j1939_pdu := '03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A'O
+//  // j1939_pdu := '03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A'O
+//  // j1939_pdu := '01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+//  // j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+//  // j1939_pdu := '01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+//  // j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+//  // j1939_pdu := '01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+//  // j1939_pdu := '02FE00FD016661726D20646973706C617920312E33372E31362E3733352A'O
+//  // j1939_pdu := '02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A'O
+//  // j1939_pdu := '02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A'O
+//  // j1939_pdu := '9CFE0DF8FE01FFFFFFFFFFFFFF'O
+//
+//  log(j1939_pdu)
+//  log("--------------------------------------------")
+//  log(f_decode_CAN_frame_j1939(j1939_pdu))
+//  log("--------------------------------------------")
+//}
+
+testcase tc_dec_message1() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'fefeffffffff00ff'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message2() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'ff0104ffffffffff'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message3() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'c7ffffffffffffff'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message4() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'c7ff02cde001e001'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message5() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'c2ffffffffffffff'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message6() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'c200ffff7d48400c'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message7() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'C3FFFFFFFFFFFFFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message8() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'C3FFFFFFFF7F7FFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message9() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'C0FF00000000FFFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message10() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'C00400FFFFFFFFFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message11() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'DFFFFFFFFFFFFFFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message12() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'E00130303034333030'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message13() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e700'O
+  j1939_pdu := 'D130303034333030'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message14() runs on MTC_CT
+{
+
+  var J1939_PGN j1939_pgn
+  var octetstring j1939_pdu
+
+
+  j1939_pgn := '00e600'O
+  j1939_pdu := 'D1FFFFFFFF00FFFF'O
+
+  log(j1939_pgn, j1939_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message15() runs on MTC_CT
+{
+
+  var octetstring j1939_pgn_and_pdu
+
+
+  j1939_pgn_and_pdu := '00E600E00130303032303036'O
+
+  log(j1939_pgn_and_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn_and_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message16() runs on MTC_CT
+{
+
+  var octetstring j1939_pgn_and_pdu
+
+
+  j1939_pgn_and_pdu := '00E700D130303032303036'O
+
+  log(j1939_pgn_and_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn_and_pdu))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_message17() runs on MTC_CT
+{
+
+  var octetstring j1939_pgn_and_pdu
+
+
+  j1939_pgn_and_pdu := '00E60009D00701FFFF01FF'O
+  j1939_pgn_and_pdu := '00E70009D00701FFFF01FF'O
+  j1939_pgn_and_pdu := '00E600FEF8D007FFFF00FF'O
+  j1939_pgn_and_pdu := '00E600B3FFFFDA5900FFFF'O
+  j1939_pgn_and_pdu := '00E700A82BD3FFBC0B0000'O
+  j1939_pgn_and_pdu := '00E600A82BD300BC0B0000'O
+  j1939_pgn_and_pdu := '00E700A82CD3FFBB0B0000'O
+  j1939_pgn_and_pdu := '00E600A82CD300BB0B0000'O
+  j1939_pgn_and_pdu := '00E700A82DD3FFBB0B0000'O
+  j1939_pgn_and_pdu := '00E600A82DD300BB0B0000'O
+  j1939_pgn_and_pdu := '00E600D1FFFFFFFF00FFFF'O
+  j1939_pgn_and_pdu := '00E700B3DA590B0066696C6520736572766572'O
+  j1939_pgn_and_pdu := '00E60009D00701FFFF00FF'O
+  j1939_pgn_and_pdu := '00E70009D00701FFFF00FF'O
+  j1939_pgn_and_pdu := '00E700B302D72B00746F756368206F72207072657373206B657920746F206D6F766520686572652066726F6D20565420233100'O
+  j1939_pgn_and_pdu := '00E600B3FFFF02D700FFFF'O
+  j1939_pgn_and_pdu := '00E700B3B42D08006E696E6775706578'O
+  j1939_pgn_and_pdu := '00E600B3FFFFB42D00FFFF'O
+  j1939_pgn_and_pdu := '00E700A875D6FFC4DA0000'O
+  j1939_pgn_and_pdu := '00E600A875D600C4DA0000'O
+  //..
+  j1939_pgn_and_pdu := '00E700AD0000ED03FFFFFF'O
+  j1939_pgn_and_pdu := '00E600ADED0300FFFFFFFF'O
+
+  log(j1939_pgn_and_pdu)
+  log("--------------------------------------------")
+  log(f_decode_J1939_message(j1939_pgn_and_pdu))
+  log("--------------------------------------------")
+}
+
+
+
+
+function f_reverse_j1939_name_withoutencoding(in J1939_NAME p_j1939_name) 
+//runs on PTC_isobus_CT 
+return J1939_NAME{
+  var J1939_NAME v_j1939_name_reverse := 
+
+  p_j1939_name[7]& p_j1939_name[6]& p_j1939_name[5]&
+  p_j1939_name[4]& p_j1939_name[3]& p_j1939_name[2]& 
+  p_j1939_name[1]& p_j1939_name[0];
+  return v_j1939_name_reverse
+}
+
+// f_reverse_j1939_name() has the same behaviour as f_reverse_j1939_name_withoutencoding()
+
+function f_reverse_j1939_name(in J1939_NAME p_j1939_name) 
+//runs on PTC_isobus_CT 
+return J1939_NAME{
+  var J1939_NAME v_j1939_name_reverse := f_encode_J1939_name(p_j1939_name)
+
+  return v_j1939_name_reverse
+}
+
+testcase tc_dec_name_1() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E003D0080'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_2() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E008200A0'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_3() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E001D0080'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_4() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E008100A0'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_5() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E00800AA1'O  
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_6() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E193D0B93'O  
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_1() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E003D0080'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_2() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E008200A0'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_3() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E001D0080'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_4() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E008100A0'O
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_5() runs on MTC_CT
+{
+
+  var J1939_NAME j1939_name_reverse, j1939_name
+
+  j1939_name_reverse := '3102032E00800AA1'O  
+
+  j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+  log("j1939 name reverse:-------------------------")
+  log(j1939_name_reverse)
+  log("j1939 name----------------------------------")
+  log(j1939_name)
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(j1939_name))
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+  log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_encode_1() runs on MTC_CT
+{
+
+  var J1939_NAME_RECORD j1939_name_record := {
+    arbitraryAddresssBit := 1,
+    industryGroup := 2,
+    vehicleSystemInstance := 0,
+    vehicleSystem := 0,
+    reserved := 0,
+    function_ := 129,
+    functionInstance := 0,
+    ecuInstance := 0,
+    manufacturerCode := 368,
+    identityNumber := 999
+  }
+
+  log("j1939 name_record --------------------------")
+  log(j1939_name_record)
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(j1939_name_record))
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(f_encode_J1939_name_record(j1939_name_record)))
+  log("--------------------------------------------")
+}
+// result NAME = A00081002E0003E7
+
+testcase tc_dec_name_record_encode_2() runs on MTC_CT
+{
+
+  var J1939_NAME_RECORD j1939_name_record := {
+    arbitraryAddresssBit := 1,
+    industryGroup := 2,
+    vehicleSystemInstance := 0,
+    vehicleSystem := 0,
+    reserved := 0,
+    function_ := 128,
+    functionInstance := 0,
+    ecuInstance := 0,
+    manufacturerCode := 368,
+    identityNumber := 998
+  }
+
+  log("j1939 name_record --------------------------")
+  log(j1939_name_record)
+  log("--------------------------------------------")
+  log(f_encode_J1939_name_record(j1939_name_record))
+  log("--------------------------------------------")
+  log(f_decode_J1939_name_record(f_encode_J1939_name_record(j1939_name_record)))
+  log("--------------------------------------------")
+}
+
+// result NAME = A00080002E0003E6
+
+} with { encode "RAW" } 
+
diff --git a/demo/Isobustest.ttcn b/demo/Isobustest.ttcn
deleted file mode 100644
index 943a8ab..0000000
--- a/demo/Isobustest.ttcn
+++ /dev/null
@@ -1,837 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB 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:               Isobustest.ttcn
-//  Description:        Encoder / Decoder for Isobus message frames
-//
-// Revision R1A
-
-module Isobustest {
-
-import from General_Types all
-import from CanError all
-import from SocketCANtest all
-import from SocketCAN_Types all
-import from SocketCAN_PortType all
-import from SocketCAN_Templates all
-import from Can all
-import from Isobus all
-import from IsobusMessageTypes all
-import from Isobus_Templates all
-import from J1939 all
-
- import from IsobusNMMessageTypes all
-
-type union CAN_ID {
-  OCT4 can_eff, // 29-bit can address
-  OCT2 can_sff, // 11-bit can address
-  RTR  can_rtr, 
-  BIT29 can_err  // up to 29 can error bits
-}
-
-type bitstring BIT29 length(29)
-type enumerated RTR { RTRNULL } 
-
-type union Can_IDs {
-  BIT29 can_eff,  // CAN extended format
-  BIT11 can_sff,  // CAN basic format
-  RTR   can_rtr,  // Remote Transmission Request (RTR), seldom used
-  BIT29 can_err   // CAN Error
-}
-with { variant "" }
-
-type record Can_IDwithType {
-  INT1     cantype,   // can_id >> 29 bit
-  Can_IDs  can_ids    // can_id and4b '1FFFFFFF'O
-}
-with {
-  variant (can_ids) "CROSSTAG( 
-  can_eff, cantype = 4; 
-  can_rtr, cantype = 2; 
-  can_err, cantype = 1; 
-  can_sff, cantype = 0)" 
-}
-
-//component declarations
-type component MTC_CT
-{ 
-}
-
-type component PTC_isobus_CT
-{
-  port SocketCAN_PT                   pt_socketCAN
-  port Isobus_PT                      pt_isobus
-  //variables
-  //timers
-  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
-}
-
-type port Isobus_PT message {
-  out CAN_frame_j1939
-  in  CAN_frame_j1939
-} with { extension "internal" }
-
-type port SyncMasterPort message {
-  out PhaseStartReq
-  in  PhaseEndInd
-} with { extension "internal" }
-
-type port SyncSlavePort message {
-  in   PhaseStartReq
-  out  PhaseEndInd
-} with { extension "internal" }
-
-type record of PTC PTCSet 
-
-
-type component PTC {
-  port SyncSlavePort                  pt_sync
-  port SocketCAN_PT                   pt_socketCAN
-  var  e_Phase                        v_phase := c_firstPhase
-}
-
-
-function f_open_socket2(in SocketCAN_open_socket_type v_socket_type) 
-runs on PTC_isobus_CT 
-return SocketCAN_socket_result {
-
-  var SocketCAN_socket_result v_result  
-  timer t_guard
-  t_guard.start(c_guard)
-
-  var SocketCAN_socket socket
-
-  if(v_socket_type==OPEN_CAN_RAW) {
-    socket := {domain:=PF_CAN, ptype := SOCK_RAW, protocol:= CAN_RAW};
-  } else if (v_socket_type == OPEN_CAN_BCM) {
-    socket := {domain:=PF_CAN, ptype := SOCK_DGRAM, protocol:= CAN_BCM};  
-  }
-  pt_socketCAN.send(socket)  
-
-  // receive response
-  alt {
-    [] pt_socketCAN.receive(
-      a_SocketCAN_socket_result(a_result(SocketCAN_SUCCESS))) -> value v_result
-    {log("SocketCan:Socket opened: ", v_result.id)}
-    [] pt_socketCAN.receive(a_SocketCAN_socket_result(a_result(SocketCAN_ERROR)))
-    {log("Received Opening Socket failed"); setverdict(fail)}
-    [] t_guard.timeout {
-      log("timeout!")
-      setverdict(fail)}
-    [] t_guard.timeout {
-      log("timeout!")
-      setverdict(fail)}
-  }
-  t_guard.stop
-  return v_result
-}
-
-function f_open_raw2()
-runs on PTC_isobus_CT 
-return SocketCAN_open_raw_result {
-  var SocketCAN_socketid v_socket_id
-  v_socket_id := f_open_socket2(OPEN_CAN_RAW).id
-  var SocketCAN_ifr v_ifr
-  v_ifr := f_ioctl_get_if_index2(v_socket_id).ifr
-  var SocketCAN_bind_result v_bind_result
-  v_bind_result := f_bind2(v_socket_id, v_ifr.if_index)
-
-  var SocketCAN_open_raw_result v_result
-  v_result := {ifr := v_ifr, socket_id := v_socket_id}
-
-  return v_result
-}
-
-function f_ioctl_get_if_index2(in SocketCAN_socketid p_socket_id) 
-runs on PTC_isobus_CT 
-return SocketCAN_ioctl_result {
-  var SocketCAN_ioctl_result v_result   
-  timer t_guard
-  t_guard.start(c_guard)
-
-  pt_socketCAN.send(SocketCAN_ioctl:{id:= p_socket_id, ifu := omit});
-  // receive response
-  alt {
-    [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_SUCCESS))) -> value v_result
-    {log("Retrieved interface index", v_result.ifr.if_index)}
-    [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_ERROR)))
-    {log("Retrieving interface index failed", p_socket_id); setverdict(fail)}       
-    [] t_guard.timeout {
-      log("timeout!")
-      setverdict(fail)
-    }
-  } 
-  return v_result
-}
-
-function f_bind2(in SocketCAN_socketid p_socket_id,
-  in SocketCAN_if_index p_if_index) 
-runs on PTC_isobus_CT 
-return SocketCAN_bind_result {
-  var SocketCAN_bind_result v_result
-  timer t_guard
-  t_guard.start(c_guard)
-
-  pt_socketCAN.send(SocketCAN_bind:{id:= p_socket_id, bindu := {raw := {if_index:= p_if_index}}});
-  alt {
-    [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_SUCCESS))) -> value v_result
-    {log("Binding socket", p_socket_id)}
-    [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_ERROR))) {}
-    [] t_guard.timeout {
-      log("timeout!")
-      setverdict(fail)
-    }
-  }  
-  return v_result
-}
-
-function f_close_socket2 (in SocketCAN_socketid p_socket_id) 
-runs on PTC_isobus_CT {
-  pt_socketCAN.send(SocketCAN_close:{id:= p_socket_id});
-}
-
-function f_behaviour_isobus(in PTC1_CT v_ptc1)  runs on PTC_isobus_CT
-{
-
-  map(self:pt_socketCAN, system:pt_socketCAN)
-  connect(v_ptc1:pt_isobus, self:pt_isobus)
-
-  var SocketCAN_socketid v_socket_id
-  var SocketCAN_ifr v_ifr
-  var SocketCAN_send_data_ifu v_ifu
-
-  var SocketCAN_open_raw_result res
-  res := f_open_raw2();
-  v_socket_id := res.socket_id
-  v_ifr := res.ifr
-  v_ifu.if_name :=  v_ifr.if_name 
-
-  log("socket open(): ", res)
-
-  var boolean condition3 := true
-  //periodic reception
-
-  while (condition3)
-  {
-    //var SocketCAN_socket_result v_result_socketcan
-    var SocketCAN_receive_CAN_or_CAN_FD_frame v_result_socketcan
-    //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)
-        // 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)
-          pt_isobus.send(v_CAN_frame_j1939) to v_ptc1
-        } else {
-          setverdict(inconc, "reception of canfd frame not expected") 
-        }
-      }
-    }//endalt
-  }
-  f_close_socket2(v_socket_id)
-  disconnect(self:pt_isobus, v_ptc1:pt_isobus)
-  unmap(self:pt_socketCAN, system:pt_socketCAN)
-  setverdict(pass)
-}//endfunction
-
-
-function  f_behaviour1_sync()  runs on PTC1_CT
-{
-
-  var boolean condition1 := true
-  var CAN_frame_j1939 v_can_frame_j1939
-  //periodic reception
-
-  while (condition1)
-  {
-    //T1.start;
-
-    alt 
-    {
-
-      /*  []syncport.receive("halt") {
-      condition1:=false  } */
-
-      []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_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);
-                  // changed by MJ
-                  
-                  //receivedData := receivedUnacknowledgedData
-                  log ("received multipart frame",  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 := 6, 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))))
-  log("--------------------------------------------")
-
-  template CAN_frame_j1939 t_CAN_frame_j1939_2 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { requestForAddressClaimed := {pgn := 123}} }
-  log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_2)))
-  log("--------------------------------------------")
-  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 := 0, 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 := 6, res := '0'B, dp := '1'B, pf := 'E6'O , ps := 'FD'O, sa := '00'O }, can_pdu := { commandedAddress := {
-        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)))
-  log("--------------------------------------------")
-  log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_6))))
-  log("--------------------------------------------")
-}
-
-testcase tc_encdec_vt2ecu_vtStatusReq() runs on MTC_CT
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
-    {vt2ecu := {vtStatusReq :=
-        { vtfunction := 254, 
-          sourceAddressOfActiveWorkingSetMaster := '11'O,
-          objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := '2233'O,
-          objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet := '4455'O,
-          vtBusyCodes := vtIsBusyExecutingACommand,
-          vtFunctionCode := '66'O}}}}
-  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_encdec_ecu2vt_getMemoryReq() runs on MTC_CT
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
-    {ecu2vt := {getMemoryReq :=
-        { vtfunction := 194, 
-          reserved2 := 'FF'O,
-          memoryRequired := 1234567,
-          reserved7 := 'FF'O,
-          reserved8 := 'FF'O}}}}
-  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_encdec_ecu2vt_getMemoryReq_with_templateI() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
-    {ecu2vt := {getMemoryReq := t_GetMemoryReq(1234567)}}}
-  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_encdec_ecu2vt_getMemoryReq_with_template_II() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
-    t_GetMemoryReq_pdu(1234567)}
-  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_encdec_networkMessage_N_SP_Response_pdu_with_template() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  t_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O , 
-  t_N_SP_Response_pdu(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O}))
-  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_encdec_networkMessage_N_SP_Response_with_template() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  t_network_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O , 
-  {n_SP_Response := t_N_SP_Response(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O})})
-  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_encdec_N_SP_Response_with_template() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  t_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O , 
-  {networkMessage := {n_SP_Response := t_N_SP_Response(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O})}})
-  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_encdec_ecu2vt_workingSetMaintenanceReq() runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, 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_encdec_etp_dt () runs on MTC_CT // using a template
-{
-  template CAN_frame_j1939 t_CAN_frame_j1939 :=  { can_j1939 := { prio := 0, res := '1'B, dp := '1'B, pf := 'FE'O, ps := '00'O, sa := 'F8'O }, 
-        can_pdu := { etp_dt := { seq_no := 105, data := '6C652073657276'O } } }
-  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
-{
-
-  var octetstring j1939_pdu
-  j1939_pdu := '98EAFFFE00EE00'O
-
-  log(j1939_pdu)
-  log("--------------------------------------------")
-  log(f_decode_CAN_frame_j1939(j1939_pdu))
-  log("--------------------------------------------")
-}
-
-
-testcase tc_dec_largemessage() runs on MTC_CT
-{
-
-  var octetstring j1939_pdu
-//j1939_pdu := '18EAFFFE00EE00'O                
-//j1939_pdu := '18EEFFF83102032E003D0080'O
-//j1939_pdu := '18EEFFF73102032E008200A0'O
-//j1939_pdu := '18EAF8F8EBFE00'O  
-j1939_pdu := '18ECF8F810160004FFEBFE00'O
-
-// j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
-// j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00F82A66696C65207365727665722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00262A6661726D20646973706C61792A3139373136392A2D2A'O
-// j1939_pdu := '03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A'O
-// j1939_pdu := '01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '02FE00FD016661726D20646973706C617920312E33372E31362E3733352A'O
-// j1939_pdu := '02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A'O
-// j1939_pdu := '02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A'O
-// j1939_pdu := '9CFE0DF8FE01FFFFFFFFFFFFFF'O
-
-  log(j1939_pdu)
-  log("--------------------------------------------")
-  log(f_decode_CAN_frame_j1939(j1939_pdu))
-  log("--------------------------------------------")
-}
-
-
-import from IsobusVTMessageTypes all
-
-testcase tc_decode_VT2ECU() runs on MTC_CT
-{
-
-  var octetstring j1939_vt_pdu
-  j1939_vt_pdu := 'c7ff02cde001e001'O
-  j1939_vt_pdu := 'c200ffff7d48400c'O
-  j1939_vt_pdu := 'c3ffffffff7f7fff'O
-  j1939_vt_pdu := 'c00400ffffffffff'O
-  j1939_vt_pdu := 'e00130303034333030'O
-  j1939_vt_pdu := 'd1ffffffff00ffff'O
-  j1939_vt_pdu := '09d00701ffff01ff'O
-  j1939_vt_pdu := 'b3ffffda5900ffff'O
-  j1939_vt_pdu := 'a82bd300bc0b0000'O
-  j1939_vt_pdu := 'a82cd300bb0b0000'O
-  j1939_vt_pdu := 'a82dd300bb0b0000'O
-  j1939_vt_pdu := 'b3ffff02d700ffff'O
-  j1939_vt_pdu := 'a875d600c4da0000'O
-  j1939_vt_pdu := 'a876d600c2da0000'O
-  j1939_vt_pdu := 'a877d600ffff0000'O
-  j1939_vt_pdu := 'a878d600ffff0000'O
-  j1939_vt_pdu := 'a879d600ffff0000'O
-  j1939_vt_pdu := 'a87ad600ffff0000'O
-  j1939_vt_pdu := 'a87bd600ffff0000'O
-  j1939_vt_pdu := 'a87cd600ffff0000'O
-  j1939_vt_pdu := 'a87dd600ffff0000'O
-  j1939_vt_pdu := 'a87ed600ffff0000'O
-  //j1939_vt_pdu := 'ade90300ffffffff'O
-  //j1939_vt_pdu := '09d00700ffff00ff'O
-  
-  log(j1939_vt_pdu)
-  log("--------------------------------------------")
-  log(decode_VT2ECU(j1939_vt_pdu))
-  log("--------------------------------------------")
-}
-
-//test case declarations
-testcase tc_Example001()  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_behaviour1_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
-
-
-//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 
-{
-
-
-  execute(tc_Example001())
-
-
-}//endcontrol
-
-} with { encode "RAW" } 
-
diff --git a/demo/J1939.cfg b/demo/J1939.cfg
index 4825fd6..290e64d 100644
--- a/demo/J1939.cfg
+++ b/demo/J1939.cfg
@@ -28,5 +28,7 @@
 
 [EXECUTE]
 //CAN J1939 tests
-SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame
-SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame_parallel
+SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message
+SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message_parallel
+J1939_Isobus_test.tc_can_j1939_IsobusVtEcuSimulation
+J1939_Isobus_test.tc_can_j1939_IsobusEcuSimulation
diff --git a/demo/J1939.ttcn b/demo/J1939.ttcn
deleted file mode 100644
index 404728b..0000000
--- a/demo/J1939.ttcn
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v2.0
-* which accompanies this distribution, and is available at
-* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
-module J1939 {
-import from General_Types all;
-
-type record CAN_identifier {
-BIT3 priority,
-BIT1 reseved, 
-BIT1 datapage, 
-OCT1 pduformat,
-OCT1 destinationAddress,
-OCT1 sourceAddress
-}
-
-type OCT3 PGN
-
-}
diff --git a/demo/J1939_Isobus_test.ttcn b/demo/J1939_Isobus_test.ttcn
new file mode 100644
index 0000000..d1c4073
--- /dev/null
+++ b/demo/J1939_Isobus_test.ttcn
@@ -0,0 +1,230 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+//  File:               SocketCAN_J1939_test.ttcn
+//  Description:        SocketCAN J1939 testcases for J1939 messages
+//
+
+
+
+module J1939_Isobus_test
+{
+import from J1939 all
+import from Isobus_test all
+
+testcase tc_can_j1939_IsobusVtEcuSimulation() runs on MTC {
+
+  // before running this test cases start the j1939 address claim deamons via commandline
+  /*
+  
+  j1939acd -r 100,80-120 -c /tmp/A00080002E0003E6.jacd A00080002E0003E6 vcan0
+  j1939acd -r 100,80-120 -c /tmp/A00081002E0003E7.jacd A00081002E0003E7 vcan0
+  */
+
+  var PTCAdapter v_ptc_J1939VTAdapter                                 := PTCAdapter.create("PTC1_ptc_j1939VTAdapter") alive
+  var PTCAdapter v_ptc_J1939ECUAdapter                                := PTCAdapter.create("PTC2_ptc_j1939ECUAdapter") alive
+  var PTC_Isobus_VT_CT  v_ptc_J1939VTApplication                      := PTC_Isobus_VT_CT.create("PTC1_ptc_j1939VTApplication") alive
+  var PTC_Isobus_VT_VTSTATUSCycleSend_CT v_ptc_J1939VT_VTStatusCycleSend      := PTC_Isobus_VT_VTSTATUSCycleSend_CT.create("PTC_Isobus_VT_VTSTATUSCycleSend") alive
+  var PTC_Isobus_ECU_CT v_ptc_J1939ECUApplication                     := PTC_Isobus_ECU_CT.create("PTC2_ptc_j1939ECUApplication") alive
+  var PTC_Isobus_ECU_VTSTATUSCycleReceive_CT v_ptc_J1939_VTStatusCycleReceive  := PTC_Isobus_ECU_VTSTATUSCycleReceive_CT.create("PTC_Isobus_VT_VTSTATUSCycleReceive") alive
+  var PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend := PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT.  create( "PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend" ) alive;
+
+
+  f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939VTAdapter}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939ECUAdapter}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_VT_CT:=v_ptc_J1939VTApplication}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_VT_VTSTATUSCycleSend_CT:=v_ptc_J1939VT_VTStatusCycleSend}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_CT:=v_ptc_J1939ECUApplication}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_VTSTATUSCycleReceive_CT:=v_ptc_J1939_VTStatusCycleReceive}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT:=v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend}, v_PTCSet);
+
+  connect(mtc:pt_sync, v_ptc_J1939VTAdapter:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939ECUAdapter:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939VTApplication:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939VT_VTStatusCycleSend:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939ECUApplication:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939_VTStatusCycleReceive:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_sync)
+
+
+  connect(v_ptc_J1939VTAdapter:pt_j1939PDU,                                            v_ptc_J1939VTApplication:pt_j1939PDU)
+  connect(v_ptc_J1939VT_VTStatusCycleSend:pt_VTStatusTick,                             v_ptc_J1939VTApplication:pt_VTStatusTick)
+  connect(v_ptc_J1939ECUAdapter:pt_j1939PDU,                                           v_ptc_J1939ECUApplication:pt_j1939PDU)
+  connect(v_ptc_J1939ECUApplication:pt_VTStatusTick,                                   v_ptc_J1939_VTStatusCycleReceive:pt_VTStatusTick)
+  connect(v_ptc_J1939_VTStatusCycleReceive:pt_WorkingSetMaintenaceOnOff,               v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenaceOnOff)
+  connect(v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenance,  v_ptc_J1939ECUApplication:pt_WorkingSetMaintenance)
+
+
+
+  const integer     c_send_prio        := 2
+  const J1939_NAME  c_name_VT          := 'A00080002E0003E6'O
+  const J1939_NAME  c_name_ECU         := 'A00081002E0003E7'O  
+
+  v_ptc_J1939VTAdapter.start(f_ptc_J1939Adapter(
+      e_testbody1, 
+      c_send_prio,
+      c_name_VT)) /* name source */
+
+  v_ptc_J1939ECUAdapter.start(f_ptc_J1939Adapter(
+      e_testbody1, 
+      c_send_prio,
+      c_name_ECU ))/* name source */
+
+  v_ptc_J1939VTApplication.start(f_ptc_J1939VTApplication(e_testbody1));
+  v_ptc_J1939ECUApplication.start(f_ptc_J1939ECUApplication(e_testbody1));
+
+  v_ptc_J1939VT_VTStatusCycleSend.start(f_ptc_J1939VTStatusCycleSend(e_testbody1));
+
+  v_ptc_J1939_VTStatusCycleReceive.start(f_ptc_J1939_VTStatusCycleReceive(e_testbody1));
+
+  v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend.start(J1939_ECU_WorkingSetMaintenanceIndCycleSend(e_testbody1))
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  f_haltAllComponents()
+  f_awaitAllComponentsHalt()
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(v_ptc_J1939VTAdapter:pt_j1939PDU,                v_ptc_J1939VTApplication:pt_j1939PDU)
+  disconnect(v_ptc_J1939ECUAdapter:pt_j1939PDU,               v_ptc_J1939ECUApplication:pt_j1939PDU)
+
+  all component.kill;      
+}
+
+testcase tc_can_j1939_IsobusVtSimulation() runs on MTC {
+
+  // before running this test cases start the j1939 address claim deamons via commandline
+  /*
+  j1939acd -r 100,80-120 -c /tmp/A00080002E0003E6.jacd A00080002E0003E6 vcan0
+  */
+
+  var PTCAdapter v_ptc_J1939VTAdapter                                 := PTCAdapter.create("PTC1_ptc_j1939VTAdapter") alive
+  var PTC_Isobus_VT_CT  v_ptc_J1939VTApplication                      := PTC_Isobus_VT_CT.create("PTC1_ptc_j1939VTApplication") alive
+  var PTC_Isobus_VT_VTSTATUSCycleSend_CT v_ptc_J1939VT_VTStatusCycleSend      := PTC_Isobus_VT_VTSTATUSCycleSend_CT.create("PTC_Isobus_VT_VTSTATUSCycleSend") alive
+
+  f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939VTAdapter}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_VT_CT:=v_ptc_J1939VTApplication}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_VT_VTSTATUSCycleSend_CT:=v_ptc_J1939VT_VTStatusCycleSend}, v_PTCSet);
+
+  connect(mtc:pt_sync, v_ptc_J1939VTAdapter:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939VTApplication:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939VT_VTStatusCycleSend:pt_sync)
+
+
+  connect(v_ptc_J1939VTAdapter:pt_j1939PDU,                                            v_ptc_J1939VTApplication:pt_j1939PDU)
+  connect(v_ptc_J1939VT_VTStatusCycleSend:pt_VTStatusTick,                             v_ptc_J1939VTApplication:pt_VTStatusTick)
+
+  const integer     c_send_prio        := 2
+  const J1939_NAME  c_name_VT          := 'A00080002E0003E6'O
+
+  v_ptc_J1939VTAdapter.start(f_ptc_J1939Adapter(
+      e_testbody1, 
+      c_send_prio,
+      c_name_VT)) /* name source */
+
+  v_ptc_J1939VTApplication.start(f_ptc_J1939VTApplication(e_testbody1));
+
+  v_ptc_J1939VT_VTStatusCycleSend.start(f_ptc_J1939VTStatusCycleSend(e_testbody1));
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  f_haltAllComponents()
+  f_awaitAllComponentsHalt()
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(v_ptc_J1939VTAdapter:pt_j1939PDU,                v_ptc_J1939VTApplication:pt_j1939PDU)
+
+  all component.kill;      
+}
+
+testcase tc_can_j1939_IsobusEcuSimulation() runs on MTC {
+
+  // before running this test cases start the j1939 address claim deamons via commandline
+  /*
+  j1939acd -r 100,80-120 -c /tmp/A00081002E0003E7.jacd A00081002E0003E7 vcan0
+  */
+
+  var PTCAdapter v_ptc_J1939ECUAdapter                                := PTCAdapter.create("PTC2_ptc_j1939ECUAdapter") alive
+  var PTC_Isobus_ECU_CT v_ptc_J1939ECUApplication                     := PTC_Isobus_ECU_CT.create("PTC2_ptc_j1939ECUApplication") alive
+  var PTC_Isobus_ECU_VTSTATUSCycleReceive_CT v_ptc_J1939_VTStatusCycleReceive  := PTC_Isobus_ECU_VTSTATUSCycleReceive_CT.create("PTC_Isobus_VT_VTSTATUSCycleReceive") alive
+  var PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend := PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT.  create( "PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend" ) alive;
+
+  f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939ECUAdapter}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_CT:=v_ptc_J1939ECUApplication}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_VTSTATUSCycleReceive_CT:=v_ptc_J1939_VTStatusCycleReceive}, v_PTCSet);
+  f_addSyncSlaveSet({ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT:=v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend}, v_PTCSet);
+
+  connect(mtc:pt_sync, v_ptc_J1939ECUAdapter:pt_sync)
+
+  connect(mtc:pt_sync, v_ptc_J1939ECUApplication:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939_VTStatusCycleReceive:pt_sync)
+  connect(mtc:pt_sync, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_sync)
+
+
+  connect(v_ptc_J1939ECUAdapter:pt_j1939PDU,                                           v_ptc_J1939ECUApplication:pt_j1939PDU)
+  connect(v_ptc_J1939ECUApplication:pt_VTStatusTick,                                   v_ptc_J1939_VTStatusCycleReceive:pt_VTStatusTick)
+  connect(v_ptc_J1939_VTStatusCycleReceive:pt_WorkingSetMaintenaceOnOff,               v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenaceOnOff)
+  connect(v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenance,  v_ptc_J1939ECUApplication:pt_WorkingSetMaintenance)
+
+
+
+  const integer     c_send_prio        := 2
+  const J1939_NAME  c_name_ECU         := 'A00081002E0003E7'O  
+
+  v_ptc_J1939ECUAdapter.start(f_ptc_J1939Adapter(
+      e_testbody1, 
+      c_send_prio,
+      c_name_ECU ))/* name source */
+
+  v_ptc_J1939ECUApplication.start(f_ptc_J1939ECUApplication(e_testbody1));
+
+  v_ptc_J1939_VTStatusCycleReceive.start(f_ptc_J1939_VTStatusCycleReceive(e_testbody1));
+
+  v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend.start(J1939_ECU_WorkingSetMaintenanceIndCycleSend(e_testbody1))
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  f_haltAllComponents()
+  f_awaitAllComponentsHalt()
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(v_ptc_J1939ECUAdapter:pt_j1939PDU,               v_ptc_J1939ECUApplication:pt_j1939PDU)
+
+  all component.kill;      
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+// Insert control part here if applicable!
+
+}  // end of module
diff --git a/demo/J1939test.ttcn b/demo/J1939test.ttcn
index a0e4d19..7db1488 100644
--- a/demo/J1939test.ttcn
+++ b/demo/J1939test.ttcn
@@ -20,7 +20,7 @@
 import from SocketCAN_Templates all;
 import from J1939 all;
 
-const float c_guard := 10.0
+const float c_guard := 50.0
 
 type enumerated SocketCAN_open_socket_type
 { 
@@ -83,7 +83,6 @@
 
 type record of PTC PTCSet 
 
-
 type component PTC {
   port SyncSlavePort                  pt_sync
   port SocketCAN_PT                   pt_socketCAN
@@ -446,16 +445,65 @@
         p_peer_addr,
         p_peer_name,
         p_j1939_pdu__expected)) -> value v_result
-    {log("SocketCan:Expected frame received", v_result)}
+    {
+      log("SocketCan:Expected frame received", v_result)
+      setverdict(pass)      
+    }
     [] pt_socketCAN.receive(SocketCAN_receive_j1939_message:?) -> value v_result
-    {log("SocketCan:Unexpected frame received!", v_result)
-      setverdict(fail)}
+    {
+      log("SocketCan:Unexpected frame received!", v_result)
+    }
     [] t_guard.timeout {
       log("timeout!")
       setverdict(fail)}
   }
 }
 
+function f_receive_messages_until_expected_message_got_j1939_data(
+  in SocketCAN_socketid p_socket_id,
+  template SocketCAN_ifr      p_ifr,
+  template J1939_PGN          p_peer_pgn,
+  template J1939_ADDR         p_peer_addr,
+  template J1939_NAME         p_peer_name,
+  template SocketCAN_J1939_PDU p_j1939_pdu__expected)
+runs on PTC { 
+  var SocketCAN_receive_j1939_message v_result
+
+  timer t_guard
+  t_guard.start(c_guard)
+  var boolean exitloop := true
+
+  while (exitloop == true)
+  {
+    // receive frame or timeout
+    log("SocketCan:Waiting for frame")
+  // receive frame or timeout
+  alt {
+    [] pt_socketCAN.receive(a_SocketCAN_receive_j1939_message(
+        p_socket_id,
+        p_ifr,
+        p_peer_pgn,
+        p_peer_addr,
+        p_peer_name,
+        p_j1939_pdu__expected)) -> value v_result
+    {
+      log("SocketCan:Expected frame received", v_result)
+      exitloop := false
+      setverdict(pass)
+    }
+//    [] pt_socketCAN.receive(SocketCAN_receive_j1939_message:?) -> value v_result
+//    {
+//      log("SocketCan:Unexpected frame received!", v_result)
+//    }
+    [] t_guard.timeout 
+    {
+      log("timeout!")
+      exitloop := false
+      setverdict(fail)
+      }
+  }
+ }
+}
 
 function f_setsockopt(in SocketCAN_socketid p_socket_id,
   in SocketCAN_setsockopt_commandu p_command)
@@ -523,13 +571,12 @@
     p_j1939_addr_source)
   var SocketCAN_setsockopt_result            v_setsockopt_result
   v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
-  v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
   f_sendPhaseEndInd()
 
   alt_awaitPhaseStartReq(p_phase)
   var SocketCAN_j1939_send_data_to_result send_data_to_result
   var J1939_hdr v_j1939_destination := {
-    //name := p_j1939_name_source, 
+    //name := p_j1939_name_destination, 
     pgn := p_j1939_pgn_destination, 
     addr:= p_j1939_addr_destination}
 
@@ -547,6 +594,105 @@
   f_sendPhaseEndInd()
 }
 
+function f_ptc_J1939SendToNameInitiator(
+  in e_Phase             p_phase,
+  in J1939_Priority      p_send_prio,
+  in J1939_NAME          p_j1939_name_source,
+  in J1939_PGN           p_j1939_pgn_destination,
+  in J1939_NAME          p_j1939_name_destination,
+  in SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_source, 
+    J1939_NO_PGN,  /* p_j1939_pgn_source */
+    J1939_NO_ADDR  /* p_j1939_addr_source */)
+  var SocketCAN_setsockopt_result            v_setsockopt_result
+  v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(p_phase)
+  var SocketCAN_j1939_send_data_to_result send_data_to_result
+  var J1939_hdr v_j1939_destination := {
+    name := p_j1939_name_destination, 
+    pgn := p_j1939_pgn_destination 
+    //addr:= p_j1939_addr_destination
+    }
+
+  send_data_to_result := f_j1939_send_data_to(
+    v_socket_id, 
+    v_ifr.if_index,
+    v_j1939_destination,
+    p_pdu_send)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(e_close_socket)
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)
+  setverdict(pass)
+  f_sendPhaseEndInd()
+}
+
+function f_ptc_J1939SendToGlobalAddressInitiator(
+  in e_Phase             p_phase,
+  in J1939_Priority      p_send_prio,
+  in J1939_NAME          p_j1939_name_source,
+  in J1939_PGN           p_j1939_pgn_destination,
+  in SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_source, 
+    J1939_NO_PGN,  /* p_j1939_pgn_source */
+    J1939_NO_ADDR  /* p_j1939_addr_source */)
+  var SocketCAN_setsockopt_result            v_setsockopt_result
+  v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+  f_sendPhaseEndInd()
+  const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable} 
+
+  // configure broadcast:
+  v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+  
+
+  alt_awaitPhaseStartReq(p_phase)
+  var SocketCAN_j1939_send_data_to_result send_data_to_result
+  var J1939_hdr v_j1939_destination := {
+    //name := p_j1939_name_destination, 
+    pgn := p_j1939_pgn_destination, 
+    addr:= J1939_NO_ADDR /*addr_destination */
+    }
+
+  send_data_to_result := f_j1939_send_data_to(
+    v_socket_id, 
+    v_ifr.if_index,
+    v_j1939_destination,
+    p_pdu_send)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(e_close_socket)
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)
+  setverdict(pass)
+  f_sendPhaseEndInd()
+}
 
 function f_ptc_J1939SendInitiatorWithConnect(
   in e_Phase p_phase,
@@ -634,6 +780,136 @@
   f_sendPhaseEndInd()
 }
 
+function f_ptc_J1939FrameReceiverByName(
+  in e_Phase p_phase,
+  in J1939_NAME               p_j1939_name_local,
+  template J1939_PGN          p_pgn_local,
+  template J1939_ADDR         p_peer_addr,
+  template J1939_NAME         p_peer_name, 
+  template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_local,
+    J1939_NO_PGN,
+    J1939_NO_ADDR)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(p_phase)
+  f_receive_j1939_data(
+    v_socket_id, 
+    v_ifr,
+    p_pgn_local,
+    p_peer_addr,
+    p_peer_name,
+    p_j1939_pdu_expected)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(e_close_socket)
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)  
+  setverdict(pass)
+  f_sendPhaseEndInd()
+}
+
+
+function f_ptc_J1939FrameBroadcastReceiver(
+  in e_Phase p_phase,
+  in J1939_NAME               p_j1939_name_local,
+  template J1939_PGN          p_pgn_local,
+  template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_local,
+    J1939_NO_PGN,
+    J1939_NO_ADDR)
+  var SocketCAN_setsockopt_result            v_setsockopt_result
+  const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable} 
+
+  // configure broadcast:
+  v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+  
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(p_phase)
+  f_receive_j1939_data(
+    v_socket_id, 
+    v_ifr,
+    p_pgn_local,
+    ?, /* p_peer_addr */
+    ?, /* p_peer_name */
+    p_j1939_pdu_expected)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(e_close_socket)
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)  
+  setverdict(pass)
+  f_sendPhaseEndInd()
+}
+
+function f_ptc_J1939FrameReceiverUntilExpectedMessage(
+  in e_Phase p_phase,
+  in J1939_NAME               p_j1939_name_source,
+  in J1939_PGN                p_j1939_pgn_source,
+  in J1939_ADDR               p_j1939_addr_source,
+  template J1939_PGN          p_peer_pgn,
+  template J1939_ADDR         p_peer_addr,
+  template J1939_NAME         p_peer_name, 
+  template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+  map(self:pt_socketCAN, system:pt_socketCAN)
+  var SocketCAN_socketid v_socket_id
+  var SocketCAN_ifr v_ifr
+
+  alt_awaitPhaseStartReq(e_open_socket)
+  var SocketCAN_open_j1939_result res
+  res := f_open_j1939()
+  v_socket_id := res.socket_id
+  v_ifr := res.ifr
+  var SocketCAN_bind_result v_bind_result
+  v_bind_result := f_bind(v_socket_id,
+    v_ifr.if_index, 
+    p_j1939_name_source,
+    p_j1939_pgn_source,
+    p_j1939_addr_source)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(p_phase)
+  f_receive_messages_until_expected_message_got_j1939_data(
+    v_socket_id, 
+    v_ifr,
+    p_peer_pgn,
+    p_peer_addr,
+    p_peer_name,
+    p_j1939_pdu_expected)
+  f_sendPhaseEndInd()
+
+  alt_awaitPhaseStartReq(e_close_socket)
+  f_close_socket (v_socket_id)
+  unmap(self:pt_socketCAN, system:pt_socketCAN)  
+  setverdict(pass)
+  f_sendPhaseEndInd()
+}
+
 function f_ptc_J1939SendInitiatorDynamic(in e_Phase p_phase,
   in J1939_NAME p_j1939_name_source,  
   in J1939_NAME p_j1939_name_destination,
@@ -664,7 +940,7 @@
   var SocketCAN_setsockopt_result            v_setsockopt_result
   const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable} 
 
-  // configure filters:
+  // configure broadcast:
   v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
   // configure filters:
   const J1939_filter c_j1939_filter0 := {
@@ -870,16 +1146,17 @@
     pgn := J1939_PGN_ADDRESS_CLAIMED, 
     addr:= J1939_NO_ADDR}
 
-  var J1939_NAME v_j1939_name_source_reverse := 
-  p_j1939_name_source[7]& p_j1939_name_source[6]& p_j1939_name_source[5]&
-  p_j1939_name_source[4]& p_j1939_name_source[3]& p_j1939_name_source[2]& 
-  p_j1939_name_source[1]& p_j1939_name_source[0]
+  var J1939_NAME v_j1939_name_encoded := f_encode_J1939_name(p_j1939_name_source)
   
+//  p_j1939_name_source[7]& p_j1939_name_source[6]& p_j1939_name_source[5]&
+//  p_j1939_name_source[4]& p_j1939_name_source[3]& p_j1939_name_source[2]& 
+//  p_j1939_name_source[1]& p_j1939_name_source[0]
+
   send_data_to_result := f_j1939_send_data_to(
     v_socket_id, 
     v_ifr.if_index,
     v_j1939_destination,
-    v_j1939_name_source_reverse /*p_pdu_send*/)
+    v_j1939_name_encoded /*p_pdu_send*/)
 
   f_sendPhaseEndInd()
 
@@ -890,7 +1167,7 @@
   f_sendPhaseEndInd()
 }
 
-function f_j1939_address_claim2(in e_Phase p_phase, 
+function f_j1939_request_for_address_claimed(in e_Phase p_phase, 
   in   J1939_NAME          p_j1939_name_source, 
   in   SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
   map(self:pt_socketCAN, system:pt_socketCAN)
@@ -948,7 +1225,7 @@
     name := omit, 
     pgn := J1939_PGN_REQUEST, 
     addr:= J1939_NO_ADDR}
-  
+
   send_data_to_result := f_j1939_send_data_to(
     v_socket_id, 
     v_ifr.if_index,
diff --git a/demo/Makefile b/demo/Makefile
index b47299d..aea14be 100644
--- a/demo/Makefile
+++ b/demo/Makefile
@@ -86,13 +86,14 @@
 TTCN3_MODULES = ../src/Bcm.ttcn ../src/Can.ttcn ../src/CanError.ttcn ../src/General_Types.ttcn ../src/Raw.ttcn \
 SocketCAN_BCM_test.ttcn ../src/SocketCAN_PortType.ttcn SocketCAN_RAW_test.ttcn ../src/SocketCAN_Templates.ttcn \
 ../src/SocketCAN_Types.ttcn ../src/J1939.ttcn \
-SocketCANtest.ttcn Isobus.ttcn Isobustest.ttcn IsobusMessageTypes.ttcn \
-Isobus_Templates.ttcn IsobusNMMessageTypes.ttcn IsobusCMMessageTypes.ttcn IsobusVTMessageTypes.ttcn \
+SocketCANtest.ttcn Isobus.ttcn IsobusMessageTypes.ttcn \
+IsobusVT_Templates.ttcn IsobusNMMessageTypes.ttcn IsobusCMMessageTypes.ttcn IsobusVTMessageTypes.ttcn \
 Isotp.ttcn Isotptest.ttcn \
 CAN_matrix_general_types.ttcn  CAN_matrix_test.ttcn  CAN_matrix.ttcn CAN_matrix_messages.ttcn CANFD_matrix_messages.ttcn \
 CAN_matrix_signals.ttcn CAN_matrix_templates.ttcn \
 UnifiedDiagnosticServices.ttcn UnifiedDiagnosticServicestest.ttcn UnifiedDiagnosticServices_Template.ttcn \
-J1939test.ttcn SocketCAN_J1939_test.ttcn
+J1939test.ttcn SocketCAN_J1939_test.ttcn Isobus_test.ttcn J1939_Isobus_test.ttcn \
+Isobus_test_encoder.ttcn
 
 # ASN.1 modules of this project:
 ASN1_MODULES =
@@ -102,13 +103,14 @@
 GENERATED_SOURCES = Bcm.cc Can.cc CanError.cc General_Types.cc Raw.cc \
 SocketCAN_BCM_test.cc SocketCAN_PortType.cc SocketCAN_RAW_test.cc SocketCAN_Templates.cc \
 SocketCAN_Types.cc J1939.cc \
-SocketCANtest.cc Isobus.cc Isobustest.cc IsobusMessageTypes.cc \
-Isobus_Templates.cc IsobusNMMessageTypes.cc IsobusCMMessageTypes.cc IsobusVTMessageTypes.cc \
+SocketCANtest.cc Isobus.cc IsobusMessageTypes.cc \
+IsobusVT_Templates.cc IsobusNMMessageTypes.cc IsobusCMMessageTypes.cc IsobusVTMessageTypes.cc \
 Isotp.cc Isotptest.cc \
 CAN_matrix_general_types.cc  CAN_matrix_test.cc  CAN_matrix.cc CAN_matrix_messages.cc CANFD_matrix_messages.cc \
 CAN_matrix_signals.cc CAN_matrix_templates.cc \
 UnifiedDiagnosticServices.cc UnifiedDiagnosticServicestest.cc UnifiedDiagnosticServices_Template.cc \
-J1939test.cc SocketCAN_J1939_test.cc
+J1939test.cc SocketCAN_J1939_test.cc Isobus_test.cc J1939_Isobus_test.cc \
+Isobustest_test_encoder.cc
 
 GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
 
diff --git a/demo/SocketCAN_J1939_test.ttcn b/demo/SocketCAN_J1939_test.ttcn
index 64b8da4..6dd2bee 100644
--- a/demo/SocketCAN_J1939_test.ttcn
+++ b/demo/SocketCAN_J1939_test.ttcn
@@ -62,7 +62,7 @@
   return v_pdu
 }
 
-testcase tc_can_j1939_send_and_receive_can_frame() runs on MTC {
+testcase tc_can_j1939_send_and_receive_message() runs on MTC {
   var PTC v_ptc_j1939SendInitiator := PTC.create("PTC1_ptc_j1939SendInitiator") alive
   var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
 
@@ -80,8 +80,18 @@
 
 
   var octetstring v_pdu_send := ''O
+
+  // According to ETP specification messages of 117440505 Bytes are possible, 
+  // however the maximum possible message size for the current Linux kernels 
+  // ETP implemantion messages depends upon the available RAM.
+  // Tests on my Laptop have shown that 4193975 bytes work                                              
+  // When using very large messages, disable logging by commenting out
+  // the following lines in J1939.cfg and set the test cases guard timer
+  // c_guard appropriate (e.g. 100s):
+  // FileMask := LOG_ALL | DEBUG | MATCHING
+  // ConsoleMask := LOG_ALL | DEBUG | MATCHING
   //v_pdu_send := create_octetstring_of_size(117440505)
-                                               
+  
   v_pdu_send := create_octetstring_of_size    (4193975) //4193976
 
   log("length of v_pdu_send: ", lengthof(v_pdu_send))
@@ -99,8 +109,8 @@
       c_addr_destination1,     /* p_j1939_addr_source */
       c_pgn_destination1,      /* p_peer_pgn */
       c_addr_source1,          /* p_peer_addr */
-      J1939_NO_NAME,          /* p_peer_name */
-      v_pdu_send              /* p_j1939_pdu_expected */))
+      J1939_NO_NAME,           /* p_peer_name */
+      v_pdu_send               /* p_j1939_pdu_expected */))
 
   var e_Phase v_phase
 
@@ -119,7 +129,7 @@
   all component.kill;      
 }
 
-testcase tc_can_j1939_send_and_receive_can_frame_parallel() runs on MTC {
+testcase tc_can_j1939_send_and_receive_message_parallel() runs on MTC {
   var PTC v_ptc_j1939SendInitiator1 := PTC.create("PTC1_ptc_j1939SendInitiator1") alive
   var PTC v_ptc_j1939FrameReceiver1 := PTC.create("PTC2_ptc_j1939FrameReceiver1") alive
   var PTC v_ptc_j1939SendInitiator2 := PTC.create("PTC1_ptc_j1939SendInitiator2") alive
@@ -145,8 +155,10 @@
   var octetstring v_pdu_send2 := ''O
   //v_pdu_send := create_octetstring_of_size(117440505)
   v_pdu_send1 := create_octetstring_of_size(4193976)
+  //v_pdu_send1 := create_octetstring_of_size(2093976)
   log("length of v_pdu_send1: ", lengthof(v_pdu_send1))
   v_pdu_send2 := create_octetstring_of_size(4193976)
+  //v_pdu_send2 := create_octetstring_of_size(2093976)
   log("length of v_pdu_send2: ", lengthof(v_pdu_send2))
 
   v_ptc_j1939SendInitiator1.start(f_ptc_J1939SendInitiator(
@@ -198,14 +210,14 @@
   all component.kill;      
 }
 
-testcase tc_can_f_j1939_address_claim() runs on MTC {
+testcase tc_can_j1939_address_claim() runs on MTC {
   var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive
 
   f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)
 
   connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
 
-  const J1939_NAME c_j1939_name_source  := '1122334455667788'O
+  const J1939_NAME c_j1939_name_source  := '1122334455667789'O
 
   v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim(
   	e_testbody1, 
@@ -228,17 +240,128 @@
   all component.kill;      
 }
 
-testcase tc_can_f_j1939_address_claim2() runs on MTC {
-  var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive
+testcase tc_can_j1939_send_to_name_and_receive_message() runs on MTC {
+// before running this test cases start the j1939 address claim deamons via commandline
+//j1939acd -r 100,80-120 -c /tmp/1122334455667789.jacd 1122334455667789
+//j1939acd -r 100,80-120 -c /tmp/1122334455667788.jacd 1122334455667788
 
-  f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)
+  var PTC v_ptc_j1939SendInitiatorECU := PTC.create("PTC1_ptc_j1939SendInitiatorECU") alive
+  var PTC v_ptc_j1939FrameReceiverVT := PTC.create("PTC2_ptc_j1939FrameReceiverVT") alive
 
-  connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
+  f_addSyncSlaveSet(v_ptc_j1939SendInitiatorECU, v_PTCSet)
+  f_addSyncSlaveSet(v_ptc_j1939FrameReceiverVT, v_PTCSet)
 
-  const J1939_NAME  c_j1939_name_source  := '1122334455667788'O
+  connect(mtc:pt_sync, v_ptc_j1939SendInitiatorECU:pt_sync)
+  connect(mtc:pt_sync, v_ptc_j1939FrameReceiverVT:pt_sync)
+
+
+  const J1939_NAME  c_name_VT          := '1122334455667788'O
+  const J1939_NAME  c_name_ECU   := '1122334455667789'O
+  const integer     c_send_prio        := 2
+  const octetstring c_pgn_ECU2VT       := '00E700'O // ECU to VT
+
+
+
+  var octetstring v_pdu_send           := 'FEFEFFFFFFFF00FF'O
+    
+  v_ptc_j1939SendInitiatorECU.start(f_ptc_J1939SendToNameInitiator(
+      e_testbody3, 
+      c_send_prio,
+      c_name_ECU, /* name source */
+      c_pgn_ECU2VT,         /* pgn destination */
+      c_name_VT,        /* name destination */
+      v_pdu_send))
+
+  v_ptc_j1939FrameReceiverVT.start(f_ptc_J1939FrameReceiverByName(
+      e_testbody4,     
+      c_name_VT,        /* p_j1939_name_local */
+      c_pgn_ECU2VT,     /* p_pgn_local */
+      J1939_NO_ADDR,    /* p_peer_addr */
+      c_name_ECU,       /* p_peer_name */
+      v_pdu_send        /* p_j1939_pdu_expected */))
+
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(mtc:pt_sync, v_ptc_j1939SendInitiatorECU:pt_sync)
+  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiverVT:pt_sync)
+  all component.kill;      
+}
+
+testcase tc_can_j1939_send_to_global_address_and_receive_message() runs on MTC {
+// before running this test cases start the j1939 address claim deamons via commandline
+//j1939acd -r 100,80-120 -c /tmp/1122334455667789.jacd 1122334455667789
+//j1939acd -r 100,80-120 -c /tmp/1122334455667788.jacd 1122334455667788
+
+  var PTC v_ptc_j1939SendInitiatorVT := PTC.create("PTC1_ptc_j1939SendInitiatorVT") alive
+  var PTC v_ptc_j1939FrameReceiverECU := PTC.create("PTC2_ptc_j1939FrameReceiverECU") alive
+
+  f_addSyncSlaveSet(v_ptc_j1939SendInitiatorVT, v_PTCSet)
+  f_addSyncSlaveSet(v_ptc_j1939FrameReceiverECU, v_PTCSet)
+
+  connect(mtc:pt_sync, v_ptc_j1939SendInitiatorVT:pt_sync)
+  connect(mtc:pt_sync, v_ptc_j1939FrameReceiverECU:pt_sync)
+
+
+  const J1939_NAME  c_name_VT         := '1122334455667788'O
+  const J1939_NAME  c_name_ECU        := '1122334455667789'O
+  const integer     c_send_prio       := 2
+  const octetstring c_pgn_VT2ECU      := '00E600'O // VT to ECU
+
+
+
+  var octetstring v_pdu_send := 'FF0104FFFFFFFFFF'O
+    
+  v_ptc_j1939SendInitiatorVT.start(f_ptc_J1939SendToGlobalAddressInitiator(
+      e_testbody3, 
+      c_send_prio,
+      c_name_VT,        /* name source */
+      c_pgn_VT2ECU,     /* pgn destination */
+      v_pdu_send))
+
+  v_ptc_j1939FrameReceiverECU.start(f_ptc_J1939FrameBroadcastReceiver(
+      e_testbody4,     
+      c_name_ECU,       /* p_j1939_name_local */
+      c_pgn_VT2ECU,     /* p_pgn_local */
+      v_pdu_send        /* p_j1939_pdu_expected */))
+
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(mtc:pt_sync, v_ptc_j1939SendInitiatorVT:pt_sync)
+  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiverECU:pt_sync)
+  all component.kill;      
+}
+
+
+testcase tc_can_j1939_request_for_address_claimed() runs on MTC {
+  var PTC v_ptc_j1939RequestForAddressClaimedInitiator := PTC.create("PTC1_ptc_j1939v_ptc_j1939RequestForAddressClaimedInitiator") alive
+
+  f_addSyncSlaveSet(v_ptc_j1939RequestForAddressClaimedInitiator, v_PTCSet)
+
+  connect(mtc:pt_sync, v_ptc_j1939RequestForAddressClaimedInitiator:pt_sync)
+
+  //const J1939_NAME  c_j1939_name_source  := '1122334455667788'O
+  const J1939_NAME  c_j1939_name_source  := J1939_NO_NAME
   const octetstring c_j1939_pdu_send     := '00EE00'O
   
-  v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim2(
+  v_ptc_j1939RequestForAddressClaimedInitiator.start(f_j1939_request_for_address_claimed(
   	e_testbody1, 
     c_j1939_name_source,
     c_j1939_pdu_send))
@@ -254,12 +377,141 @@
   all component.done;
   log("MTC done")
 
-  disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
+  disconnect(mtc:pt_sync, v_ptc_j1939RequestForAddressClaimedInitiator:pt_sync)
 
 
   all component.kill;      
 }
 
+testcase tc_can_j1939_receive_message() runs on MTC {
+  var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+
+  const octetstring c_addr_source1      := J1939_NO_ADDR
+  const octetstring c_pgn_destination1  := '00E600'O // ECU to VT
+  const octetstring c_addr_destination1 := 'F8'O // '90'O
+
+
+
+  template octetstring v_pdu_receive := ?//''O
+
+  v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiver(
+      e_testbody2,     
+      c_addr_destination1,     /* p_j1939_addr_source */
+      c_pgn_destination1,      /* p_peer_pgn */
+      c_addr_source1,          /* p_peer_addr */
+      J1939_NO_NAME,           /* p_peer_name */
+      v_pdu_receive            /* p_j1939_pdu_expected */))
+
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+
+  all component.done;
+  log("MTC done")
+
+  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+  all component.kill;      
+}
+
+testcase tc_can_j1939_receive_message_VT2ECU() runs on MTC {
+  var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+  template J1939_NAME  t_name_source         := '80001d002e030231'O //J1939_NO_NAME
+  template octetstring t_pgn_source          := '00E600'O // VT to ECU 
+  template octetstring t_addr_source         := ? //'F7'O //J1939_IDLE_ADDR
+  const octetstring c_pgn_local  := '00E600'O  //J1939_NO_PGN
+  const octetstring c_addr_local := 'F8'O // J1939_NO_ADDR
+  const J1939_NAME  c_name_local := J1939_NO_NAME // '80003d002e030231'O //'80001d002e030231'O 
+
+
+  var template octetstring v_pdu_receive :=  'c7ff02cde001e001'O
+  
+  //log("length of v_pdu_receive: ", lengthof(v_pdu_receive))
+
+  v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiverUntilExpectedMessage(
+      e_testbody2,     
+      c_name_local,
+      c_pgn_local,
+      c_addr_local,         /* p_j1939_addr_source */
+      t_pgn_source,     /* p_peer_pgn */
+      t_addr_source,    /* p_peer_addr */
+      t_name_source,    /* p_peer_name */
+      v_pdu_receive          /* p_j1939_pdu_expected */))
+
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+    all component.done;
+  log("MTC done")
+
+  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+  all component.kill;      
+}
+testcase tc_can_j1939_receive_message_ECU2VT() runs on MTC {
+  var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+  const J1939_NAME  c_name_source         := '80001d002e030231'O //J1939_NO_NAME
+  const octetstring c_pgn_source          := '00E700'O // ECU to VT 
+  const octetstring c_addr_source         := 'F8'O //J1939_NO_ADDR
+  template octetstring c_pgn_destination  := '00E700'O  //J1939_NO_PGN
+  template octetstring c_addr_destination := ? //J1939_NO_ADDR
+  template J1939_NAME  c_name_destination := ? //J1939_NO_NAME //'000000002e030231'O //'80001d002e030231'O 
+
+
+  var template octetstring v_pdu_receive := ? // 'ff0104ffffffffff'O
+
+
+  //log("length of v_pdu_receive: ", lengthof(v_pdu_receive))
+
+  v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiverUntilExpectedMessage(
+      e_testbody2,     
+      c_name_source,
+      c_pgn_source,
+      c_addr_source,         /* p_j1939_addr_source */
+      c_pgn_destination,     /* p_peer_pgn */
+      c_addr_destination,    /* p_peer_addr */
+      c_name_destination,    /* p_peer_name */
+      v_pdu_receive          /* p_j1939_pdu_expected */))
+
+  var e_Phase v_phase
+
+  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+    f_startPhase(v_phase)
+    log("MTC: ", v_phase)
+    f_awaitEndPhase(v_phase)
+  }
+  
+  all component.done;
+  log("MTC done")
+
+  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+  all component.kill;      
+}
+
 //=========================================================================
 // Control
 //=========================================================================
diff --git a/demo/SocketCAN_Templates.ttcn b/demo/SocketCAN_Templates.ttcn
deleted file mode 100644
index 5ec6cfe..0000000
--- a/demo/SocketCAN_Templates.ttcn
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v2.0
-* which accompanies this distribution, and is available at
-* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-//
-//  File:               SocketCANtest.ttcn
-//  Description:        SocketCAN port type test
-//
-
-
-module SocketCAN_Templates {
-
-import from SocketCAN_Types all;
-import from Bcm all
-import from Can all
-
-template SocketCAN_Result a_result(in SocketCAN_Result_code v_result_code) := {          
-  result_code   := v_result_code,
-  err           := *,
-  err_text      := *
-}
-
-template SocketCAN_socket_result 
-a_SocketCAN_socket_result(template SocketCAN_Result p_result) := {
-  id := ?, 
-  result := p_result
-}
-
-template SocketCAN_ioctl_result 
-a_SocketCAN_ioctl_result(template SocketCAN_Result p_result) := {
-  ifr := ?,
-  result := p_result
-}
-
-template SocketCAN_connect_result
-a_SocketCAN_connect_result(template SocketCAN_Result p_result) := {
-  result := p_result
-}
-
-template SocketCAN_bind_result
-a_SocketCAN_bind_result(template SocketCAN_Result p_result) := {
-  result := p_result
-}
-
-template SocketCAN_send_data_result
-a_SocketCAN_send_data_result(template SocketCAN_Result p_result) := {
-  result := p_result
-}
-
-template SocketCAN_write_data_result
-a_SocketCAN_write_data_result(template SocketCAN_Result p_result) := {
-  result := p_result
-}
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_frame(
-  template SocketCAN_socketid p_id, 
-  template CAN_id p_can_id,
-  template CAN_PDU p_can_pdu) := { 
-  // recieved CAN frame
-  id        := p_id,
-  ifr       := ?,
-  frame     := {can_frame := {can_id := p_can_id, can_pdu := p_can_pdu}}, 
-  timestamp := ?
-}
-
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_FD_frame(
-  template SocketCAN_socketid p_id, 
-  template CAN_id p_can_id,
-  template CAN_PDU p_can_pdu) := { 
-  // recieved CAN or CAN FD frame
-  id        := p_id,
-  ifr       := ?,
-  frame     := {canfd_frame := {can_id := p_can_id, can_pdu := p_can_pdu}}, 
-  timestamp := ?
-}
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_or_CAN_FD_frame(
-  template SocketCAN_socketid p_id, 
-  template SocketCAN_CAN_or_CAN_FD_frame p_frame) := { 
-  // recieved CAN or CAN FD frame
-  id        := p_id,
-  ifr       := ?,
-  frame     := p_frame, 
-  timestamp := ?
-}
-
-template SocketCAN_receive_BCM_message a_SocketCAN_receive_BCM_message(
-  template SocketCAN_socketid p_id, 
-  template SocketCAN_bcm_frame p_frame) := { 
-  // recieved CAN or CAN FD frame
-  id        := p_id,
-  ifr       := ?,
-  frame     := p_frame
-}
-
-template SocketCAN_setsockopt_result
-a_SocketCAN_setsockopt_result(template SocketCAN_Result p_result) := {
-  result := p_result
-}
-
-}
\ No newline at end of file
diff --git a/demo/initscript.sh b/demo/initscript.sh
old mode 100755
new mode 100644
diff --git a/doc/README.md b/doc/README.md
deleted file mode 100644
index de9ee7f..0000000
--- a/doc/README.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# titan.TestPorts.SocketCANasp
-
-Main project page:
-
-https://projects.eclipse.org/projects/tools.titan
-
-The source code of the TTCN-3 compiler and executor:
-
-https://github.com/eclipse/titan.core
-
-
-References:
-https://www.kernel.org/doc/Documentation/networking/can.txt
-
-Other useful documentation:
-https://docs.python.org/3/library/socket.html (search for: "AF_CAN")
-https://media.readthedocs.org/pdf/python-can/latest/python-can.pdf
-http%3A%2F%2Fwww.can-cia.de%2Ffileadmin%2Fresources%2Fdocuments%2Fproceedings%2F2012_hartkopp.pdf
-http://www.can-cia.de/fileadmin/resources/documents/proceedings/2012_hartkopp.pdf
-http://v2.can-newsletter.org/uploads/media/raw/46c15d02e1fdd3b04e671693ec548ff7.pdf
-
-# See file: demo/initscript.sh:
-
-#--------------------------------------
-#!/bin/bash
-
-
-# create a virtual can interface:
-
-sudo modprobe vcan
-sudo ip link add dev vcan0 type vcan
-sudo ip link set vcan0 up
-
-#!/bin/bash
-
-# Add vcan module to kernel
-sudo modprobe vcan
-
-# Setup of virtual can vcan0
-sudo ip link add dev vcan0 type vcan
-# set it up at as a canfd capable can interface
-sudo ip link set vcan0 mtu 72
-sudo ip link set vcan0 up
-
-# or create a physical can interface
-# sudo ip link set can0 up type can bitrate 1000000
-
-ip a
-
-#--------------------------------------
-
-cd src
-./demo/initscript.sh 
-
-or alternatively
-source demo/initscript.sh
-
-make clean; make
-
-ttcn3_start SocketCAN SocketCAN.cfg
-or 
-ttcn3_start SocketCAN CAN_matrix_test.cfg
-
-or to run a certain testcase:
-
-ttcn3_start SocketCAN SocketCAN.cfg  SocketCAN_RAW_test.tc_can_raw_send_and_receive_can_frame SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FILTER
-
-Review the newly created log files in the src directory
-and use e.g. Wireshark to trace the CAN interfacce.
-
-#--------------------------------------
-Notes:
--Using multiple Test interfacces:
- Currently the init script sets up multiple virtual can interfaces ("vcan0", 
- "vcan1" in oder to allow using multiple CAN interfaces.
- The CAN interfaces have to be defined in the TTCN configuration files or may 
- alternatively be defined in the optional parameters of port messages commands 
- ioctl and send_data.
- 
- Handling of multiple CAN interfaces is work in progress and no test cases are
- provided. In order to configure usage with multiple test interfaces, 
- test interfaces for each interface have to be defined in the MTC.
- 
--CAN RAW:
- CAN FD has been implemented, however not been tested.
- Depending on the availability of the C-code #define "CAN_FD_FRAME"
- in /usr/include/linux/can/bcm.h, CAN-FD support is enabled at compile time.
- The RAW setsockopt has path coverage. However no test coverage that insures
- the setsockopt functionality provided by the kernel is working correctly. 
- For this purpose in the future might be added additional test cases.
-
--CAN BCM:
- TX_SETUP, TX_DELETE have been tested, TX_READ is known to fail test cases.
- Some tests have indicated, that that SocketCAN BCM does not support concurrently
- active BCM channels.
- The BCM has test coverage for TX_SETUP and TX_DELETE. However no test coverage
- that insures the BCM functionality provided by the kernel is working correctly. 
- For this purpose in the future might be added additional test cases.
- Return values other than the error code by the BCM are not yet supported.
- BCM wth CAN FD frames has not been tested yet.
-
--ISOTP:
- Iso TP functionality has been added, however currently no options like padding 
- are supported. Feel free to request needed options.
-
- First install the isotp kernel module as descibed here:
- https://github.com/hartkopp/can-isotp-modules
-  
-  ./make_isotp.sh
-  sudo insmod ./can-isotp.ko
- 
-
- There is an endlessly running test case: 
- ttcn3_start SocketCAN SocketCAN.cfg Isotptest.tc_Isotp_Example001
- 
--CAN J1939:
-Configure CAN J1939 as following (requires Kernel 5.4 and compiled with can-j1939 kernel module):
-sudo modprobe vcan
-sudo ip link add vcan0 type vcan
-sudo ip link set vcan0 up
-sudo modprobe can-j1939
-
-For the following test cases, the messages are so huge that screen output of the log file takes too long.
-Thus comment out as following the following lines in J1939.cfg:
-//FileMask := LOG_ALL | DEBUG | MATCHING
-//ConsoleMask := LOG_ALL | DEBUG | MATCHING
-
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame_parallel
-
-Here above lines can be commented in:
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim2
-
- 
--Merging of logfiles:
- To merge the logfies from multiple Parallel Test Componets (PTCs) from a
- single run in timely order into sigle file, run:
-   $TTCN3_DIR/bin/ttcn3_logmerge -o log_merged.txt *.log
- The merged log-file is found at log_merged.txt
- 
--Dumping CAN Frames using SocketCAN:
- To dump all received can frames of e.g. "vcan0" run a seperate terminal:
-   $ candump "vcan0"
diff --git a/src/J1939.ttcn b/src/J1939.ttcn
index be62538..6021cd8 100644
--- a/src/J1939.ttcn
+++ b/src/J1939.ttcn
@@ -11,9 +11,24 @@
 module J1939 {
 import from General_Types all;
 
+external function f_encode_J1939_name(in J1939_NAME pdu) return octetstring 
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name(in octetstring data) return J1939_NAME
+with { extension "prototype(convert) decode(RAW)" }
+
+external function f_encode_J1939_name_record(in J1939_NAME_RECORD pdu) return octetstring 
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name_record(in octetstring data) return J1939_NAME_RECORD
+with { extension "prototype(convert) decode(RAW)" }
+
+external function f_encode_J1939_name_record_reverse_byte_order(in J1939_NAME_RECORD_REVERSE_BYTE_ENCODING pdu) return octetstring 
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name_record_reverse_byte_order(in octetstring data) return J1939_NAME_RECORD_REVERSE_BYTE_ENCODING
+with { extension "prototype(convert) decode(RAW)" }
+
 const octetstring J1939_MAX_UNICAST_ADDR      := 'FD'O
 const octetstring J1939_IDLE_ADDR             := 'FE'O
-const octetstring J1939_NO_ADDR               := 'FF'O
+const octetstring J1939_NO_ADDR               := 'FF'O     /* == broadcast or no addr */
 const J1939_NAME  J1939_NO_NAME               := '0000000000000000'O
 const octetstring J1939_PGN_REQUEST           := '00ea00'O /* Request PG */
 const octetstring J1939_PGN_ADDRESS_CLAIMED   := '00ee00'O /* Address Claimed */
@@ -22,10 +37,78 @@
 const octetstring J1939_PGN_MAX               := '03ffff'O
 const octetstring J1939_NO_PGN                := '040000'O
 
+const octetstring c_pgn_VT2ECU      := '00E600'O // VT to ECU
+const octetstring c_pgn_ECU2VT      := '00E700'O // ECU to VT
+
+
+
+
 type OCT3       J1939_PGN 		  // max 0x3ffff
-type OCT8 		J1939_NAME
+type OCT8 		J1939_NAME  with {variant "BYTEORDER(last)"}
 type OCT1		J1939_ADDR
 
+type record J1939_NAME_RECORD{
+  J1939_ARBITRARY_ADDRESS_BIT       arbitraryAddresssBit,  // selfConfigurableAddressValue
+  J1939_INDUSTRY_GROUP              industryGroup,         // deviceClassInstanceValue 
+  J1939_VEHICLE_SYSTEM_INSTANCE     vehicleSystemInstance, // deviceClassInstanceValue
+  J1939_VEHICLE_SYSTEM              vehicleSystem,
+  J1939_RESERVED                    reserved,
+  J1939_FUNCTION                    function_,
+  J1939_FUNCTION_INSTANCE           functionInstance,
+  J1939_ECU_INSTANCE                ecuInstance,
+  J1939_MANUFACTURER_CODE           manufacturerCode,
+  J1939_IDENTITY_NUMBER             identityNumber
+} with { variant "FIELDORDER(msb)" 
+  variant (identityNumber) "BYTEORDER(last)"
+  variant (manufacturerCode) "BYTEORDER(last)" 
+}
+
+type record J1939_NAME_RECORD_REVERSE_BYTE_ENCODING{
+  J1939_IDENTITY_NUMBER             identityNumber,
+  J1939_MANUFACTURER_CODE           manufacturerCode,
+  J1939_ECU_INSTANCE                ecuInstance,
+  J1939_FUNCTION_INSTANCE           functionInstance,
+  J1939_FUNCTION                    function_,
+  J1939_RESERVED                    reserved,
+  J1939_VEHICLE_SYSTEM              vehicleSystem,
+  J1939_VEHICLE_SYSTEM_INSTANCE     vehicleSystemInstance, // deviceClassInstanceValue
+  J1939_INDUSTRY_GROUP              industryGroup,         // deviceClassInstanceValue 
+  J1939_ARBITRARY_ADDRESS_BIT       arbitraryAddresssBit   // selfConfigurableAddressValue
+}  with { variant "FIELDORDER(lsb)"  /* it has no effect here, added for visibility only */ 
+
+  variant (identityNumber) "BYTEORDER(first)"
+  variant (manufacturerCode) "BYTEORDER(first)" 
+  /* the following variants are not needed:  
+  variant (ecuInstance) "BYTEORDER(first)"    
+  variant (functionInstance) "BYTEORDER(first)"
+  variant (function_) "BYTEORDER(first)"
+  variant (reserved) "BYTEORDER(first)"
+  variant (vehicleSystem) "BYTEORDER(first)"
+  variant (vehicleSystemInstance) "BYTEORDER(first)"
+  variant (industryGroup) "BYTEORDER(first)"
+  variant (arbitraryAddresssBit) "BYTEORDER(first)"
+  */
+}
+
+type	INT1BIT		J1939_ARBITRARY_ADDRESS_BIT
+type	INT3BIT		J1939_INDUSTRY_GROUP
+type	INT4BIT		J1939_VEHICLE_SYSTEM_INSTANCE
+type	INT7BIT		J1939_VEHICLE_SYSTEM
+type	INT1BIT		J1939_RESERVED
+type	INT8BIT		J1939_FUNCTION
+type	INT5BIT		J1939_FUNCTION_INSTANCE
+type	INT3BIT		J1939_ECU_INSTANCE
+type	INT11BIT	J1939_MANUFACTURER_CODE
+type	INT21BIT	J1939_IDENTITY_NUMBER
+
+type integer INT1BIT 	(0..1)          with { variant "FIELDLENGTH(1)"}		           // 2^1-1
+type integer INT3BIT 	(0..7)          with { variant "FIELDLENGTH(3)"}                   // 2^3-1
+type integer INT4BIT 	(0..15)         with { variant "FIELDLENGTH(4)"}                   // 2^4-1
+type integer INT5BIT 	(0..31)         with { variant "FIELDLENGTH(5)"}                   // 2^5-1
+type integer INT7BIT    (0..127)        with { variant "FIELDLENGTH(7)"}                   // 2^7-1
+type integer INT8BIT 	(0..255)        with { variant "FIELDLENGTH(8)"}                   // 2^8-1
+type integer INT11BIT 	(0..2047)       with { variant "FIELDLENGTH(11),BYTEORDER(last)"}  // 2^11-1
+type integer INT21BIT 	(0..2097151)    with { variant "FIELDLENGTH(21),BYTEORDER(last)"}  // 2^21-1
 
 type integer J1939_Priority (0..7)
 
@@ -39,6 +122,6 @@
   J1939_PGN			               pgn optional,
   //			 * 1 byte address *
   J1939_ADDR			           addr optional
-}
+} with { variant "" }
 
-}
+} with { encode "RAW" } 
diff --git a/src/SocketCAN_PT.cc b/src/SocketCAN_PT.cc
index 69f6c42..5208cb6 100644
--- a/src/SocketCAN_PT.cc
+++ b/src/SocketCAN_PT.cc
@@ -49,6 +49,7 @@
 #include <cstddef>
 #include <cstring>
 #include <iostream>
+#include <openssl/bn.h>
 
 struct bcm_msg_head;
 struct can_frame;
@@ -180,8 +181,20 @@
 				nbytes = recvfrom(sock, msg, J1939_RECIEVE_BUFSIZE, 0,
 						(struct sockaddr*) &addr, &addr_len);
 
+				BIGNUM* bn = BN_new();
+				BN_add_word(bn, (BN_ULONG)(addr.can_addr.j1939.name / ULONG_MAX));
+				BN_add_word(bn, (BN_ULONG)(addr.can_addr.j1939.name % ULONG_MAX));
+				int_val_t ival(bn);
+				INTEGER tmp;
+				tmp.set_val(ival);
+
+
 				//nbytes = read(sock, msg, J1939_RECIEVE_BUFSIZE);
 				if (nbytes > 0 && nbytes < J1939_RECIEVE_BUFSIZE) {
+					log("SocketCAN: Received j1939 message addr %x, name %llx, pgn %x",
+							addr.can_addr.j1939.addr,
+							addr.can_addr.j1939.name,
+							addr.can_addr.j1939.pgn);
 					struct ifreq ifr;
 					ifr.ifr_ifindex = addr.can_ifindex;
 					parameters.ifr().if__index() = ifr.ifr_ifindex;
@@ -189,9 +202,10 @@
 					parameters.id() = a;
 					parameters.pdu() = OCTETSTRING(nbytes, msg);
 					parameters.pgn() = int2oct(addr.can_addr.j1939.pgn, 3);
-					parameters.name() = int2oct(addr.can_addr.j1939.name, 8);
+					parameters.name() = int2oct(tmp, 8);
 					parameters.destAddr() = int2oct(addr.can_addr.j1939.addr,
 							1);
+
 					incoming_message(parameters);
 				}
 				delete[] msg;
@@ -856,7 +870,13 @@
 	log("entering SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__bind)");
 
 	int sock;
-	struct sockaddr_can addr = { };
+	struct sockaddr_can addr =	{};
+
+	addr.can_family = AF_CAN;
+	addr.can_addr.j1939.addr = J1939_NO_ADDR;
+	addr.can_addr.j1939.name = J1939_NO_NAME;
+	addr.can_addr.j1939.pgn = J1939_NO_PGN;
+
 	int cn = send_par.id();
 	int res;
 	SocketCAN__Types::SocketCAN__bind__result result;
@@ -1327,9 +1347,11 @@
 		nrOfBytestoSend = send_par.pdu().lengthof();
 		nrOfBytesRemaining = nrOfBytestoSend;
 		do {
+			log("SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to):Sending of remaining of bytes %ld", nrOfBytesRemaining);
 			nrOfBytesSent = sendto(sock, (const void*)((const unsigned char*)send_par.pdu()+nrOfBytestoSend-nrOfBytesRemaining),
 					nrOfBytesRemaining, 0, (struct sockaddr*) &destaddr, sizeof(destaddr));
 			nrOfBytesRemaining = nrOfBytesRemaining - nrOfBytesSent;
+			log("SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to):Sent bytes %d, remaining of bytes %ld", nrOfBytesSent, nrOfBytesRemaining);
 		} while ((nrOfBytesSent >= 0) and (nrOfBytesRemaining != 0));
 
 		log(
@@ -1361,15 +1383,15 @@
 
 		log("SocketCAN: Nr of bytes sent = %ld", nrOfBytesSent);
 	} else {
-		TTCN_error("SocketCAN: Unknown socket reference: %d \n", cn);
 		result.result().result__code() =
 				SocketCAN__Types::SocketCAN__Result__code::SocketCAN__ERROR;
 		result.result().err() = OMIT_VALUE;
 		result.result().err__text() = "Unknown socket reference";
+		TTCN_error("SocketCAN: Unknown socket reference: %d \n", cn);
 	}
+	log("Creating incoming message for SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
 	incoming_message(result);
-	log(
-			"leaving SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
+	log("leaving SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
 #else // CANJ1939_SUPPORT
 	TTCN_error("SocketCAN: CAN J1939 is not supported by your current kernel error");
 #endif // CANJ1939_SUPPORT
diff --git a/src/SocketCAN_Templates.ttcn b/src/SocketCAN_Templates.ttcn
index 57616a7..a5901e6 100644
--- a/src/SocketCAN_Templates.ttcn
+++ b/src/SocketCAN_Templates.ttcn
@@ -20,7 +20,7 @@
 import from Can all
 import from J1939 all
 
-template SocketCAN_Result a_result(in SocketCAN_Result_code v_result_code) := {          
+template SocketCAN_Result a_result(template SocketCAN_Result_code v_result_code) := {          
   result_code   := v_result_code,
   err           := *,
   err_text      := *
