Update in demo
diff --git a/demo/CANFD_matrix_messages.ttcn b/demo/CANFD_matrix_messages.ttcn
new file mode 100644
index 0000000..5ab56d7
--- /dev/null
+++ b/demo/CANFD_matrix_messages.ttcn
@@ -0,0 +1,79 @@
+module CANFD_matrix_messages {
+
+import from Can all // for CAN_id
+import from CAN_matrix_signals all
+
+//The following section is used for the automatic message encding / decoding
+
+type record CANFD_MESSAGE_TESTFRAME0_msg_type
+{
+        BIT11_signal_type     test_sig_11_bit_bitstring_lsb_coded,
+        BIT5_signal_type      test_sig_5_bit_bitstring_lsb_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_bitstring_lsb_coded) "BITORDERINFIELD(lsb)" 
+         variant (test_sig_5_bit_bitstring_lsb_coded)  "BITORDERINFIELD(lsb)"
+}
+
+type record CANFD_MESSAGE_TESTFRAME1_msg_type
+{
+        BIT11_signal_type     test_sig_11_bit_bitstring_msb_coded,
+        BIT5_signal_type      test_sig_5_bit_bitstring_msb_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_bitstring_msb_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_5_bit_bitstring_msb_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CANFD_MESSAGE_TESTFRAME2_msg_type
+{
+        INT_BIT11_signal_type  test_sig_11_bit_integer_msb_coded,
+        INT_BIT5_signal_type   test_sig_5_bit_integer_msb_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_integer_msb_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_5_bit_integer_msb_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CANFD_MESSAGE_TESTFRAME3_msg_type
+{
+        OCT1_signal_type test_sig_1_byte_octetstring_msb_coded,
+        OCT2_signal_type test_sig_2_byte_octetstring_msb_coded
+
+} with {variant "" }
+
+type record CANFD_MESSAGE_EXTENDEDFRAME1_msg_type
+{
+      //  CAN_id                                     can_id ('80000001'O), 
+        // according to SocketCAN Extended frames have the bit 31 set,
+        OCT2_signal_type test_sig_2_byte_octetstring_msb_coded
+
+} with {variant ""}
+
+ type union CANFD_MatrixPayloadUnion
+ {
+   CANFD_MESSAGE_TESTFRAME0_msg_type        message_MyTestframe0,
+   CANFD_MESSAGE_TESTFRAME1_msg_type        message_MyTestframe1,
+   CANFD_MESSAGE_TESTFRAME2_msg_type        message_MyTestframe2,
+   CANFD_MESSAGE_TESTFRAME3_msg_type        message_MyTestframe3,
+   CANFD_MESSAGE_EXTENDEDFRAME1_msg_type    message_extendedFrame1
+ }
+  with {variant "" }
+ 
+ type record CANFD_MatrixUnion {
+   CAN_id					can_id,
+   CAN_flags                can_flags,                             // only used with CAN FD  
+   CANFD_MatrixPayloadUnion	can_pdu
+} with {variant (can_pdu) "CROSSTAG(
+   message_MyTestframe0,          can_id =  '00000122'O;
+   message_MyTestframe1,          can_id =  '00000123'O;
+   message_MyTestframe2,          can_id =  '00000124'O;
+   message_MyTestframe3,          can_id =  '00000125'O;
+   message_extendedFrame1,        can_id =  '80000001'O;
+ )"
+ } 
+ 
+ 
+//The above section is used for the automatic message encding / decoding
+
+} with { encode "RAW" }
diff --git a/demo/CAN_matrix.ttcn b/demo/CAN_matrix.ttcn
index 61db435..13ddedf 100644
--- a/demo/CAN_matrix.ttcn
+++ b/demo/CAN_matrix.ttcn
@@ -3,8 +3,8 @@
 import from Can all // for CAN_id
 import from SocketCAN_Types all  // for SocketCAN_CAN_or_CAN_FD_frame
 import from CAN_matrix_general_types all
-import from My_can_matrix all
-import from My_canfd_matrix all
+import from CAN_matrix_messages all
+import from CANFD_matrix_messages all
 
 external function f_encode_can_matrix(in CAN_MatrixUnion pdu) return octetstring 
 with { extension "prototype(convert) encode(RAW)" }
diff --git a/demo/CAN_matrix_messages.ttcn b/demo/CAN_matrix_messages.ttcn
new file mode 100644
index 0000000..e733e1d
--- /dev/null
+++ b/demo/CAN_matrix_messages.ttcn
@@ -0,0 +1,150 @@
+module CAN_matrix_messages {
+
+import from Can all // for CAN_id
+
+import from CAN_matrix_signals all
+
+
+
+//The following section is used for the automatic message encding / decoding
+
+//For each message type:
+
+/* type record <message name>_msg_type
+{
+   <signal name1>_signal_type <signal name1>,
+   <signal name2>_signal_type <signal name2>,
+   ...
+   <signal nameN>_signal_type <signal nameK>
+} with {variant "FIELDORDER(msb)"
+         variant (<signal name1>) "BITORDERINFIELD(lsb)" // lsb for little endian, msb for big endian
+         variant (<signal name2>)  "BITORDERINFIELD(lsb)" // lsb for little endian, msb for big endian
+         ...
+         variant (<signal nameK>)  "BITORDERINFIELD(lsb)" // lsb for little endian, msb for big endian
+}
+ */
+
+type record CAN_MESSAGE_TESTFRAME0_msg_type
+{
+        BIT11_signal_type     test_sig_11_bit_bitstring_little_endian_coded,
+        BIT5_signal_type      test_sig_5_bit_bitstring_little_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_bitstring_little_endian_coded) "BITORDERINFIELD(lsb)" 
+         variant (test_sig_5_bit_bitstring_little_endian_coded)  "BITORDERINFIELD(lsb)"
+}
+
+type record CAN_MESSAGE_TESTFRAME1_msg_type
+{
+        BIT11_signal_type     test_sig_11_bit_bitstring_big_endian_coded,
+        BIT5_signal_type      test_sig_5_bit_bitstring_big_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_bitstring_big_endian_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_5_bit_bitstring_big_endian_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CAN_MESSAGE_TESTFRAME2_msg_type
+{
+        INT_BIT11_signal_type  test_sig_11_bit_integer_big_endian_coded,
+        INT_BIT5_signal_type   test_sig_5_bit_integer_big_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_11_bit_integer_big_endian_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_5_bit_integer_big_endian_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CAN_MESSAGE_TESTFRAME3_msg_type
+{
+        OCT1_signal_type test_sig_1_byte_octetstring_big_endian_coded,
+        OCT2_signal_type test_sig_2_byte_octetstring_big_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_1_byte_octetstring_big_endian_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_2_byte_octetstring_big_endian_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CAN_MESSAGE_TESTFRAME4_msg_type
+{
+        INT_BIT9_PADDED_2_signal_type  test_unsig_9_bit_2_padded_integer_big_endian_coded,
+        INT_BIT5_signal_type           test_sig_5_bit_integer_big_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_unsig_9_bit_2_padded_integer_big_endian_coded) "BITORDERINFIELD(msb)" 
+         variant (test_sig_5_bit_integer_big_endian_coded)  "BITORDERINFIELD(msb)"
+}
+
+type record CAN_MESSAGE_TESTFRAME5_msg_type
+{
+        INT_BIT9_PADDED_2_signal_type  test_unsig_9_bit_2_padded_integer_big_endian_coded,
+        INT_BIT5_signal_type           test_sig_5_bit_integer_big_endian_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_unsig_9_bit_2_padded_integer_big_endian_coded) "BITORDERINFIELD(lsb)" 
+         variant (test_sig_5_bit_integer_big_endian_coded)  "BITORDERINFIELD(lsb)"
+}
+
+type record CAN_MESSAGE_EXTENDEDFRAME1_msg_type
+{
+      //  CAN_id                                     can_id ('80000001'O), 
+        // according to SocketCAN Extended frames have the bit 31 set,
+        OCT2_signal_type test_sig_2_byte_octetstring_msb_coded
+
+} with {variant "FIELDORDER(msb)"
+         variant (test_sig_2_byte_octetstring_msb_coded) "BITORDERINFIELD(lsb)" 
+}
+
+
+
+/* For code generation from can matrix:
+type union CAN_MatrixPayloadUnion
+{
+   <message name1>_msg_type        <message name1>_frame,
+   <message name2>_msg_type        <message name2>_frame,
+   ....
+   <message nameK>_msg_type        <message nameK>_frame
+} with {variant "" }
+ 
+type record CAN_MatrixUnion {
+   CAN_id					can_id,
+   CAN_MatrixPayloadUnion	can_pdu
+} with {variant (can_pdu) "CROSSTAG(
+   <message name1>_frame,       can_id =  '<CAN-ID of message 1 in Hex padded with 0s>'O;
+   <message name2>_frame,       can_id =  '<CAN-ID of message 2 in Hex padded with 0s>'O;
+   ...
+   <message nameK>_frame,       can_id =  '<CAN-ID of message K in Hex padded with 0s>'O;
+// note for extended CAN-Frames CAN-ID is ored with '80000000'O
+ )"
+ } 
+*/
+
+ type union CAN_MatrixPayloadUnion
+ {
+   CAN_MESSAGE_TESTFRAME0_msg_type        message_MyTestframe0,
+   CAN_MESSAGE_TESTFRAME1_msg_type        message_MyTestframe1,
+   CAN_MESSAGE_TESTFRAME2_msg_type        message_MyTestframe2,
+   CAN_MESSAGE_TESTFRAME3_msg_type        message_MyTestframe3,
+   CAN_MESSAGE_TESTFRAME4_msg_type        message_MyTestframe4,
+   CAN_MESSAGE_TESTFRAME5_msg_type        message_MyTestframe5,
+   CAN_MESSAGE_EXTENDEDFRAME1_msg_type    message_extendedFrame1
+ }
+  with {variant "" }
+ 
+ type record CAN_MatrixUnion {
+   CAN_id					can_id,
+   CAN_MatrixPayloadUnion	can_pdu
+} with {variant (can_pdu) "CROSSTAG(
+   message_MyTestframe0,          can_id =  '00000122'O;
+   message_MyTestframe1,          can_id =  '00000123'O;
+   message_MyTestframe2,          can_id =  '00000124'O;
+   message_MyTestframe3,          can_id =  '00000125'O;
+   message_MyTestframe4,          can_id =  '00000126'O;
+   message_MyTestframe5,          can_id =  '00000127'O;
+   message_extendedFrame1,        can_id =  '80000001'O;
+ )"
+ } 
+ 
+ 
+//The above section is used for the automatic message encding / decoding
+
+} with { encode "RAW" }
diff --git a/demo/CAN_matrix_signals.ttcn b/demo/CAN_matrix_signals.ttcn
new file mode 100644
index 0000000..067bd36
--- /dev/null
+++ b/demo/CAN_matrix_signals.ttcn
@@ -0,0 +1,51 @@
+module CAN_matrix_signals {  // header
+
+import from General_Types all // header
+import from CAN_matrix_general_types all  // header
+
+
+// instead of distinguishing between padding and no padding code generation,
+// always tghe padded soulution could be used.
+
+
+// for Bit types without padding
+// type BIT<bitssize>_MSB <signal_name>_signal_type with { variant "BITORDER(msb)" };
+type BIT11_MSB BIT11_signal_type with { variant "BITORDER(msb)" };
+type BIT5_MSB BIT5_signal_type with { variant "BITORDER(msb)" };
+
+// for n-Bit types with k-Bit padding
+//type INT_BIT<n>_MSB <signal_name>_signal_type with 
+//{ variant "ALIGN(right)"
+//  variant "FIELDLENGTH(<(n+k)>)" // 9 (used) +2 (padding) = 11
+//  variant "BITORDER(msb)"
+//};
+type INT_BIT9_MSB BIT_BIT9_PADDED_2_signal_type with 
+{ variant "ALIGN(right)"
+  variant "FIELDLENGTH(11)" // 9 (used) +2 (padding) = 11
+  variant "BITORDER(msb)"
+};
+
+// for integer types without padding
+// type INT_BIT<bitssize>_MSB <signal_name>_signal_type with { variant "BITORDER(msb)" };
+type INT_BIT11_MSB INT_BIT11_signal_type with { variant "BITORDER(msb)" };
+type INT_BIT5_MSB INT_BIT5_signal_type with { variant "BITORDER(msb)" };
+
+// for n-Bit integer types with k-Bit padding
+//type INT_BIT<n>_MSB <signal_name>_signal_type with
+//{ variant "ALIGN(right)"
+//  variant "FIELDLENGTH(<n>+<k>)" // n (used) +k (padding) = 11
+//  variant "BITORDER(msb)"
+//};
+
+type INT_BIT9_MSB INT_BIT9_PADDED_2_signal_type with
+{ variant "ALIGN(right)"
+  variant "FIELDLENGTH(11)" // 9 (used) +2 (padding) = 11
+  variant "BITORDER(msb)"
+};
+
+// for Byte types without padding
+// type OCT<bytesize> <signal_name>_signal_type with { variant "BITORDER(msb)" };
+type OCT1 OCT1_signal_type with { variant "BITORDER(msb)" };
+type OCT2 OCT2_signal_type with { variant "BITORDER(msb)" };
+
+} with { encode "RAW" } //footer
diff --git a/demo/CAN_matrix_templates.ttcn b/demo/CAN_matrix_templates.ttcn
new file mode 100644
index 0000000..c7ec4e6
--- /dev/null
+++ b/demo/CAN_matrix_templates.ttcn
@@ -0,0 +1,31 @@
+module CAN_matrix_templates {
+
+import from CAN_matrix all
+import from CAN_matrix_signals all
+
+import from CAN_matrix_general_types all
+import from CAN_matrix_messages all
+
+
+// for code generation for each defined message
+
+//template CAN_MatrixUnion t_<message_name>(<signal_type_parameter1> <signal_name_parameter1>, 
+//                                          <signal_type_parameter2> <signal_name_parameter2>, 
+//                                          ...
+//                                          <signal_type_parameterN> <signal_name_parameterN>) := {
+//  can_id     := '<CAN-ID of message in HEX with padded 0s>'O, // '...'O as this is an octetstring
+//  can_pdu    :=  { <message name>_frame  :=   {
+//  <signal_type_parameter1> := <signal_name_parameter1>,  
+//  <signal_type_parameter2> := <signal_name_parameter2>
+//  } }
+//  }
+
+  template CAN_MatrixUnion t_message_Frame5_2_parm(integer parameter1, INT_BIT5_signal_type parameter2) := {
+
+    can_id     := '00000127'O, // '...'O as this is an octetstring
+    can_pdu    :=  { message_MyTestframe5 :=   {
+    test_unsig_9_bit_2_padded_integer_big_endian_coded := parameter1,  
+    test_sig_5_bit_integer_big_endian_coded := parameter2
+  } }
+  }
+}
diff --git a/demo/CAN_matrix_test.ttcn b/demo/CAN_matrix_test.ttcn
index 472cd74..3fcbde1 100644
--- a/demo/CAN_matrix_test.ttcn
+++ b/demo/CAN_matrix_test.ttcn
@@ -7,10 +7,13 @@
 import from Can all // for CAN_id
 import from SocketCAN_Types all  // for SocketCAN_CAN_or_CAN_FD_frame
 import from CAN_matrix all
-import from My_can_matrix all
-import from My_canfd_matrix all
+import from CAN_matrix_messages all
+import from CANFD_matrix_messages all
 import from SocketCANtest all
 
+import from CAN_matrix_general_types all
+import from CAN_matrix_templates all
+
 //component declarations
 type component MTC_CT
 { 
@@ -29,8 +32,8 @@
   
   my_can_message := {can_id := '00000124'O, can_pdu := { message_MyTestframe2 := {
 
-        test_sig_11_bit_integer_msb_coded := 2047, // as this is a integer
-        test_sig_5_bit_integer_msb_coded  := 2    // as this is a integer
+        test_sig_11_bit_integer_big_endian_coded := 2047, // as this is a integer
+        test_sig_5_bit_integer_big_endian_coded  := 2    // as this is a integer
       }}}
   
   log(my_can_message)
@@ -42,8 +45,8 @@
     // please note that if it is an extended can address, it would be '0x80000122' as usual in socketCAN
     can_id     := '00000122'O, // '...'O as this is anm octetstring
     can_pdu    := { message_MyTestframe0 := {
-        test_sig_11_bit_bitstring_lsb_coded := '01010101011'B, // '...'B as this is a bitstring
-        test_sig_5_bit_bitstring_lsb_coded  := '11111'B         // '...'B as this is a bitstring
+        test_sig_11_bit_bitstring_little_endian_coded := '01010101011'B, // '...'B as this is a bitstring
+        test_sig_5_bit_bitstring_little_endian_coded  := '11111'B         // '...'B as this is a bitstring
       }
     }
   }  
@@ -58,8 +61,8 @@
     // please note that if it is an extended can address, it would be '0x80000123' as usual in socketCAN
     can_id     := '00000123'O, // '...'O as this is anm octetstring
     can_pdu    := { message_MyTestframe1 := {
-        test_sig_11_bit_bitstring_msb_coded := '01010101011'B, // '...'B as this is a bitstring
-        test_sig_5_bit_bitstring_msb_coded  := '11111'B         // '...'B as this is a bitstring
+        test_sig_11_bit_bitstring_big_endian_coded := '01010101011'B, // '...'B as this is a bitstring
+        test_sig_5_bit_bitstring_big_endian_coded  := '11111'B         // '...'B as this is a bitstring
       }
     }
   }  
@@ -75,8 +78,8 @@
     can_id     := '00000124'O, // '...'O as this is anm octetstring
     can_pdu    := { message_MyTestframe2 := {
 
-        test_sig_11_bit_integer_msb_coded := 2047, // as this is a integer
-        test_sig_5_bit_integer_msb_coded  := 2    // as this is a integer
+        test_sig_11_bit_integer_big_endian_coded := 2047, // as this is a integer
+        test_sig_5_bit_integer_big_endian_coded  := 2    // as this is a integer
       }
     }
   }
@@ -93,8 +96,8 @@
     can_id     := '00000125'O, // '...'O as this is anm octetstring
     can_pdu    := { message_MyTestframe3 := {
 
-        test_sig_1_byte_octetstring_msb_coded := 'FF'O,  // as this is a 1 Byte octetstring
-        test_sig_2_byte_octetstring_msb_coded := '123F'O // as this is a 2 Byte octetstring
+        test_sig_1_byte_octetstring_big_endian_coded := 'FF'O,  // as this is a 1 Byte octetstring
+        test_sig_2_byte_octetstring_big_endian_coded := '123F'O // as this is a 2 Byte octetstring
       }
     }
   }
@@ -121,18 +124,18 @@
   log(f_decode_can_matrix(f_encode_can_matrix(valueof(t_message_extendedFrame1_1))))
   log("--------------------------------------------")
 
-  var CAN_MESSAGE_TESTFRAME1      v_message_Frame1_2
-  var CAN_MESSAGE_TESTFRAME2      v_message_Frame2_2
-  var CAN_MESSAGE_TESTFRAME3      v_message_Frame3_2
-  var CAN_MESSAGE_TESTFRAME4      v_message_Frame4_2
-  var CAN_MESSAGE_TESTFRAME5      v_message_Frame5_2
-  var CAN_MESSAGE_EXTENDEDFRAME1  v_message_extendedFrame1_2
+  var CAN_MESSAGE_TESTFRAME1_msg_type      v_message_Frame1_2
+  var CAN_MESSAGE_TESTFRAME2_msg_type      v_message_Frame2_2
+  var CAN_MESSAGE_TESTFRAME3_msg_type      v_message_Frame3_2
+  var CAN_MESSAGE_TESTFRAME4_msg_type      v_message_Frame4_2
+  var CAN_MESSAGE_TESTFRAME5_msg_type      v_message_Frame5_2
+  var CAN_MESSAGE_EXTENDEDFRAME1_msg_type  v_message_extendedFrame1_2
 
   v_message_Frame1_2 := 
   {
     // please note that if it is an extended can address, it would be '0x80000123' as usual in socketCAN
-    test_sig_11_bit_bitstring_msb_coded := '01010101011'B, // '...'B as this is a bitstring
-    test_sig_5_bit_bitstring_msb_coded  := '11111'B         // '...'B as this is a bitstring
+    test_sig_11_bit_bitstring_big_endian_coded := '01010101011'B, // '...'B as this is a bitstring
+    test_sig_5_bit_bitstring_big_endian_coded  := '11111'B         // '...'B as this is a bitstring
   }
 
   template CAN_MatrixUnion t_message_Frame1_2 := {
@@ -149,8 +152,8 @@
   v_message_Frame2_2 := 
   {
     // please note that if it is an extended can address, it would be '0x80000124' as usual in socketCAN
-    test_sig_11_bit_integer_msb_coded := 2047, // as this is a integer
-    test_sig_5_bit_integer_msb_coded  := 2    // as this is a integer
+    test_sig_11_bit_integer_big_endian_coded := 2047, // as this is a integer
+    test_sig_5_bit_integer_big_endian_coded  := 2    // as this is a integer
   }
   
   template CAN_MatrixUnion t_message_Frame2_2 := {
@@ -168,8 +171,8 @@
   v_message_Frame3_2 := 
   {
     // please note that if it is an extended can address, it would be '0x80000125' as usual in socketCAN
-    test_sig_1_byte_octetstring_msb_coded := 'FF'O,  // as this is a 1 Byte octetstring
-    test_sig_2_byte_octetstring_msb_coded := '123F'O // as this is a 2 Byte octetstring
+    test_sig_1_byte_octetstring_big_endian_coded := 'FF'O,  // as this is a 1 Byte octetstring
+    test_sig_2_byte_octetstring_big_endian_coded := '123F'O // as this is a 2 Byte octetstring
   }
   
   template CAN_MatrixUnion t_message_Frame3_2 := {
@@ -185,8 +188,8 @@
 
   v_message_Frame4_2 := 
   {
-    test_unsig_9_bit_2_padded_integer_msb_coded := 511,  // as this is a 9 Bit bitstring
-    test_sig_5_bit_integer_msb_coded := 8 // as this is a 5 bit integer
+    test_unsig_9_bit_2_padded_integer_big_endian_coded := 511,  // as this is a 9 Bit bitstring
+    test_sig_5_bit_integer_big_endian_coded := 8 // as this is a 5 bit integer
   }
 
   template CAN_MatrixUnion t_message_Frame4_2 := {
@@ -202,8 +205,8 @@
   
   v_message_Frame5_2 := 
   {
-    test_unsig_9_bit_2_padded_integer_msb_coded := 127,  // as this is a 9 Bit bitstring
-    test_sig_5_bit_integer_msb_coded := 16 // as this is a 5 bit integer
+    test_unsig_9_bit_2_padded_integer_big_endian_coded := 127,  // as this is a 9 Bit bitstring
+    test_sig_5_bit_integer_big_endian_coded := 16 // as this is a 5 bit integer
   }
   
     template CAN_MatrixUnion t_message_Frame5_2 := {
@@ -217,8 +220,15 @@
   log(f_decode_can_matrix(f_encode_can_matrix(valueof(t_message_Frame5_2))))
   log("--------------------------------------------")
 
+  log("********************************************")
 
+  log(f_encode_can_matrix(valueof(t_message_Frame5_2_parm(7, 1))))
+  log("--------------------------------------------")
+  log(f_decode_can_matrix(f_encode_can_matrix(valueof(t_message_Frame5_2_parm(7, 1)))))
+  log("--------------------------------------------")
 
+  log("********************************************")
+  
   v_message_extendedFrame1_2 := 
   {
     // please note that if it is an extended can address, it would be '0x80000125' as usual in socketCAN
@@ -272,13 +282,13 @@
   connect(mtc:pt_sync, v_ptc_rawFrameReceiver:pt_sync)
 
 
-  var CAN_MESSAGE_TESTFRAME1      v_message_Frame1_3
+  var CAN_MESSAGE_TESTFRAME1_msg_type      v_message_Frame1_3
 
   v_message_Frame1_3 := 
   {
     // please note that if it is an extended can address, it would be '0x80000123' as usual in socketCAN
-    test_sig_11_bit_bitstring_msb_coded := '01010101011'B, // '...'B as this is a bitstring
-    test_sig_5_bit_bitstring_msb_coded  := '11111'B         // '...'B as this is a bitstring
+    test_sig_11_bit_bitstring_big_endian_coded := '01010101011'B, // '...'B as this is a bitstring
+    test_sig_5_bit_bitstring_big_endian_coded  := '11111'B         // '...'B as this is a bitstring
   }
 
   template CAN_MatrixUnion t_message_Frame1_3 := {
@@ -328,7 +338,7 @@
       can_pdu := '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'O}
   }
 
-  var CANFD_MESSAGE_TESTFRAME1      v_message_Frame1_4
+  var CANFD_MESSAGE_TESTFRAME1_msg_type      v_message_Frame1_4
 
   v_message_Frame1_4 := 
   {
diff --git a/demo/Isobus.cfg b/demo/Isobus.cfg
new file mode 100644
index 0000000..48c49ff
--- /dev/null
+++ b/demo/Isobus.cfg
@@ -0,0 +1,42 @@
+ ##############################################################################
+ # Copyright (c) 2010, 2016  Ericsson AB
+ # All rights reserved. This program and the accompanying materials
+ # are made available under the terms of the Eclipse Public License v1.0
+ # which accompanies this distribution, and is available at
+ # http://www.eclipse.org/legal/epl-v10.html
+ #
+ # Contributors:
+ # Michael Josenhans
+ ##############################################################################
+
+
+
+[LOGGING]
+FileMask := LOG_ALL | DEBUG | MATCHING
+ConsoleMask := LOG_ALL | DEBUG | MATCHING
+LogSourceInfo := Yes
+SourceInfoFormat:= Single // Single or Stack
+LogEntityName:= Yes
+LogEventTypes:= Yes
+
+[TESTPORT_PARAMETERS]
+// Syntax:
+// <component_name>.<port_name>.<parameter_name> := <parameter_value>
+*.pt_socketCAN.SocketCAN_can_interface_name := "vcan0"
+*.pt_socketCAN.SocketCAN_debugging := "YES"
+
+
+[EXECUTE]
+Isobustest.tc_encdec
+Isobustest.tc_encdec_vt2ecu_vtStatusReq
+Isobustest.tc_encdec_ecu2vt_getMemoryReq
+Isobustest.tc_encdec_ecu2vt_getMemoryReq_with_templateI
+Isobustest.tc_encdec_ecu2vt_getMemoryReq_with_template_II
+Isobustest.tc_encdec_networkMessage_N_SP_Response_pdu_with_template
+Isobustest.tc_encdec_networkMessage_N_SP_Response_with_template
+Isobustest.tc_encdec_N_SP_Response_with_template
+Isobustest.tc_encdec_ecu2vt_workingSetMaintenanceReq
+Isobustest.tc_dec_requestForAddressClaimed
+Isobustest.tc_dec_largemessage
+//Isobustest.tc_Example001
+//Isobustest.tc_Example002
diff --git a/demo/IsobusNMMessageTypes.ttcn b/demo/IsobusNMMessageTypes.ttcn
index 7c061db..3a4ed24 100644
--- a/demo/IsobusNMMessageTypes.ttcn
+++ b/demo/IsobusNMMessageTypes.ttcn
@@ -269,7 +269,7 @@
 type record N_GP_Response
 {
   Function                                  msgFunction (129),
-  octetstring                               requestedParametrics [6 .. 255]
+  record length (6..255) of OCT1            requestedParametrics
   // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
   // this is the easiest way to handle it
 } with {
@@ -296,12 +296,12 @@
   // this is the easiest way to handle it
 } with {
   variant "" }
-  
+ 
 type record N_SP_Response
 {
   Function                                  msgFunction (132),
   PortPair                                  portPair, 
-  octetstring                               requestedParametrics [5 .. 255]
+  record length (5..255) of OCT1            requestedParametrics
   // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
   // this is the easiest way to handle it
 } with {
diff --git a/demo/Isobus_Templates.ttcn b/demo/Isobus_Templates.ttcn
index 8b926ca..a18f509 100644
--- a/demo/Isobus_Templates.ttcn
+++ b/demo/Isobus_Templates.ttcn
@@ -2,9 +2,34 @@
 
 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 := {
@@ -89,5 +114,20 @@
   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/Isobustest.ttcn b/demo/Isobustest.ttcn
index fc85669..28accdb 100644
--- a/demo/Isobustest.ttcn
+++ b/demo/Isobustest.ttcn
@@ -26,7 +26,7 @@
 import from IsobusMessageTypes all
 import from Isobus_Templates all
 
-
+ import from IsobusNMMessageTypes all
 
 type union CAN_ID {
   OCT4 can_eff, // 29-bit can address
@@ -576,7 +576,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
@@ -622,6 +621,30 @@
   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 ( '000001'B, '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 ( '000001'B, '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 ( '000001'B, '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 := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu := 
diff --git a/demo/Makefile b/demo/Makefile
index 8474742..09cfec8 100644
--- a/demo/Makefile
+++ b/demo/Makefile
@@ -88,7 +88,8 @@
 ../src/SocketCAN_Types.ttcn SocketCANtest.ttcn Isobus.ttcn Isobustest.ttcn IsobusMessageTypes.ttcn \
 Isobus_Templates.ttcn IsobusNMMessageTypes.ttcn IsobusCMMessageTypes.ttcn IsobusVTMessageTypes.ttcn \
 Isotp.ttcn Isotptest.ttcn \
-CAN_matrix_general_types.ttcn  CAN_matrix_test.ttcn  CAN_matrix.ttcn My_can_matrix.ttcn My_canfd_matrix.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
 
 # ASN.1 modules of this project:
 ASN1_MODULES =
@@ -100,7 +101,8 @@
 SocketCAN_Types.cc SocketCANtest.cc Isobus.cc Isobustest.cc IsobusMessageTypes.cc \
 Isobus_Templates.cc IsobusNMMessageTypes.cc IsobusCMMessageTypes.cc IsobusVTMessageTypes.cc \
 Isotp.cc Isotptest.cc \
-CAN_matrix_general_types.cc  CAN_matrix_test.cc  CAN_matrix.cc My_can_matrix.cc My_canfd_matrix.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
 
 GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
 
diff --git a/demo/My_can_matrix.ttcn b/demo/My_can_matrix.ttcn
deleted file mode 100644
index 7f961d1..0000000
--- a/demo/My_can_matrix.ttcn
+++ /dev/null
@@ -1,112 +0,0 @@
-module My_can_matrix {
-
-import from General_Types all // for OCT1, OCT2, ..., INT1, ..
-import from Can all // for CAN_id
-import from CAN_matrix_general_types all
-
-
-
-
-//The following section is used for the automatic message encding / decoding
-
-type record CAN_MESSAGE_TESTFRAME0
-{
-        BIT11_MSB     test_sig_11_bit_bitstring_lsb_coded,
-        BIT5_MSB      test_sig_5_bit_bitstring_lsb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_bitstring_lsb_coded) "BITORDERINFIELD(lsb)" 
-         variant (test_sig_5_bit_bitstring_lsb_coded)  "BITORDERINFIELD(lsb)"
-}
-
-type record CAN_MESSAGE_TESTFRAME1
-{
-        BIT11_MSB     test_sig_11_bit_bitstring_msb_coded,
-        BIT5_MSB      test_sig_5_bit_bitstring_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_bitstring_msb_coded) "BITORDERINFIELD(msb)" 
-         variant (test_sig_5_bit_bitstring_msb_coded)  "BITORDERINFIELD(msb)"
-}
-
-type record CAN_MESSAGE_TESTFRAME2
-{
-        INT_BIT11_MSB  test_sig_11_bit_integer_msb_coded,
-        INT_BIT5_MSB   test_sig_5_bit_integer_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_integer_msb_coded) "BITORDERINFIELD(msb)" 
-         variant (test_sig_5_bit_integer_msb_coded)  "BITORDERINFIELD(msb)"
-}
-
-type record CAN_MESSAGE_TESTFRAME3
-{
-        OCT1 test_sig_1_byte_octetstring_msb_coded,
-        OCT2 test_sig_2_byte_octetstring_msb_coded
-
-} with {variant "" }
-
-type integer INT_BIT9_PADDED_2_MSB  (0..511)      with 
-{ variant "ALIGN(right)";
-  variant "FIELDLENGTH(11)"
-  variant "BITORDER(msb)"
-};
-
-type record CAN_MESSAGE_TESTFRAME4
-{
-        INT_BIT9_PADDED_2_MSB  test_unsig_9_bit_2_padded_integer_msb_coded,
-        INT_BIT5_MSB           test_sig_5_bit_integer_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_unsig_9_bit_2_padded_integer_msb_coded) "BITORDERINFIELD(msb)" 
-         variant (test_sig_5_bit_integer_msb_coded)  "BITORDERINFIELD(msb)"
-}
-
-type record CAN_MESSAGE_TESTFRAME5
-{
-        INT_BIT9_PADDED_2_MSB  test_unsig_9_bit_2_padded_integer_msb_coded,
-        INT_BIT5_MSB           test_sig_5_bit_integer_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_unsig_9_bit_2_padded_integer_msb_coded) "BITORDERINFIELD(lsb)" 
-         variant (test_sig_5_bit_integer_msb_coded)  "BITORDERINFIELD(lsb)"
-}
-
-type record CAN_MESSAGE_EXTENDEDFRAME1
-{
-      //  CAN_id                                     can_id ('80000001'O), 
-        // according to SocketCAN Extended frames have the bit 31 set,
-        OCT2 test_sig_2_byte_octetstring_msb_coded
-
-} with {variant ""}
-
- type union CAN_MatrixPayloadUnion
- {
-   CAN_MESSAGE_TESTFRAME0        message_MyTestframe0,
-   CAN_MESSAGE_TESTFRAME1        message_MyTestframe1,
-   CAN_MESSAGE_TESTFRAME2        message_MyTestframe2,
-   CAN_MESSAGE_TESTFRAME3        message_MyTestframe3,
-   CAN_MESSAGE_TESTFRAME4        message_MyTestframe4,
-   CAN_MESSAGE_TESTFRAME5        message_MyTestframe5,
-   CAN_MESSAGE_EXTENDEDFRAME1    message_extendedFrame1
- }
-  with {variant "" }
- 
- type record CAN_MatrixUnion {
-   CAN_id					can_id,
-   CAN_MatrixPayloadUnion	can_pdu
-} with {variant (can_pdu) "CROSSTAG(
-   message_MyTestframe0,          can_id =  '00000122'O;
-   message_MyTestframe1,          can_id =  '00000123'O;
-   message_MyTestframe2,          can_id =  '00000124'O;
-   message_MyTestframe3,          can_id =  '00000125'O;
-   message_MyTestframe4,          can_id =  '00000126'O;
-   message_MyTestframe5,          can_id =  '00000127'O;
-   message_extendedFrame1,        can_id =  '80000001'O;
- )"
- } 
- 
- 
-//The above section is used for the automatic message encding / decoding
-
-} with { encode "RAW" }
diff --git a/demo/My_canfd_matrix.ttcn b/demo/My_canfd_matrix.ttcn
deleted file mode 100644
index d55aab4..0000000
--- a/demo/My_canfd_matrix.ttcn
+++ /dev/null
@@ -1,80 +0,0 @@
-module My_canfd_matrix {
-
-import from General_Types all // for OCT1, OCT2, ..., INT1, ..
-import from Can all // for CAN_id
-import from CAN_matrix_general_types all
-
-//The following section is used for the automatic message encding / decoding
-
-type record CANFD_MESSAGE_TESTFRAME0
-{
-        BIT11_MSB     test_sig_11_bit_bitstring_lsb_coded,
-        BIT5_MSB      test_sig_5_bit_bitstring_lsb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_bitstring_lsb_coded) "BITORDERINFIELD(lsb)" 
-         variant (test_sig_5_bit_bitstring_lsb_coded)  "BITORDERINFIELD(lsb)"
-}
-
-type record CANFD_MESSAGE_TESTFRAME1
-{
-        BIT11_MSB     test_sig_11_bit_bitstring_msb_coded,
-        BIT5_MSB      test_sig_5_bit_bitstring_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_bitstring_msb_coded) "BITORDERINFIELD(msb)" 
-         variant (test_sig_5_bit_bitstring_msb_coded)  "BITORDERINFIELD(msb)"
-}
-
-type record CANFD_MESSAGE_TESTFRAME2
-{
-        INT_BIT11_MSB  test_sig_11_bit_integer_msb_coded,
-        INT_BIT5_MSB   test_sig_5_bit_integer_msb_coded
-
-} with {variant "FIELDORDER(msb)"
-         variant (test_sig_11_bit_integer_msb_coded) "BITORDERINFIELD(msb)" 
-         variant (test_sig_5_bit_integer_msb_coded)  "BITORDERINFIELD(msb)"
-}
-
-type record CANFD_MESSAGE_TESTFRAME3
-{
-        OCT1 test_sig_1_byte_octetstring_msb_coded,
-        OCT2 test_sig_2_byte_octetstring_msb_coded
-
-} with {variant "" }
-
-type record CANFD_MESSAGE_EXTENDEDFRAME1
-{
-      //  CAN_id                                     can_id ('80000001'O), 
-        // according to SocketCAN Extended frames have the bit 31 set,
-        OCT2 test_sig_2_byte_octetstring_msb_coded
-
-} with {variant ""}
-
- type union CANFD_MatrixPayloadUnion
- {
-   CANFD_MESSAGE_TESTFRAME0        message_MyTestframe0,
-   CANFD_MESSAGE_TESTFRAME1        message_MyTestframe1,
-   CANFD_MESSAGE_TESTFRAME2        message_MyTestframe2,
-   CANFD_MESSAGE_TESTFRAME3        message_MyTestframe3,
-   CANFD_MESSAGE_EXTENDEDFRAME1    message_extendedFrame1
- }
-  with {variant "" }
- 
- type record CANFD_MatrixUnion {
-   CAN_id					can_id,
-   CAN_flags                can_flags,                             // only used with CAN FD  
-   CANFD_MatrixPayloadUnion	can_pdu
-} with {variant (can_pdu) "CROSSTAG(
-   message_MyTestframe0,          can_id =  '00000122'O;
-   message_MyTestframe1,          can_id =  '00000123'O;
-   message_MyTestframe2,          can_id =  '00000124'O;
-   message_MyTestframe3,          can_id =  '00000125'O;
-   message_extendedFrame1,        can_id =  '80000001'O;
- )"
- } 
- 
- 
-//The above section is used for the automatic message encding / decoding
-
-} with { encode "RAW" }