You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/06/02 18:16:36 UTC

[plc4x] branch feature/c-code-generation updated: - Major cleanup after getting the compiler to work in CLion

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/c-code-generation
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feature/c-code-generation by this push:
     new 4727e19  - Major cleanup after getting the compiler to work in CLion
4727e19 is described below

commit 4727e1920d7d50097b55786918e0eb3261d0f533
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Jun 2 20:14:26 2020 +0200

    - Major cleanup after getting the compiler to work in CLion
---
 .../plc4x/language/c/CLanguageTemplateHelper.java  |  13 +++
 .../resources/templates/c/pojo-template-c.ftlh     |  44 ++++---
 .../resources/templates/c/pojo-template-h.ftlh     |  50 +++++---
 .../main/resources/protocols/modbus/modbus.mspec   |   4 +-
 sandbox/plc4c/api/include/plc4c/types.h            |   2 +
 sandbox/plc4c/drivers/modbus/CMakeLists.txt        |   4 +-
 sandbox/plc4c/drivers/s7/CMakeLists.txt            |   4 +-
 .../modbus/includes/modbus_constants.h             |   7 ++
 .../generated-sources/modbus/includes/modbus_pdu.h |  86 +++++++-------
 .../includes/modbus_pdu_diagnostic_request.h       |   8 +-
 .../includes/modbus_pdu_diagnostic_response.h      |  38 -------
 .../modbus/includes/modbus_pdu_error.h             |   5 +
 .../modbus_pdu_get_com_event_counter_request.h     |  37 ------
 .../modbus_pdu_get_com_event_counter_response.h    |  39 -------
 .../modbus_pdu_get_com_event_log_request.h         |   5 +
 .../modbus_pdu_get_com_event_log_response.h        |   5 +
 ...odbus_pdu_mask_write_holding_register_request.h |   5 +
 ...dbus_pdu_mask_write_holding_register_response.h |   5 +
 .../includes/modbus_pdu_read_coils_request.h       |   5 +
 .../includes/modbus_pdu_read_coils_response.h      |   5 +
 ...modbus_pdu_read_device_identification_request.h |   5 +
 ...odbus_pdu_read_device_identification_response.h |   5 +
 .../modbus_pdu_read_discrete_inputs_request.h      |   5 +
 .../modbus_pdu_read_discrete_inputs_response.h     |   5 +
 .../modbus_pdu_read_exception_status_request.h     |   5 +
 .../modbus_pdu_read_exception_status_response.h    |   5 +
 .../includes/modbus_pdu_read_fifo_queue_request.h  |   5 +
 .../includes/modbus_pdu_read_fifo_queue_response.h |   5 +
 .../includes/modbus_pdu_read_file_record_request.h |   7 +-
 .../modbus_pdu_read_file_record_request_item.h     |   4 +
 .../modbus_pdu_read_file_record_response.h         |   7 +-
 .../modbus_pdu_read_file_record_response_item.h    |   4 +
 .../modbus_pdu_read_holding_registers_request.h    |   5 +
 .../modbus_pdu_read_holding_registers_response.h   |   5 +
 .../modbus_pdu_read_input_registers_request.h      |   5 +
 .../modbus_pdu_read_input_registers_response.h     |   5 +
 ...read_write_multiple_holding_registers_request.h |   5 +
 ...ead_write_multiple_holding_registers_response.h |   5 +
 .../includes/modbus_pdu_report_server_id_request.h |   5 +
 .../modbus_pdu_report_server_id_response.h         |   5 +
 .../modbus_pdu_write_file_record_request.h         |   7 +-
 .../modbus_pdu_write_file_record_request_item.h    |   4 +
 .../modbus_pdu_write_file_record_response.h        |   7 +-
 .../modbus_pdu_write_file_record_response_item.h   |   4 +
 .../modbus_pdu_write_multiple_coils_request.h      |   5 +
 .../modbus_pdu_write_multiple_coils_response.h     |   5 +
 ..._pdu_write_multiple_holding_registers_request.h |   5 +
 ...pdu_write_multiple_holding_registers_response.h |   5 +
 .../modbus_pdu_write_single_coil_request.h         |   5 +
 .../modbus_pdu_write_single_coil_response.h        |   5 +
 .../modbus_pdu_write_single_register_request.h     |   5 +
 .../modbus_pdu_write_single_register_response.h    |   5 +
 .../modbus/includes/modbus_serial_adu.h            |   6 +-
 .../modbus/includes/modbus_tcp_adu.h               |   9 +-
 .../modbus/src/modbus_constants.c                  |  14 ++-
 .../generated-sources/modbus/src/modbus_pdu.c      | 126 +++++++++++++--------
 .../modbus/src/modbus_pdu_diagnostic_request.c     |  19 ++--
 .../modbus/src/modbus_pdu_diagnostic_response.c    |  41 -------
 .../modbus/src/modbus_pdu_error.c                  |  11 +-
 .../src/modbus_pdu_get_com_event_counter_request.c |  37 ------
 .../modbus_pdu_get_com_event_counter_response.c    |  45 --------
 .../src/modbus_pdu_get_com_event_log_request.c     |   9 +-
 .../src/modbus_pdu_get_com_event_log_response.c    |  15 +--
 ...odbus_pdu_mask_write_holding_register_request.c |  15 +--
 ...dbus_pdu_mask_write_holding_register_response.c |  15 +--
 .../modbus/src/modbus_pdu_read_coils_request.c     |  13 ++-
 .../modbus/src/modbus_pdu_read_coils_response.c    |   9 +-
 ...modbus_pdu_read_device_identification_request.c |   9 +-
 ...odbus_pdu_read_device_identification_response.c |   9 +-
 .../src/modbus_pdu_read_discrete_inputs_request.c  |  13 ++-
 .../src/modbus_pdu_read_discrete_inputs_response.c |   9 +-
 .../src/modbus_pdu_read_exception_status_request.c |   9 +-
 .../modbus_pdu_read_exception_status_response.c    |  11 +-
 .../src/modbus_pdu_read_fifo_queue_request.c       |  11 +-
 .../src/modbus_pdu_read_fifo_queue_response.c      |   9 +-
 .../src/modbus_pdu_read_file_record_request.c      |   9 +-
 .../src/modbus_pdu_read_file_record_request_item.c |  17 +--
 .../src/modbus_pdu_read_file_record_response.c     |   9 +-
 .../modbus_pdu_read_file_record_response_item.c    |  11 +-
 .../modbus_pdu_read_holding_registers_request.c    |  13 ++-
 .../modbus_pdu_read_holding_registers_response.c   |   9 +-
 .../src/modbus_pdu_read_input_registers_request.c  |  13 ++-
 .../src/modbus_pdu_read_input_registers_response.c |   9 +-
 ...read_write_multiple_holding_registers_request.c |  17 +--
 ...ead_write_multiple_holding_registers_response.c |   9 +-
 .../src/modbus_pdu_report_server_id_request.c      |   9 +-
 .../src/modbus_pdu_report_server_id_response.c     |   9 +-
 .../src/modbus_pdu_write_file_record_request.c     |   9 +-
 .../modbus_pdu_write_file_record_request_item.c    |  15 +--
 .../src/modbus_pdu_write_file_record_response.c    |   9 +-
 .../modbus_pdu_write_file_record_response_item.c   |  15 +--
 .../src/modbus_pdu_write_multiple_coils_request.c  |  13 ++-
 .../src/modbus_pdu_write_multiple_coils_response.c |  13 ++-
 ..._pdu_write_multiple_holding_registers_request.c |  13 ++-
 ...pdu_write_multiple_holding_registers_response.c |  13 ++-
 .../src/modbus_pdu_write_single_coil_request.c     |  13 ++-
 .../src/modbus_pdu_write_single_coil_response.c    |  13 ++-
 .../src/modbus_pdu_write_single_register_request.c |  13 ++-
 .../modbus_pdu_write_single_register_response.c    |  13 ++-
 .../modbus/src/modbus_serial_adu.c                 |  22 ++--
 .../generated-sources/modbus/src/modbus_tcp_adu.c  |  23 ++--
 .../generated-sources/s7/includes/cotp_packet.h    |  27 +++--
 .../s7/includes/cotp_packet_connection_request.h   |  11 +-
 .../s7/includes/cotp_packet_connection_response.h  |  11 +-
 .../s7/includes/cotp_packet_data.h                 |   9 +-
 .../s7/includes/cotp_packet_disconnect_request.h   |  11 +-
 .../s7/includes/cotp_packet_disconnect_response.h  |   9 +-
 .../s7/includes/cotp_packet_tpdu_error.h           |   9 +-
 .../generated-sources/s7/includes/cotp_parameter.h |  21 ++--
 .../s7/includes/cotp_parameter_called_tsap.h       |   5 +
 .../s7/includes/cotp_parameter_calling_tsap.h      |   5 +
 .../s7/includes/cotp_parameter_checksum.h          |   5 +
 ...p_parameter_disconnect_additional_information.h |   5 +
 .../s7/includes/cotp_parameter_tpdu_size.h         |   7 +-
 .../generated-sources/s7/includes/s7_address.h     |  13 ++-
 .../generated-sources/s7/includes/s7_address_any.h |   9 +-
 .../generated-sources/s7/includes/s7_message.h     |  26 +++--
 .../s7/includes/s7_message_request.h               |   9 +-
 .../s7/includes/s7_message_response.h              |   9 +-
 .../s7/includes/s7_message_response_data.h         |   9 +-
 .../s7/includes/s7_message_user_data.h             |   9 +-
 .../generated-sources/s7/includes/s7_parameter.h   |  23 ++--
 .../s7/includes/s7_parameter_read_var_request.h    |   7 +-
 .../s7/includes/s7_parameter_read_var_response.h   |   5 +
 .../s7/includes/s7_parameter_setup_communication.h |   5 +
 .../s7/includes/s7_parameter_user_data.h           |   7 +-
 .../s7/includes/s7_parameter_user_data_item.h      |  13 ++-
 .../s7_parameter_user_data_item_cpu_functions.h    |   5 +
 .../s7/includes/s7_parameter_write_var_request.h   |   7 +-
 .../s7/includes/s7_parameter_write_var_response.h  |   5 +
 .../generated-sources/s7/includes/s7_payload.h     |  19 ++--
 .../s7/includes/s7_payload_read_var_response.h     |   7 +-
 .../s7/includes/s7_payload_user_data.h             |   7 +-
 .../s7/includes/s7_payload_user_data_item.h        |  21 ++--
 ..._user_data_item_cpu_function_read_szl_request.h |  11 +-
 ...user_data_item_cpu_function_read_szl_response.h |  16 ++-
 .../s7/includes/s7_payload_write_var_request.h     |   7 +-
 .../s7/includes/s7_payload_write_var_response.h    |   7 +-
 .../s7/includes/s7_var_payload_data_item.h         |   8 +-
 .../s7/includes/s7_var_payload_status_item.h       |   6 +-
 .../s7/includes/s7_var_request_parameter_item.h    |  13 ++-
 .../s7_var_request_parameter_item_address.h        |   7 +-
 .../s7/includes/szl_data_tree_item.h               |   4 +
 .../plc4c/generated-sources/s7/includes/szl_id.h   |   8 +-
 .../generated-sources/s7/includes/tpkt_packet.h    |   9 +-
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  33 +++---
 .../s7/src/cotp_packet_connection_request.c        |  15 +--
 .../s7/src/cotp_packet_connection_response.c       |  15 +--
 .../generated-sources/s7/src/cotp_packet_data.c    |  13 ++-
 .../s7/src/cotp_packet_disconnect_request.c        |  15 +--
 .../s7/src/cotp_packet_disconnect_response.c       |  13 ++-
 .../s7/src/cotp_packet_tpdu_error.c                |  13 ++-
 .../generated-sources/s7/src/cotp_parameter.c      |  24 ++--
 .../s7/src/cotp_parameter_called_tsap.c            |  11 +-
 .../s7/src/cotp_parameter_calling_tsap.c           |  11 +-
 .../s7/src/cotp_parameter_checksum.c               |  11 +-
 ...p_parameter_disconnect_additional_information.c |   9 +-
 .../s7/src/cotp_parameter_tpdu_size.c              |  11 +-
 .../plc4c/generated-sources/s7/src/s7_address.c    |  12 +-
 .../generated-sources/s7/src/s7_address_any.c      |  23 ++--
 .../plc4c/generated-sources/s7/src/s7_message.c    |  38 ++++---
 .../generated-sources/s7/src/s7_message_request.c  |   9 +-
 .../generated-sources/s7/src/s7_message_response.c |  13 ++-
 .../s7/src/s7_message_response_data.c              |  13 ++-
 .../s7/src/s7_message_user_data.c                  |   9 +-
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  27 +++--
 .../s7/src/s7_parameter_read_var_request.c         |   9 +-
 .../s7/src/s7_parameter_read_var_response.c        |  11 +-
 .../s7/src/s7_parameter_setup_communication.c      |  17 +--
 .../s7/src/s7_parameter_user_data.c                |   9 +-
 .../s7/src/s7_parameter_user_data_item.c           |  12 +-
 .../s7_parameter_user_data_item_cpu_functions.c    |  25 ++--
 .../s7/src/s7_parameter_write_var_request.c        |   9 +-
 .../s7/src/s7_parameter_write_var_response.c       |  11 +-
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  21 ++--
 .../s7/src/s7_payload_read_var_response.c          |   9 +-
 .../s7/src/s7_payload_user_data.c                  |   9 +-
 .../s7/src/s7_payload_user_data_item.c             |  26 +++--
 ..._user_data_item_cpu_function_read_szl_request.c |   9 +-
 ...user_data_item_cpu_function_read_szl_response.c |  14 ++-
 .../s7/src/s7_payload_write_var_request.c          |   9 +-
 .../s7/src/s7_payload_write_var_response.c         |   9 +-
 .../s7/src/s7_var_payload_data_item.c              |  15 +--
 .../s7/src/s7_var_payload_status_item.c            |  11 +-
 .../s7/src/s7_var_request_parameter_item.c         |  12 +-
 .../s7/src/s7_var_request_parameter_item_address.c |  14 ++-
 .../generated-sources/s7/src/szl_data_tree_item.c  |  17 +--
 sandbox/plc4c/generated-sources/s7/src/szl_id.c    |  15 +--
 .../plc4c/generated-sources/s7/src/tpkt_packet.c   |  21 ++--
 sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h |   2 +-
 190 files changed, 1408 insertions(+), 1022 deletions(-)

diff --git a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
index 9026dc8..436ccde 100644
--- a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
+++ b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
@@ -34,6 +34,7 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 public class CLanguageTemplateHelper implements FreemarkerLanguageTemplateHelper {
 
@@ -471,6 +472,18 @@ public class CLanguageTemplateHelper implements FreemarkerLanguageTemplateHelper
         return "Hurz";
     }
 
+    public Collection<String> switchTypeImports() {
+        if(thisType instanceof ComplexTypeDefinition) {
+            ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) thisType;
+            SwitchField switchField = (SwitchField) complexTypeDefinition.getFields().stream().filter(field -> field instanceof SwitchField).findFirst().orElse(null);
+            if(switchField != null) {
+                return switchField.getCases().stream().map(
+                    sc -> camelCaseToSnakeCase(sc.getName())).collect(Collectors.toList());
+            }
+        }
+        return Collections.emptyList();
+    }
+
     public String toSwitchExpression(String expression) {
         StringBuilder sb = new StringBuilder();
         Pattern pattern = Pattern.compile("([^\\.]*)\\.([a-zA-Z\\d]+)(.*)");
diff --git a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
index 901957c..f8d19cb 100644
--- a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
@@ -36,15 +36,22 @@ ${helper.setConstants(type, protocolName, outputFlavor)}${helper.getSourceDirect
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+<#-- Add an import for any sub-type defined -->
+<#if helper.switchTypeImports()?has_content>
+    <#list helper.switchTypeImports() as typeImport>
+#include "${typeImport}.h"
+    </#list>
+</#if>
 
 #include "${helper.camelCaseToSnakeCase(typeName)}.h"
 
-plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffer buf, <#if type.parserArguments?has_content><#list type.parserArguments as parserArgument>${helper.getLanguageTypeName(parserArgument.type)} ${parserArgument.name}<#sep>, </#list>, </#if>plc4c_${helper.getCTypeName(type.name)}** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_buffer* buf, <#if type.parserArguments?has_content><#list type.parserArguments as parserArgument>${helper.getLanguageTypeName(parserArgument.type)} ${parserArgument.name}<#sep>, </#list>, </#if>plc4c_${helper.getCTypeName(type.name)}** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_${helper.getCTypeName(type.name)}* msg = malloc(sizeof(plc4c_${helper.getCTypeName(type.name)}));
 <#list type.fields as field>
@@ -55,11 +62,12 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
   ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getNullValueForType(field.type)};
   {
     // Create an array of all the bytes read in this message element so far.
-    byte[] checksumRawData = io.getBytes(startPos, io.getPos());
+    byte[] checksumRawData = plc4c_spi_read_get_bytes(buf, startPos, plc4c_spi_read_get_pos(buf));
     ${helper.getLanguageTypeNameForField(field)} _${field.name}Ref = ${helper.getReadBufferReadMethodCall(field.type)?no_esc};
     ${field.name} = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(field, field.checksumExpression, type.parserArguments)});
     if(${field.name} != _${field.name}Ref) {
-      throw new ParseException(String.format("Checksum verification failed. Expected %04X but got %04X",_${field.name}Ref & 0xFFFF, ${field.name} & 0xFFFF));
+      return PARSE_ERROR;
+      // throw new ParseException(String.format("Checksum verification failed. Expected %04X but got %04X",_${field.name}Ref & 0xFFFF, ${field.name} & 0xFFFF));
     }
   }
             <#break>
@@ -67,14 +75,15 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
 
   // Const Field (${field.name})
   ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getReadBufferReadMethodCall(field.type)?no_esc};
-  if(${field.name} != ${typeName}.${field.name?upper_case}) {
-    throw new ParseException("Expected constant value " + ${typeName}.${field.name?upper_case} + " but got " + ${field.name});
+  if(${field.name} != ${helper.getCTypeName(type.name)?upper_case}_${helper.camelCaseToSnakeCase(field.name)?upper_case}) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + ${typeName}.${field.name?upper_case} + " but got " + ${field.name});
   }
             <#break>
         <#case "enum">
 
   // Enum field (${field.name})
-  ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getLanguageTypeNameForField(field)}.valueOf(${helper.getReadBufferReadMethodCall(helper.getEnumBaseType(field.type))?no_esc});
+  ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getReadBufferReadMethodCall(helper.getEnumBaseType(field.type))?no_esc};
             <#break>
         <#case "discriminator">
 
@@ -90,20 +99,20 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
 
   // Manual Field (${field.name})
   ${helper.getLanguageTypeNameForField(field)} ${field.name} = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(field, field.parseExpression, type.parserArguments)});
-  msg.${helper.camelCaseToSnakeCase(field.name)} = ${field.name};
+  msg->${helper.camelCaseToSnakeCase(field.name)} = ${field.name};
         <#break>
         <#case "optional">
 
   // Optional Field (${field.name}) (Can be skipped, if a given expression evaluates to false)
             <#if field.conditionExpression.contains("curPos")>
-  curPos = io.getPos() - startPos;
+  curPos = plc4c_spi_read_get_pos(buf) - startPos;
             </#if>
-  ${helper.getLanguageTypeNameForField(field)} ${field.name} = NULL;
+  ${helper.getLanguageTypeNameForField(field)}<#if !helper.isSimpleType(field.type)>*</#if> ${field.name} = <#if !helper.isSimpleType(field.type)>NULL<#else>0</#if>;
   if(${helper.toParseExpression(field, field.conditionExpression, type.parserArguments)?no_esc}) {
         <#if helper.isSimpleType(field.type)>
     ${field.name} = ${helper.getReadBufferReadMethodCall(field.type)?no_esc};
         <#else>
-    ${field.name} = plc4c_${helper.getCTypeName(field.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(field, parserTerm, type.parserArguments)}<#sep>, </#sep></#list></#if>);
+    plc4c_${helper.getCTypeName(field.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(field, parserTerm, type.parserArguments)}<#sep>, </#sep></#list></#if>, &${field.name});
         </#if>
   }
             <#break>
@@ -122,7 +131,7 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
   {
     ${helper.getLanguageTypeNameForField(field)} reserved = ${helper.getReadBufferReadMethodCall(field.type)?no_esc};
     if(reserved != ${helper.getReservedValue(field)}) {
-      LOGGER.info("Expected constant value " + ${field.referenceValue} + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", ${field.referenceValue}, reserved);
     }
   }
             <#break>
@@ -134,17 +143,18 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
   ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getReadBufferReadMethodCall(field.type)?no_esc};
             <#else>
             <#-- Inizialize a local variable with the complex type (Intentionally keeping the java-style names so they can be used in expressions) -->
-  ${helper.getLanguageTypeNameForField(field)} ${field.name} = plc4c_${helper.getCTypeName(field.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(field, parserTerm, type.parserArguments)}<#sep>, </#sep></#list></#if>);
+  ${helper.getLanguageTypeNameForField(field)}* ${field.name} = NULL;
+  plc4c_${helper.getCTypeName(field.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(field, parserTerm, type.parserArguments)}<#sep>, </#sep></#list></#if>, &${field.name});
             </#if>
             <#-- Update the protpery in the struct -->
-  msg.${helper.camelCaseToSnakeCase(field.name)} = ${field.name};
+  msg->${helper.camelCaseToSnakeCase(field.name)} = ${field.name};
             <#break>
         <#case "switch">
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
             <#list field.cases as case>
   <#if case.discriminatorValues?has_content>if(<#list case.discriminatorValues as discriminatorValue>plc4c_spi_evaluation_helper_equals(${helper.toSwitchExpression(field.discriminatorNames[discriminatorValue?index])?no_esc}, ${discriminatorValue})<#sep> && </#sep></#list>) </#if>{
-    plc4c_${helper.getCTypeName(case.name)}_parse(buf, msg<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
+    plc4c_${helper.getCTypeName(case.name)}_parse(buf<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>, NULL/* Disabled for now */);
   }<#sep> else </#sep>
             </#list>
             <#break>
@@ -159,6 +169,6 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_read_buffe
   return OK;
 }
 
-plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_write_buffer buf, plc4c_${helper.getCTypeName(type.name)}* message) {
+plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_write_buffer* buf, plc4c_${helper.getCTypeName(type.name)}* message) {
   return OK;
 }
diff --git a/build-utils/language-c/src/main/resources/templates/c/pojo-template-h.ftlh b/build-utils/language-c/src/main/resources/templates/c/pojo-template-h.ftlh
index 70b09b2..7f64361 100644
--- a/build-utils/language-c/src/main/resources/templates/c/pojo-template-h.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/pojo-template-h.ftlh
@@ -49,6 +49,36 @@ extern "C" {
 #include "${helper.camelCaseToSnakeCase(complexType.getName())}.h"
 </#list>
 </#if>
+<#if helper.isDiscriminatedType(type)>
+#include "${helper.camelCaseToSnakeCase(type.parentType.name)}.h"
+</#if>
+        <#--
+            Abstract types only occur as parents in the case of discriminated types.
+            As C doesn't have any form of polymorph type-system, we need to save the type information in the
+            data-structure. So with this enum we're doing exactly this. It will be used in the serializers and
+            parsers and stored in discriminated types.
+        -->
+<#if helper.isAbstractType(type)>
+
+// Enum assigning each sub-type an individual id.
+enum plc4c_${helper.getCTypeName(type.name)}_type {
+    <#list helper.getDiscriminatedSubTypes(type) as subtype>
+  plc4c_${helper.getCTypeName(type.name)}_type_${helper.getCTypeName(subtype.name)} = ${subtype?index}<#sep>,
+    </#list>
+};
+typedef enum plc4c_${helper.getCTypeName(type.name)}_type plc4c_${helper.getCTypeName(type.name)}_type;
+</#if>
+        <#--
+            When using const fields, output the constant reference values
+            as defines so we can use them elsewhere
+        -->
+<#if type.constFields?has_content>
+
+// Constant values.
+    <#list type.constFields as field>
+const ${helper.getLanguageTypeNameForField(field)} ${helper.getCTypeName(type.name)?upper_case}_${helper.camelCaseToSnakeCase(field.name)?upper_case} = ${field.referenceValue};
+    </#list>
+</#if>
 
 struct plc4c_${helper.getCTypeName(type.name)} {
 <#if helper.isAbstractType(type)>
@@ -58,27 +88,15 @@ struct plc4c_${helper.getCTypeName(type.name)} {
   plc4c_${helper.getCTypeName(type.parentType.name)}_type _type;
 </#if>
 <#list type.allPropertyFields as field>
-  ${helper.getLanguageTypeNameForField(field)} ${helper.camelCaseToSnakeCase(field.name)}${helper.getTypeSizeForField(field)}<#if field.loopType??>${helper.getLoopExpressionSuffix(field)}</#if>;
+  ${helper.getLanguageTypeNameForField(field)}<#if !helper.isSimpleType(field.type)>*</#if> ${helper.camelCaseToSnakeCase(field.name)}${helper.getTypeSizeForField(field)}<#if field.loopType??>${helper.getLoopExpressionSuffix(field)}</#if>;
 </#list>
 };
 typedef struct plc4c_${helper.getCTypeName(type.name)} plc4c_${helper.getCTypeName(type.name)};
 
-<#--
-    Abstract types only occur as parents in the case of discriminated types.
-    As C doesn't have any form of polymorph type-system, we need to save the type information in the
-    data-structure. So with this enum we're doing exactly this. It will be used in the serializers and
-    parsers and stored in discriminated types.
--->
-<#if helper.isAbstractType(type)>
-// Enum assigning each sub-type an individual id.
-enum plc4c_${helper.getCTypeName(type.name)}_type {
-  <#list helper.getDiscriminatedSubTypes(type) as subtype>
-  plc4c_${helper.getCTypeName(type.name)}_type_${helper.getCTypeName(subtype.name)} = ${subtype?index};
-  </#list>
-}
-typedef enum plc4c_${helper.getCTypeName(type.name)}_type plc4c_${helper.getCTypeName(type.name)}_type;
+plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_buffer* buf, <#if type.parserArguments?has_content><#list type.parserArguments as parserArgument>${helper.getLanguageTypeName(parserArgument.type)} ${parserArgument.name}<#sep>, </#list>, </#if>plc4c_${helper.getCTypeName(type.name)}** message);
+
+plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_write_buffer* buf, plc4c_${helper.getCTypeName(type.name)}* message);
 
-</#if>
 #ifdef __cplusplus
 }
 #endif
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 01605d4..177e4cc 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -201,10 +201,10 @@
         ]
 
         ['false','0x08','false'     ModbusPDUDiagnosticRequest
-            // TODO: Implement the sub-request discriminated type [simple uint 8  'subfunction']
+            // TODO: Implement the sub-request discriminated type
         ]
         ['false','0x08','true'      ModbusPDUDiagnosticResponse
-            // TODO: Implement the sub-request discriminated type [simple uint 8  'subfunction']
+            // TODO: Implement the sub-request discriminated type
         ]
 
         ['false','0x0B','false'     ModbusPDUGetComEventCounterRequest
diff --git a/sandbox/plc4c/api/include/plc4c/types.h b/sandbox/plc4c/api/include/plc4c/types.h
index 9681bf7..9a33247 100644
--- a/sandbox/plc4c/api/include/plc4c/types.h
+++ b/sandbox/plc4c/api/include/plc4c/types.h
@@ -45,6 +45,8 @@ typedef enum plc4c_return_code {
   NO_TRANSPORT_AVAILABLE,
   UNKNOWN_TRANSPORT,
 
+  PARSE_ERROR,
+
   UNKNOWN_ERROR,
   INTERNAL_ERROR
 } plc4c_return_code;
diff --git a/sandbox/plc4c/drivers/modbus/CMakeLists.txt b/sandbox/plc4c/drivers/modbus/CMakeLists.txt
index 35e3c53..aad5406 100644
--- a/sandbox/plc4c/drivers/modbus/CMakeLists.txt
+++ b/sandbox/plc4c/drivers/modbus/CMakeLists.txt
@@ -18,13 +18,13 @@
 ]]
 
 include_directories("include" "../../api/include" "../../spi/include"
-    "${PLC4C_ROOT_DIR}/generated-sources/plc4x/modbus/includes")
+    "${PLC4C_ROOT_DIR}/generated-sources/modbus/includes")
 
 # Add the sources
 file(GLOB sources "src/*.c")
 
 # Add the generated sources
-file(GLOB generatedSources "${PLC4C_ROOT_DIR}/target/generated-sources/plc4x/modbus/src/*.c")
+file(GLOB generatedSources "${PLC4C_ROOT_DIR}/generated-sources/modbus/src/*.c")
 
 add_library(plc4c-driver-modbus ${sources} ${generatedSources})
 
diff --git a/sandbox/plc4c/drivers/s7/CMakeLists.txt b/sandbox/plc4c/drivers/s7/CMakeLists.txt
index 75f2cdd..f9b5c63 100644
--- a/sandbox/plc4c/drivers/s7/CMakeLists.txt
+++ b/sandbox/plc4c/drivers/s7/CMakeLists.txt
@@ -18,13 +18,13 @@
 ]]
 
 include_directories("include" "../../api/include" "../../spi/include"
-    "${PLC4C_ROOT_DIR}/generated-sources/plc4x/s7/includes")
+    "${PLC4C_ROOT_DIR}/generated-sources/s7/includes")
 
 # Add the sources
 file(GLOB sources "src/*.c")
 
 # Add the generated sources
-file(GLOB generatedSources "${PLC4C_ROOT_DIR}/target/generated-sources/plc4x/s7/src/*.c")
+file(GLOB generatedSources "${PLC4C_ROOT_DIR}/generated-sources/s7/src/*.c")
 
 add_library(plc4c-driver-s7 ${sources} ${generatedSources})
 
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_constants.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_constants.h
index eb0b7e3..229620d 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_constants.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_constants.h
@@ -26,10 +26,17 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Constant values.
+const uint16_t MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT = 502;
+
 struct plc4c_modbus_read_write_modbus_constants {
 };
 typedef struct plc4c_modbus_read_write_modbus_constants plc4c_modbus_read_write_modbus_constants;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_constants** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_constants* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu.h
index c677eae..1c2ffc7 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu.h
@@ -26,54 +26,54 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_modbus_read_write_modbus_pdu_type {
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_error = 0,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_request = 1,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_response = 2,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_request = 3,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_response = 4,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_request = 5,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_response = 6,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_request = 7,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_response = 8,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_request = 9,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_response = 10,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_request = 11,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_response = 12,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_request = 13,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_response = 14,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request = 15,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response = 16,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request = 17,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response = 18,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_request = 19,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_response = 20,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_request = 21,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_response = 22,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_request = 23,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_response = 24,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_request = 25,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_response = 26,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_request = 27,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_response = 28,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_diagnostic_request = 29,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_request = 30,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_response = 31,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_request = 32,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_response = 33,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_device_identification_request = 34,
+  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_device_identification_response = 35};
+typedef enum plc4c_modbus_read_write_modbus_pdu_type plc4c_modbus_read_write_modbus_pdu_type;
+
 struct plc4c_modbus_read_write_modbus_pdu {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu plc4c_modbus_read_write_modbus_pdu;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_modbus_read_write_modbus_pdu_type {
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_error = 0;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_request = 1;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_response = 2;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_request = 3;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_response = 4;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_request = 5;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_response = 6;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_request = 7;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_response = 8;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_request = 9;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_response = 10;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_request = 11;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_response = 12;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_request = 13;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_response = 14;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request = 15;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response = 16;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request = 17;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response = 18;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_request = 19;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_response = 20;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_request = 21;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_response = 22;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_request = 23;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_response = 24;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_request = 25;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_response = 26;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_request = 27;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_response = 28;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_diagnostic_request = 29;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_diagnostic_response = 30;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_counter_request = 31;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_counter_response = 32;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_request = 33;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_response = 34;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_request = 35;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_response = 36;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_device_identification_request = 37;
-  plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_device_identification_response = 38;
-}
-typedef enum plc4c_modbus_read_write_modbus_pdu_type plc4c_modbus_read_write_modbus_pdu_type;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_request.h
index 207493e..77fa6c7 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_request.h
@@ -25,13 +25,19 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_diagnostic_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
-  uint8_t subfunction;
+  uint16_t status;
+  uint16_t event_count;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_diagnostic_request plc4c_modbus_read_write_modbus_pdu_diagnostic_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_diagnostic_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_diagnostic_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_response.h
deleted file mode 100644
index 20e6780..0000000
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_response.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-#ifndef PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_DIAGNOSTIC_RESPONSE_H_
-#define PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_DIAGNOSTIC_RESPONSE_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <plc4c/utils/list.h>
-
-struct plc4c_modbus_read_write_modbus_pdu_diagnostic_response {
-  plc4c_modbus_read_write_modbus_pdu_type _type;
-  uint8_t subfunction;
-};
-typedef struct plc4c_modbus_read_write_modbus_pdu_diagnostic_response plc4c_modbus_read_write_modbus_pdu_diagnostic_response;
-
-#ifdef __cplusplus
-}
-#endif
-#endif  // PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_DIAGNOSTIC_RESPONSE_H_
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_error.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_error.h
index 9c57c81..428be18 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_error.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_error.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_error {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_error {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_error plc4c_modbus_read_write_modbus_pdu_error;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_error** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_error* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_request.h
deleted file mode 100644
index 50aab31..0000000
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_request.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-#ifndef PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_REQUEST_H_
-#define PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_REQUEST_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <plc4c/utils/list.h>
-
-struct plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request {
-  plc4c_modbus_read_write_modbus_pdu_type _type;
-};
-typedef struct plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request;
-
-#ifdef __cplusplus
-}
-#endif
-#endif  // PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_REQUEST_H_
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_response.h
deleted file mode 100644
index 588c276..0000000
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_response.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-#ifndef PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_RESPONSE_H_
-#define PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_RESPONSE_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <plc4c/utils/list.h>
-
-struct plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response {
-  plc4c_modbus_read_write_modbus_pdu_type _type;
-  uint16_t status;
-  uint16_t event_count;
-};
-typedef struct plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response;
-
-#ifdef __cplusplus
-}
-#endif
-#endif  // PLC4C_MODBUS_READ_WRITE_MODBUS_PDU_GET_COM_EVENT_COUNTER_RESPONSE_H_
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_request.h
index fb90a89..6c32108 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_request.h
@@ -25,12 +25,17 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_response.h
index 6241582..a38198c 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -35,6 +36,10 @@ struct plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_request.h
index c4f27fe..83b4348 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -34,6 +35,10 @@ struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_response.h
index e5798c4..caac3b1 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -34,6 +35,10 @@ struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_request.h
index 963a6f3..f75a704 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_coils_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_coils_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_coils_request plc4c_modbus_read_write_modbus_pdu_read_coils_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_coils_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_response.h
index df9c96a..e8568eb 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_coils_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_coils_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_coils_response plc4c_modbus_read_write_modbus_pdu_read_coils_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_coils_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_request.h
index efc8733..a1a4f85 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_request.h
@@ -25,12 +25,17 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_device_identification_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_device_identification_request plc4c_modbus_read_write_modbus_pdu_read_device_identification_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_response.h
index 1ecc84c..057b56c 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_response.h
@@ -25,12 +25,17 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_device_identification_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_device_identification_response plc4c_modbus_read_write_modbus_pdu_read_device_identification_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_request.h
index c866138..29d0328 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_response.h
index e39fb70..a3b92d7 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_request.h
index 78ec608..5439b54 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_request.h
@@ -25,12 +25,17 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_exception_status_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_exception_status_request plc4c_modbus_read_write_modbus_pdu_read_exception_status_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_response.h
index fef29c7..4c4ab11 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_exception_status_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_exception_status_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_exception_status_response plc4c_modbus_read_write_modbus_pdu_read_exception_status_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_request.h
index 135bc43..e8764d5 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_response.h
index 5b85692..ec9d646 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request.h
index f5d26b5..7fd3533 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "modbus_pdu_read_file_record_request_item.h"
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_file_record_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_file_record_request plc4c_modbus_read_write_modbus_pdu_read_file_record_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request_item.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request_item.h
index 47606fb..fff12a4 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request_item.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request_item.h
@@ -34,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response.h
index 510878e..cc57ab2 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "modbus_pdu_read_file_record_response_item.h"
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_file_record_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_file_record_response plc4c_modbus_read_write_modbus_pdu_read_file_record_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response_item.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response_item.h
index a251d3b..2e6585e 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response_item.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response_item.h
@@ -32,6 +32,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_request.h
index 3d33c14..6f5b4bc 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_response.h
index 5eb5501..386ceb5 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_request.h
index 28b704e..e648949 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_request plc4c_modbus_read_write_modbus_pdu_read_input_registers_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_response.h
index 291f7a9..f419d3b 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_input_registers_response plc4c_modbus_read_write_modbus_pdu_read_input_registers_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_request.h
index 1810ee9..cd1caeb 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -36,6 +37,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_response.h
index 2750fc1..940743a 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_request.h
index 835a4a3..d783c41 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_request.h
@@ -25,12 +25,17 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_report_server_id_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_report_server_id_request plc4c_modbus_read_write_modbus_pdu_report_server_id_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_response.h
index c18f7c5..ac8dca7 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_report_server_id_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -32,6 +33,10 @@ struct plc4c_modbus_read_write_modbus_pdu_report_server_id_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_report_server_id_response plc4c_modbus_read_write_modbus_pdu_report_server_id_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request.h
index b75e027..fc9ddb9 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "modbus_pdu_write_file_record_request_item.h"
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_file_record_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_file_record_request plc4c_modbus_read_write_modbus_pdu_write_file_record_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request_item.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request_item.h
index 0b8ffb7..abdd962 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request_item.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request_item.h
@@ -34,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response.h
index 6eb5858..dc7f88b 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "modbus_pdu_write_file_record_response_item.h"
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_file_record_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_file_record_response plc4c_modbus_read_write_modbus_pdu_write_file_record_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response_item.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response_item.h
index a229c9d..e603f9e 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response_item.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response_item.h
@@ -34,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_request.h
index 668f556..432d5e2 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -34,6 +35,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_response.h
index 2e15690..7e95eca 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_request.h
index 1ab10f1..ed8bfb8 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -34,6 +35,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_reque
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_response.h
index d70c8b6..8279f7a 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_respo
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_request.h
index 3224cf7..6dc877b 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_request plc4c_modbus_read_write_modbus_pdu_write_single_coil_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_response.h
index d9e58f7..6e8b5bc 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_single_coil_response plc4c_modbus_read_write_modbus_pdu_write_single_coil_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_request.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_request.h
index ec5c0e1..ac8e7ad 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_request.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_request.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_single_register_request {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_single_register_request {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_single_register_request plc4c_modbus_read_write_modbus_pdu_write_single_register_request;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_request** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_response.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_response.h
index 463b319..bf0da47 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_response.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "modbus_pdu.h"
 
 struct plc4c_modbus_read_write_modbus_pdu_write_single_register_response {
   plc4c_modbus_read_write_modbus_pdu_type _type;
@@ -33,6 +34,10 @@ struct plc4c_modbus_read_write_modbus_pdu_write_single_register_response {
 };
 typedef struct plc4c_modbus_read_write_modbus_pdu_write_single_register_response plc4c_modbus_read_write_modbus_pdu_write_single_register_response;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_response** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_serial_adu.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_serial_adu.h
index 56c6bc8..c8f1b50 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_serial_adu.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_serial_adu.h
@@ -31,10 +31,14 @@ struct plc4c_modbus_read_write_modbus_serial_adu {
   uint16_t transaction_id;
   uint16_t length;
   uint8_t address;
-  plc4c_modbus_read_write_modbus_pdu pdu;
+  plc4c_modbus_read_write_modbus_pdu* pdu;
 };
 typedef struct plc4c_modbus_read_write_modbus_serial_adu plc4c_modbus_read_write_modbus_serial_adu;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_serial_adu** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_serial_adu* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/includes/modbus_tcp_adu.h b/sandbox/plc4c/generated-sources/modbus/includes/modbus_tcp_adu.h
index 47b013f..959e2f4 100644
--- a/sandbox/plc4c/generated-sources/modbus/includes/modbus_tcp_adu.h
+++ b/sandbox/plc4c/generated-sources/modbus/includes/modbus_tcp_adu.h
@@ -27,13 +27,20 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "modbus_pdu.h"
 
+// Constant values.
+const uint16_t MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER = 0x0000;
+
 struct plc4c_modbus_read_write_modbus_tcp_adu {
   uint16_t transaction_identifier;
   uint8_t unit_identifier;
-  plc4c_modbus_read_write_modbus_pdu pdu;
+  plc4c_modbus_read_write_modbus_pdu* pdu;
 };
 typedef struct plc4c_modbus_read_write_modbus_tcp_adu plc4c_modbus_read_write_modbus_tcp_adu;
 
+plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_tcp_adu** message);
+
+plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_tcp_adu* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
index f7d72c2..81774ed 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
@@ -17,27 +17,29 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_constants.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_read_buffer buf, plc4c_modbus_read_write_modbus_constants** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_constants** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_constants* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_constants));
 
   // Const Field (modbusTcpDefaultPort)
   uint16_t modbusTcpDefaultPort = plc4c_spi_read_unsigned_int(buf, 16);
-  if(modbusTcpDefaultPort != ModbusConstants.MODBUSTCPDEFAULTPORT) {
-    throw new ParseException("Expected constant value " + ModbusConstants.MODBUSTCPDEFAULTPORT + " but got " + modbusTcpDefaultPort);
+  if(modbusTcpDefaultPort != MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + ModbusConstants.MODBUSTCPDEFAULTPORT + " but got " + modbusTcpDefaultPort);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_constants* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_constants* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
index 77afde9..007dc69 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@ -17,15 +17,52 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "modbus_pdu_error.h"
+#include "modbus_pdu_read_discrete_inputs_request.h"
+#include "modbus_pdu_read_discrete_inputs_response.h"
+#include "modbus_pdu_read_coils_request.h"
+#include "modbus_pdu_read_coils_response.h"
+#include "modbus_pdu_write_single_coil_request.h"
+#include "modbus_pdu_write_single_coil_response.h"
+#include "modbus_pdu_write_multiple_coils_request.h"
+#include "modbus_pdu_write_multiple_coils_response.h"
+#include "modbus_pdu_read_input_registers_request.h"
+#include "modbus_pdu_read_input_registers_response.h"
+#include "modbus_pdu_read_holding_registers_request.h"
+#include "modbus_pdu_read_holding_registers_response.h"
+#include "modbus_pdu_write_single_register_request.h"
+#include "modbus_pdu_write_single_register_response.h"
+#include "modbus_pdu_write_multiple_holding_registers_request.h"
+#include "modbus_pdu_write_multiple_holding_registers_response.h"
+#include "modbus_pdu_read_write_multiple_holding_registers_request.h"
+#include "modbus_pdu_read_write_multiple_holding_registers_response.h"
+#include "modbus_pdu_mask_write_holding_register_request.h"
+#include "modbus_pdu_mask_write_holding_register_response.h"
+#include "modbus_pdu_read_fifo_queue_request.h"
+#include "modbus_pdu_read_fifo_queue_response.h"
+#include "modbus_pdu_read_file_record_request.h"
+#include "modbus_pdu_read_file_record_response.h"
+#include "modbus_pdu_write_file_record_request.h"
+#include "modbus_pdu_write_file_record_response.h"
+#include "modbus_pdu_read_exception_status_request.h"
+#include "modbus_pdu_read_exception_status_response.h"
+#include "modbus_pdu_diagnostic_request.h"
+#include "modbus_pdu_get_com_event_log_request.h"
+#include "modbus_pdu_get_com_event_log_response.h"
+#include "modbus_pdu_report_server_id_request.h"
+#include "modbus_pdu_report_server_id_response.h"
+#include "modbus_pdu_read_device_identification_request.h"
+#include "modbus_pdu_read_device_identification_response.h"
 
 #include "modbus_pdu.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu));
 
@@ -37,126 +74,117 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_read_buffer buf
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(error, true)) {
-    plc4c_modbus_read_write_modbus_pdu_error_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_error_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x02) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x02) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x01) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_coils_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_coils_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x01) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x05) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x05) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0F) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0F) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x04) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x04) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x03) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x03) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x06) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_write_single_register_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_single_register_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x06) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_write_single_register_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_single_register_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x10) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x10) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x17) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x17) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x16) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x16) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x18) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x18) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x14) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_file_record_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_file_record_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x14) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_file_record_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_file_record_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x15) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_write_file_record_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_file_record_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x15) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_write_file_record_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_write_file_record_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x07) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x07) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x08) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_diagnostic_request_parse(buf, msg, response);
-  } else 
-  if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x08) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_diagnostic_response_parse(buf, msg, response);
-  } else 
-  if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0B) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request_parse(buf, msg, response);
-  } else 
-  if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0B) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_diagnostic_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0C) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x0C) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x11) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_report_server_id_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_report_server_id_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x11) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_report_server_id_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_report_server_id_response_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x2B) && plc4c_spi_evaluation_helper_equals(response, false)) {
-    plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_parse(buf, response, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(error, false) && plc4c_spi_evaluation_helper_equals(function, 0x2B) && plc4c_spi_evaluation_helper_equals(response, true)) {
-    plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_parse(buf, msg, response);
+    plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_parse(buf, response, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_request.c
index 5caad7b..24f8ef7 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_request.c
@@ -17,25 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_diagnostic_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_diagnostic_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_diagnostic_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_diagnostic_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_diagnostic_request));
 
-  // Simple Field (subfunction)
-  uint8_t subfunction = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.subfunction = subfunction;
+  // Simple Field (status)
+  uint16_t status = plc4c_spi_read_unsigned_int(buf, 16);
+  msg->status = status;
+
+  // Simple Field (eventCount)
+  uint16_t eventCount = plc4c_spi_read_unsigned_int(buf, 16);
+  msg->event_count = eventCount;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_diagnostic_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_diagnostic_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_response.c
deleted file mode 100644
index b0e34c7..0000000
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_response.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-
-#include <plc4c/spi/read_buffer.h>
-#include <plc4c/spi/write_buffer.h>
-#include <plc4c/spi/evaluation_helper.h>
-
-#include "modbus_pdu_diagnostic_response.h"
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_diagnostic_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
-
-  plc4c_modbus_read_write_modbus_pdu_diagnostic_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_diagnostic_response));
-
-  // Simple Field (subfunction)
-  uint8_t subfunction = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.subfunction = subfunction;
-
-  return OK;
-}
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_diagnostic_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_diagnostic_response* message) {
-  return OK;
-}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_error.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_error.c
index 8de5d1e..a8c771b 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_error.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_error.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_error.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_error** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_error** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_error* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_error));
 
   // Simple Field (exceptionCode)
   uint8_t exceptionCode = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.exception_code = exceptionCode;
+  msg->exception_code = exceptionCode;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_error* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_error_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_error* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_request.c
deleted file mode 100644
index 7c03e99..0000000
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_request.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-
-#include <plc4c/spi/read_buffer.h>
-#include <plc4c/spi/write_buffer.h>
-#include <plc4c/spi/evaluation_helper.h>
-
-#include "modbus_pdu_get_com_event_counter_request.h"
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
-
-  plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request));
-
-  return OK;
-}
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_request* message) {
-  return OK;
-}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_response.c
deleted file mode 100644
index 5fb8c63..0000000
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_response.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-
-#include <plc4c/spi/read_buffer.h>
-#include <plc4c/spi/write_buffer.h>
-#include <plc4c/spi/evaluation_helper.h>
-
-#include "modbus_pdu_get_com_event_counter_response.h"
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
-
-  plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response));
-
-  // Simple Field (status)
-  uint16_t status = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.status = status;
-
-  // Simple Field (eventCount)
-  uint16_t eventCount = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.event_count = eventCount;
-
-  return OK;
-}
-
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_counter_response* message) {
-  return OK;
-}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_request.c
index 4435810..2e23ea2 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_get_com_event_log_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_response.c
index 14add6d..51574ef 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_get_com_event_log_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response));
 
@@ -34,19 +35,19 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_
 
   // Simple Field (status)
   uint16_t status = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.status = status;
+  msg->status = status;
 
   // Simple Field (eventCount)
   uint16_t eventCount = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.event_count = eventCount;
+  msg->event_count = eventCount;
 
   // Simple Field (messageCount)
   uint16_t messageCount = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.message_count = messageCount;
+  msg->message_count = messageCount;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_request.c
index f92bcc7..433096a 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_request.c
@@ -17,33 +17,34 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_mask_write_holding_register_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request));
 
   // Simple Field (referenceAddress)
   uint16_t referenceAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.reference_address = referenceAddress;
+  msg->reference_address = referenceAddress;
 
   // Simple Field (andMask)
   uint16_t andMask = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.and_mask = andMask;
+  msg->and_mask = andMask;
 
   // Simple Field (orMask)
   uint16_t orMask = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.or_mask = orMask;
+  msg->or_mask = orMask;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_response.c
index bd4e662..833a240 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_response.c
@@ -17,33 +17,34 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_mask_write_holding_register_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response));
 
   // Simple Field (referenceAddress)
   uint16_t referenceAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.reference_address = referenceAddress;
+  msg->reference_address = referenceAddress;
 
   // Simple Field (andMask)
   uint16_t andMask = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.and_mask = andMask;
+  msg->and_mask = andMask;
 
   // Simple Field (orMask)
   uint16_t orMask = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.or_mask = orMask;
+  msg->or_mask = orMask;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_request.c
index 353749d..31623dd 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_coils_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_coils_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_coils_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_coils_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_coils_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_response.c
index a5448cf..d52961a 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_coils_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_coils_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_coils_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_coils_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_parse(p
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_coils_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_coils_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_coils_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_request.c
index fe20273..3ac7929 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_device_identification_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_device_identification_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_device_identification_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_response.c
index 9292e06..9117860 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_response.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_device_identification_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_device_identification_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_device_identification_response));
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_device_identification_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_device_identification_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_request.c
index 6565c60..866940c 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_discrete_inputs_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_response.c
index 8898106..cb0c60f 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_discrete_inputs_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_respon
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_request.c
index 8a8ffae..e66b7f2 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_exception_status_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_exception_status_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_exception_status_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_response.c
index 0657f79..567ce6f 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_response.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_exception_status_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_exception_status_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_exception_status_response));
 
   // Simple Field (value)
   uint8_t value = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.value = value;
+  msg->value = value;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_exception_status_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_exception_status_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_request.c
index 1935118..bf14a47 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_request.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_fifo_queue_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request));
 
   // Simple Field (fifoPointerAddress)
   uint16_t fifoPointerAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.fifo_pointer_address = fifoPointerAddress;
+  msg->fifo_pointer_address = fifoPointerAddress;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_response.c
index c19bb71..51487c5 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_fifo_queue_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response));
 
@@ -38,6 +39,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_pa
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request.c
index 0f1e5f2..956fae1 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_file_record_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_file_record_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_request));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_pa
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
index 7cc2598..e5ca52c 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
@@ -17,37 +17,38 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_file_record_request_item.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(plc4c_read_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item));
 
   // Simple Field (referenceType)
   uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.reference_type = referenceType;
+  msg->reference_type = referenceType;
 
   // Simple Field (fileNumber)
   uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.file_number = fileNumber;
+  msg->file_number = fileNumber;
 
   // Simple Field (recordNumber)
   uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.record_number = recordNumber;
+  msg->record_number = recordNumber;
 
   // Simple Field (recordLength)
   uint16_t recordLength = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.record_length = recordLength;
+  msg->record_length = recordLength;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response.c
index fe61cd2..10149d0 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_file_record_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_file_record_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_file_record_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_p
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
index 99146de..e135d25 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_file_record_response_item.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(plc4c_read_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item));
 
@@ -34,11 +35,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_i
 
   // Simple Field (referenceType)
   uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.reference_type = referenceType;
+  msg->reference_type = referenceType;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_request.c
index 60f2da1..a75cbb7 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_holding_registers_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_response.c
index 52d9760..2474213 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_holding_registers_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_resp
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_request.c
index fa79426..34221b1 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_input_registers_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_input_registers_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_input_registers_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_response.c
index e065f5b..2b949eb 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_input_registers_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_input_registers_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_input_registers_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_respon
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_input_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_input_registers_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_request.c
index 1f2106c..52a225c 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_request.c
@@ -17,33 +17,34 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_write_multiple_holding_registers_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request));
 
   // Simple Field (readStartingAddress)
   uint16_t readStartingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.read_starting_address = readStartingAddress;
+  msg->read_starting_address = readStartingAddress;
 
   // Simple Field (readQuantity)
   uint16_t readQuantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.read_quantity = readQuantity;
+  msg->read_quantity = readQuantity;
 
   // Simple Field (writeStartingAddress)
   uint16_t writeStartingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.write_starting_address = writeStartingAddress;
+  msg->write_starting_address = writeStartingAddress;
 
   // Simple Field (writeQuantity)
   uint16_t writeQuantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.write_quantity = writeQuantity;
+  msg->write_quantity = writeQuantity;
 
   // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint8_t byteCount = plc4c_spi_read_unsigned_short(buf, 8);
@@ -51,6 +52,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_response.c
index 96b7642..17ca89e 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_read_write_multiple_holding_registers_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_request.c
index d945dd1..b2b01f7 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_report_server_id_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_report_server_id_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_report_server_id_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_response.c
index ffef818..c1222fe 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_report_server_id_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_report_server_id_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_report_server_id_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_report_server_id_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_p
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_report_server_id_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_report_server_id_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request.c
index 1ab0ed2..df2088d 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_file_record_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_file_record_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_request));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_p
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
index 5c146a3..9d40141 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_file_record_request_item.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(plc4c_read_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item));
 
   // Simple Field (referenceType)
   uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.reference_type = referenceType;
+  msg->reference_type = referenceType;
 
   // Simple Field (fileNumber)
   uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.file_number = fileNumber;
+  msg->file_number = fileNumber;
 
   // Simple Field (recordNumber)
   uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.record_number = recordNumber;
+  msg->record_number = recordNumber;
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint16_t recordLength = plc4c_spi_read_unsigned_int(buf, 16);
@@ -47,6 +48,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response.c
index 5e17a24..152bfe9 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_file_record_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_file_record_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_file_record_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_response));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
index e760c0a..aa8283a 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_file_record_response_item.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(plc4c_read_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(plc4c_spi_read_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item));
 
   // Simple Field (referenceType)
   uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.reference_type = referenceType;
+  msg->reference_type = referenceType;
 
   // Simple Field (fileNumber)
   uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.file_number = fileNumber;
+  msg->file_number = fileNumber;
 
   // Simple Field (recordNumber)
   uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.record_number = recordNumber;
+  msg->record_number = recordNumber;
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint16_t recordLength = plc4c_spi_read_unsigned_int(buf, 16);
@@ -47,6 +48,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_request.c
index a292668..d6f1815 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_request.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_multiple_coils_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint8_t byteCount = plc4c_spi_read_unsigned_short(buf, 8);
@@ -43,6 +44,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_reques
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_response.c
index 3459bdd..63ad564 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_multiple_coils_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_request.c
index cd4858f..16df2df 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_request.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_multiple_holding_registers_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint8_t byteCount = plc4c_spi_read_unsigned_short(buf, 8);
@@ -43,6 +44,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_regi
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_response.c
index 07425ac..783d1c6 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_multiple_holding_registers_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response));
 
   // Simple Field (startingAddress)
   uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.starting_address = startingAddress;
+  msg->starting_address = startingAddress;
 
   // Simple Field (quantity)
   uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.quantity = quantity;
+  msg->quantity = quantity;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_request.c
index 56afdad..a30555c 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_single_coil_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_single_coil_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_single_coil_request));
 
   // Simple Field (address)
   uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.address = address;
+  msg->address = address;
 
   // Simple Field (value)
   uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.value = value;
+  msg->value = value;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_response.c
index b20210c..d43928d 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_single_coil_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_single_coil_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_single_coil_response));
 
   // Simple Field (address)
   uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.address = address;
+  msg->address = address;
 
   // Simple Field (value)
   uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.value = value;
+  msg->value = value;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_coil_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_coil_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_request.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_request.c
index e667788..9d21ee6 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_request.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_request.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_single_register_request.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_single_register_request* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_single_register_request));
 
   // Simple Field (address)
   uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.address = address;
+  msg->address = address;
 
   // Simple Field (value)
   uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.value = value;
+  msg->value = value;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_request* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_request_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_response.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_response.c
index da587e5..ca74c75 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_response.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_pdu_write_single_register_response.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_pdu_write_single_register_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_pdu_write_single_register_response* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_single_register_response));
 
   // Simple Field (address)
   uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.address = address;
+  msg->address = address;
 
   // Simple Field (value)
   uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.value = value;
+  msg->value = value;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_response* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_single_register_response_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_single_register_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
index 5f47244..de5bef3 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
@@ -17,45 +17,47 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_serial_adu.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_serial_adu** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_serial_adu** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_serial_adu* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_serial_adu));
 
   // Simple Field (transactionId)
   uint16_t transactionId = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.transaction_id = transactionId;
+  msg->transaction_id = transactionId;
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
     uint16_t reserved = plc4c_spi_read_unsigned_int(buf, 16);
     if(reserved != (uint16_t) 0x0000) {
-      LOGGER.info("Expected constant value " + 0x0000 + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", 0x0000, reserved);
     }
   }
 
   // Simple Field (length)
   uint16_t length = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.length = length;
+  msg->length = length;
 
   // Simple Field (address)
   uint8_t address = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.address = address;
+  msg->address = address;
 
   // Simple Field (pdu)
-  plc4c_modbus_read_write_modbus_pdu pdu = plc4c_modbus_read_write_modbus_pdu_parse(buf, response);
-  msg.pdu = pdu;
+  plc4c_modbus_read_write_modbus_pdu* pdu = NULL;
+  plc4c_modbus_read_write_modbus_pdu_parse(buf, response, &pdu);
+  msg->pdu = pdu;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_serial_adu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_serial_adu* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
index ed24a67..cefbc85 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
@@ -17,26 +17,28 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "modbus_tcp_adu.h"
 
-plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_read_buffer buf, bool response, plc4c_modbus_read_write_modbus_tcp_adu** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_spi_read_buffer* buf, bool response, plc4c_modbus_read_write_modbus_tcp_adu** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_modbus_read_write_modbus_tcp_adu* msg = malloc(sizeof(plc4c_modbus_read_write_modbus_tcp_adu));
 
   // Simple Field (transactionIdentifier)
   uint16_t transactionIdentifier = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.transaction_identifier = transactionIdentifier;
+  msg->transaction_identifier = transactionIdentifier;
 
   // Const Field (protocolIdentifier)
   uint16_t protocolIdentifier = plc4c_spi_read_unsigned_int(buf, 16);
-  if(protocolIdentifier != ModbusTcpADU.PROTOCOLIDENTIFIER) {
-    throw new ParseException("Expected constant value " + ModbusTcpADU.PROTOCOLIDENTIFIER + " but got " + protocolIdentifier);
+  if(protocolIdentifier != MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + ModbusTcpADU.PROTOCOLIDENTIFIER + " but got " + protocolIdentifier);
   }
 
   // Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
@@ -44,15 +46,16 @@ plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_read_buffer
 
   // Simple Field (unitIdentifier)
   uint8_t unitIdentifier = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.unit_identifier = unitIdentifier;
+  msg->unit_identifier = unitIdentifier;
 
   // Simple Field (pdu)
-  plc4c_modbus_read_write_modbus_pdu pdu = plc4c_modbus_read_write_modbus_pdu_parse(buf, response);
-  msg.pdu = pdu;
+  plc4c_modbus_read_write_modbus_pdu* pdu = NULL;
+  plc4c_modbus_read_write_modbus_pdu_parse(buf, response, &pdu);
+  msg->pdu = pdu;
 
   return OK;
 }
 
-plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_write_buffer buf, plc4c_modbus_read_write_modbus_tcp_adu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_tcp_adu* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet.h
index cdc69a0..c612308 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet.h
@@ -28,23 +28,26 @@ extern "C" {
 #include "cotp_parameter.h"
 #include "s7_message.h"
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_cotp_packet_type {
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_data = 0,
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_request = 1,
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_response = 2,
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_request = 3,
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_response = 4,
+  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_tpdu_error = 5};
+typedef enum plc4c_s7_read_write_cotp_packet_type plc4c_s7_read_write_cotp_packet_type;
+
 struct plc4c_s7_read_write_cotp_packet {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
 };
 typedef struct plc4c_s7_read_write_cotp_packet plc4c_s7_read_write_cotp_packet;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_cotp_packet_type {
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_data = 0;
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_request = 1;
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_response = 2;
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_request = 3;
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_response = 4;
-  plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_tpdu_error = 5;
-}
-typedef enum plc4c_s7_read_write_cotp_packet_type plc4c_s7_read_write_cotp_packet_type;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_request.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_request.h
index 4da4dee..caa8bc3 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_request.h
@@ -28,17 +28,22 @@ extern "C" {
 #include "cotp_parameter.h"
 #include "s7_message.h"
 #include "cotp_protocol_class.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_connection_request {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   uint16_t destination_reference;
   uint16_t source_reference;
-  plc4c_s7_read_write_cotp_protocol_class protocol_class;
+  plc4c_s7_read_write_cotp_protocol_class* protocol_class;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_connection_request plc4c_s7_read_write_cotp_packet_connection_request;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_request** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_connection_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_response.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_response.h
index 5557b7f..90712c0 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_response.h
@@ -28,17 +28,22 @@ extern "C" {
 #include "cotp_parameter.h"
 #include "s7_message.h"
 #include "cotp_protocol_class.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_connection_response {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   uint16_t destination_reference;
   uint16_t source_reference;
-  plc4c_s7_read_write_cotp_protocol_class protocol_class;
+  plc4c_s7_read_write_cotp_protocol_class* protocol_class;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_connection_response plc4c_s7_read_write_cotp_packet_connection_response;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_response** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_connection_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_data.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_data.h
index d15456b..cc13512 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_data.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_data.h
@@ -27,16 +27,21 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "cotp_parameter.h"
 #include "s7_message.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_data {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   bool eot : 1;
   unsigned int tpdu_ref : 7;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_data plc4c_s7_read_write_cotp_packet_data;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_data_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_data** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_data* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_request.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_request.h
index f77b5cb..c7c1a87 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_request.h
@@ -28,17 +28,22 @@ extern "C" {
 #include "cotp_parameter.h"
 #include "s7_message.h"
 #include "cotp_protocol_class.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_disconnect_request {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   uint16_t destination_reference;
   uint16_t source_reference;
-  plc4c_s7_read_write_cotp_protocol_class protocol_class;
+  plc4c_s7_read_write_cotp_protocol_class* protocol_class;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_disconnect_request plc4c_s7_read_write_cotp_packet_disconnect_request;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_request** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_disconnect_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_response.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_response.h
index c03ec0e..4dac72a 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_response.h
@@ -27,16 +27,21 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "cotp_parameter.h"
 #include "s7_message.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_disconnect_response {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   uint16_t destination_reference;
   uint16_t source_reference;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_disconnect_response plc4c_s7_read_write_cotp_packet_disconnect_response;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_response** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_disconnect_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_tpdu_error.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_tpdu_error.h
index 1077763..9274876 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_tpdu_error.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_packet_tpdu_error.h
@@ -27,16 +27,21 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "cotp_parameter.h"
 #include "s7_message.h"
+#include "cotp_packet.h"
 
 struct plc4c_s7_read_write_cotp_packet_tpdu_error {
   plc4c_s7_read_write_cotp_packet_type _type;
-  plc4c_list parameters;
-  plc4c_s7_read_write_s7_message payload;
+  plc4c_list* parameters;
+  plc4c_s7_read_write_s7_message* payload;
   uint16_t destination_reference;
   uint8_t reject_cause;
 };
 typedef struct plc4c_s7_read_write_cotp_packet_tpdu_error plc4c_s7_read_write_cotp_packet_tpdu_error;
 
+plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_tpdu_error** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_tpdu_error* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter.h
index dcd057a..9ba1750 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter.h
@@ -26,20 +26,23 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_cotp_parameter_type {
+  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_tpdu_size = 0,
+  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_calling_tsap = 1,
+  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_called_tsap = 2,
+  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_checksum = 3,
+  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_disconnect_additional_information = 4};
+typedef enum plc4c_s7_read_write_cotp_parameter_type plc4c_s7_read_write_cotp_parameter_type;
+
 struct plc4c_s7_read_write_cotp_parameter {
   plc4c_s7_read_write_cotp_parameter_type _type;
 };
 typedef struct plc4c_s7_read_write_cotp_parameter plc4c_s7_read_write_cotp_parameter;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_cotp_parameter_type {
-  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_tpdu_size = 0;
-  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_calling_tsap = 1;
-  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_called_tsap = 2;
-  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_checksum = 3;
-  plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_disconnect_additional_information = 4;
-}
-typedef enum plc4c_s7_read_write_cotp_parameter_type plc4c_s7_read_write_cotp_parameter_type;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_called_tsap.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_called_tsap.h
index e5b13cd..4712030 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_called_tsap.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_called_tsap.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "cotp_parameter.h"
 
 struct plc4c_s7_read_write_cotp_parameter_called_tsap {
   plc4c_s7_read_write_cotp_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_cotp_parameter_called_tsap {
 };
 typedef struct plc4c_s7_read_write_cotp_parameter_called_tsap plc4c_s7_read_write_cotp_parameter_called_tsap;
 
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_called_tsap** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_called_tsap* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_calling_tsap.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_calling_tsap.h
index c33ab4a..917a6b6 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_calling_tsap.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_calling_tsap.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "cotp_parameter.h"
 
 struct plc4c_s7_read_write_cotp_parameter_calling_tsap {
   plc4c_s7_read_write_cotp_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_cotp_parameter_calling_tsap {
 };
 typedef struct plc4c_s7_read_write_cotp_parameter_calling_tsap plc4c_s7_read_write_cotp_parameter_calling_tsap;
 
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_calling_tsap** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_calling_tsap* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_checksum.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_checksum.h
index 141462a..1aa836a 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_checksum.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_checksum.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "cotp_parameter.h"
 
 struct plc4c_s7_read_write_cotp_parameter_checksum {
   plc4c_s7_read_write_cotp_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_cotp_parameter_checksum {
 };
 typedef struct plc4c_s7_read_write_cotp_parameter_checksum plc4c_s7_read_write_cotp_parameter_checksum;
 
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_checksum** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_checksum* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_disconnect_additional_information.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_disconnect_additional_information.h
index 56b7ec5..2809b62 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_disconnect_additional_information.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_disconnect_additional_information.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "cotp_parameter.h"
 
 struct plc4c_s7_read_write_cotp_parameter_disconnect_additional_information {
   plc4c_s7_read_write_cotp_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_cotp_parameter_disconnect_additional_information {
 };
 typedef struct plc4c_s7_read_write_cotp_parameter_disconnect_additional_information plc4c_s7_read_write_cotp_parameter_disconnect_additional_information;
 
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_tpdu_size.h b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_tpdu_size.h
index 3d5bf1c..8d9a44f 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_tpdu_size.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_tpdu_size.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "cotp_tpdu_size.h"
+#include "cotp_parameter.h"
 
 struct plc4c_s7_read_write_cotp_parameter_tpdu_size {
   plc4c_s7_read_write_cotp_parameter_type _type;
-  plc4c_s7_read_write_cotp_tpdu_size tpdu_size;
+  plc4c_s7_read_write_cotp_tpdu_size* tpdu_size;
 };
 typedef struct plc4c_s7_read_write_cotp_parameter_tpdu_size plc4c_s7_read_write_cotp_parameter_tpdu_size;
 
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_tpdu_size** message);
+
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_tpdu_size* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_address.h b/sandbox/plc4c/generated-sources/s7/includes/s7_address.h
index 98bcdec..3976fc8 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_address.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_address.h
@@ -26,16 +26,19 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_address_type {
+  plc4c_s7_read_write_s7_address_type_s7_read_write_s7_address_any = 0};
+typedef enum plc4c_s7_read_write_s7_address_type plc4c_s7_read_write_s7_address_type;
+
 struct plc4c_s7_read_write_s7_address {
   plc4c_s7_read_write_s7_address_type _type;
 };
 typedef struct plc4c_s7_read_write_s7_address plc4c_s7_read_write_s7_address;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_address_type {
-  plc4c_s7_read_write_s7_address_type_s7_read_write_s7_address_any = 0;
-}
-typedef enum plc4c_s7_read_write_s7_address_type plc4c_s7_read_write_s7_address_type;
+plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_address** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_address_any.h b/sandbox/plc4c/generated-sources/s7/includes/s7_address_any.h
index 42d42f3..926ada6 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_address_any.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_address_any.h
@@ -27,18 +27,23 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "transport_size.h"
 #include "memory_area.h"
+#include "s7_address.h"
 
 struct plc4c_s7_read_write_s7_address_any {
   plc4c_s7_read_write_s7_address_type _type;
-  plc4c_s7_read_write_transport_size transport_size;
+  plc4c_s7_read_write_transport_size* transport_size;
   uint16_t number_of_elements;
   uint16_t db_number;
-  plc4c_s7_read_write_memory_area area;
+  plc4c_s7_read_write_memory_area* area;
   uint16_t byte_address;
   unsigned int bit_address : 3;
 };
 typedef struct plc4c_s7_read_write_s7_address_any plc4c_s7_read_write_s7_address_any;
 
+plc4c_return_code plc4c_s7_read_write_s7_address_any_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_address_any** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_address_any_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address_any* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_message.h b/sandbox/plc4c/generated-sources/s7/includes/s7_message.h
index 9092be9..5043cb9 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_message.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_message.h
@@ -28,22 +28,28 @@ extern "C" {
 #include "s7_parameter.h"
 #include "s7_payload.h"
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_message_type {
+  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_request = 0,
+  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response = 1,
+  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response_data = 2,
+  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_user_data = 3};
+typedef enum plc4c_s7_read_write_s7_message_type plc4c_s7_read_write_s7_message_type;
+
+// Constant values.
+const uint8_t S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID = 0x32;
+
 struct plc4c_s7_read_write_s7_message {
   plc4c_s7_read_write_s7_message_type _type;
   uint16_t tpdu_reference;
-  plc4c_s7_read_write_s7_parameter parameter;
-  plc4c_s7_read_write_s7_payload payload;
+  plc4c_s7_read_write_s7_parameter* parameter;
+  plc4c_s7_read_write_s7_payload* payload;
 };
 typedef struct plc4c_s7_read_write_s7_message plc4c_s7_read_write_s7_message;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_message_type {
-  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_request = 0;
-  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response = 1;
-  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response_data = 2;
-  plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_user_data = 3;
-}
-typedef enum plc4c_s7_read_write_s7_message_type plc4c_s7_read_write_s7_message_type;
+plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_message_request.h b/sandbox/plc4c/generated-sources/s7/includes/s7_message_request.h
index 11da856..5a32198 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_message_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_message_request.h
@@ -27,15 +27,20 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "s7_parameter.h"
 #include "s7_payload.h"
+#include "s7_message.h"
 
 struct plc4c_s7_read_write_s7_message_request {
   plc4c_s7_read_write_s7_message_type _type;
   uint16_t tpdu_reference;
-  plc4c_s7_read_write_s7_parameter parameter;
-  plc4c_s7_read_write_s7_payload payload;
+  plc4c_s7_read_write_s7_parameter* parameter;
+  plc4c_s7_read_write_s7_payload* payload;
 };
 typedef struct plc4c_s7_read_write_s7_message_request plc4c_s7_read_write_s7_message_request;
 
+plc4c_return_code plc4c_s7_read_write_s7_message_request_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_request** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_message_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_message_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_message_response.h
index 991645c..31544e7 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_message_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_message_response.h
@@ -27,17 +27,22 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "s7_parameter.h"
 #include "s7_payload.h"
+#include "s7_message.h"
 
 struct plc4c_s7_read_write_s7_message_response {
   plc4c_s7_read_write_s7_message_type _type;
   uint16_t tpdu_reference;
-  plc4c_s7_read_write_s7_parameter parameter;
-  plc4c_s7_read_write_s7_payload payload;
+  plc4c_s7_read_write_s7_parameter* parameter;
+  plc4c_s7_read_write_s7_payload* payload;
   uint8_t error_class;
   uint8_t error_code;
 };
 typedef struct plc4c_s7_read_write_s7_message_response plc4c_s7_read_write_s7_message_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_message_response_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_message_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_message_response_data.h b/sandbox/plc4c/generated-sources/s7/includes/s7_message_response_data.h
index ae6421f..7089033 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_message_response_data.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_message_response_data.h
@@ -27,17 +27,22 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "s7_parameter.h"
 #include "s7_payload.h"
+#include "s7_message.h"
 
 struct plc4c_s7_read_write_s7_message_response_data {
   plc4c_s7_read_write_s7_message_type _type;
   uint16_t tpdu_reference;
-  plc4c_s7_read_write_s7_parameter parameter;
-  plc4c_s7_read_write_s7_payload payload;
+  plc4c_s7_read_write_s7_parameter* parameter;
+  plc4c_s7_read_write_s7_payload* payload;
   uint8_t error_class;
   uint8_t error_code;
 };
 typedef struct plc4c_s7_read_write_s7_message_response_data plc4c_s7_read_write_s7_message_response_data;
 
+plc4c_return_code plc4c_s7_read_write_s7_message_response_data_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_response_data** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_message_response_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_response_data* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_message_user_data.h b/sandbox/plc4c/generated-sources/s7/includes/s7_message_user_data.h
index 488b539..2b9e246 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_message_user_data.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_message_user_data.h
@@ -27,15 +27,20 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "s7_parameter.h"
 #include "s7_payload.h"
+#include "s7_message.h"
 
 struct plc4c_s7_read_write_s7_message_user_data {
   plc4c_s7_read_write_s7_message_type _type;
   uint16_t tpdu_reference;
-  plc4c_s7_read_write_s7_parameter parameter;
-  plc4c_s7_read_write_s7_payload payload;
+  plc4c_s7_read_write_s7_parameter* parameter;
+  plc4c_s7_read_write_s7_payload* payload;
 };
 typedef struct plc4c_s7_read_write_s7_message_user_data plc4c_s7_read_write_s7_message_user_data;
 
+plc4c_return_code plc4c_s7_read_write_s7_message_user_data_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_user_data** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_message_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_user_data* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter.h
index e7b90a4..36d53a2 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter.h
@@ -26,21 +26,24 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_parameter_type {
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_setup_communication = 0,
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_request = 1,
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_response = 2,
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_request = 3,
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_response = 4,
+  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_user_data = 5};
+typedef enum plc4c_s7_read_write_s7_parameter_type plc4c_s7_read_write_s7_parameter_type;
+
 struct plc4c_s7_read_write_s7_parameter {
   plc4c_s7_read_write_s7_parameter_type _type;
 };
 typedef struct plc4c_s7_read_write_s7_parameter plc4c_s7_read_write_s7_parameter;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_parameter_type {
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_setup_communication = 0;
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_request = 1;
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_response = 2;
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_request = 3;
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_response = 4;
-  plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_user_data = 5;
-}
-typedef enum plc4c_s7_read_write_s7_parameter_type plc4c_s7_read_write_s7_parameter_type;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_request.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_request.h
index c26e8ca..5fb945d 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_request.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_var_request_parameter_item.h"
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_read_var_request {
   plc4c_s7_read_write_s7_parameter_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_parameter_read_var_request plc4c_s7_read_write_s7_parameter_read_var_request;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_request** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_read_var_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_response.h
index 850b578..90de951 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_read_var_response {
   plc4c_s7_read_write_s7_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_s7_parameter_read_var_response {
 };
 typedef struct plc4c_s7_read_write_s7_parameter_read_var_response plc4c_s7_read_write_s7_parameter_read_var_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_read_var_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_setup_communication.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_setup_communication.h
index e5fc05e..b109e65 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_setup_communication.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_setup_communication.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_setup_communication {
   plc4c_s7_read_write_s7_parameter_type _type;
@@ -34,6 +35,10 @@ struct plc4c_s7_read_write_s7_parameter_setup_communication {
 };
 typedef struct plc4c_s7_read_write_s7_parameter_setup_communication plc4c_s7_read_write_s7_parameter_setup_communication;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_setup_communication** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_setup_communication* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data.h
index 6f7e045..5374da3 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_parameter_user_data_item.h"
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_user_data {
   plc4c_s7_read_write_s7_parameter_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_parameter_user_data plc4c_s7_read_write_s7_parameter_user_data;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_user_data** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item.h
index 130a278..fa3f84f 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item.h
@@ -26,16 +26,19 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_parameter_user_data_item_type {
+  plc4c_s7_read_write_s7_parameter_user_data_item_type_s7_read_write_s7_parameter_user_data_item_cpu_functions = 0};
+typedef enum plc4c_s7_read_write_s7_parameter_user_data_item_type plc4c_s7_read_write_s7_parameter_user_data_item_type;
+
 struct plc4c_s7_read_write_s7_parameter_user_data_item {
   plc4c_s7_read_write_s7_parameter_user_data_item_type _type;
 };
 typedef struct plc4c_s7_read_write_s7_parameter_user_data_item plc4c_s7_read_write_s7_parameter_user_data_item;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_parameter_user_data_item_type {
-  plc4c_s7_read_write_s7_parameter_user_data_item_type_s7_read_write_s7_parameter_user_data_item_cpu_functions = 0;
-}
-typedef enum plc4c_s7_read_write_s7_parameter_user_data_item_type plc4c_s7_read_write_s7_parameter_user_data_item_type;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item_cpu_functions.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item_cpu_functions.h
index 84a0e12..994a962 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item_cpu_functions.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item_cpu_functions.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "s7_parameter_user_data_item.h"
 
 struct plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions {
   plc4c_s7_read_write_s7_parameter_user_data_item_type _type;
@@ -39,6 +40,10 @@ struct plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions {
 };
 typedef struct plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_request.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_request.h
index 0b110d3..e5c6b60 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_request.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_var_request_parameter_item.h"
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_write_var_request {
   plc4c_s7_read_write_s7_parameter_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_parameter_write_var_request plc4c_s7_read_write_s7_parameter_write_var_request;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_request** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_write_var_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_response.h
index 62d1547..e13deb2 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_response.h
@@ -25,6 +25,7 @@ extern "C" {
 #include <stdbool.h>
 #include <stdint.h>
 #include <plc4c/utils/list.h>
+#include "s7_parameter.h"
 
 struct plc4c_s7_read_write_s7_parameter_write_var_response {
   plc4c_s7_read_write_s7_parameter_type _type;
@@ -32,6 +33,10 @@ struct plc4c_s7_read_write_s7_parameter_write_var_response {
 };
 typedef struct plc4c_s7_read_write_s7_parameter_write_var_response plc4c_s7_read_write_s7_parameter_write_var_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_write_var_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload.h
index a738e19..628e022 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload.h
@@ -26,19 +26,22 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_payload_type {
+  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_read_var_response = 0,
+  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_write_var_request = 1,
+  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_write_var_response = 2,
+  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_user_data = 3};
+typedef enum plc4c_s7_read_write_s7_payload_type plc4c_s7_read_write_s7_payload_type;
+
 struct plc4c_s7_read_write_s7_payload {
   plc4c_s7_read_write_s7_payload_type _type;
 };
 typedef struct plc4c_s7_read_write_s7_payload plc4c_s7_read_write_s7_payload;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_payload_type {
-  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_read_var_response = 0;
-  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_write_var_request = 1;
-  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_write_var_response = 2;
-  plc4c_s7_read_write_s7_payload_type_s7_read_write_s7_payload_user_data = 3;
-}
-typedef enum plc4c_s7_read_write_s7_payload_type plc4c_s7_read_write_s7_payload_type;
+plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_read_var_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_read_var_response.h
index bd1df28..b4601a6 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_read_var_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_read_var_response.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_var_payload_data_item.h"
+#include "s7_payload.h"
 
 struct plc4c_s7_read_write_s7_payload_read_var_response {
   plc4c_s7_read_write_s7_payload_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_payload_read_var_response plc4c_s7_read_write_s7_payload_read_var_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_read_var_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_read_var_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data.h
index 74deafe..83f714b 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_payload_user_data_item.h"
+#include "s7_payload.h"
 
 struct plc4c_s7_read_write_s7_payload_user_data {
   plc4c_s7_read_write_s7_payload_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_payload_user_data plc4c_s7_read_write_s7_payload_user_data;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_user_data** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item.h
index f2792ab..72beb17 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item.h
@@ -29,21 +29,24 @@ extern "C" {
 #include "data_transport_size.h"
 #include "szl_id.h"
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_payload_user_data_item_type {
+  plc4c_s7_read_write_s7_payload_user_data_item_type_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request = 0,
+  plc4c_s7_read_write_s7_payload_user_data_item_type_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response = 1};
+typedef enum plc4c_s7_read_write_s7_payload_user_data_item_type plc4c_s7_read_write_s7_payload_user_data_item_type;
+
 struct plc4c_s7_read_write_s7_payload_user_data_item {
   plc4c_s7_read_write_s7_payload_user_data_item_type _type;
-  plc4c_s7_read_write_data_transport_error_code return_code;
-  plc4c_s7_read_write_data_transport_size transport_size;
-  plc4c_s7_read_write_szl_id szl_id;
+  plc4c_s7_read_write_data_transport_error_code* return_code;
+  plc4c_s7_read_write_data_transport_size* transport_size;
+  plc4c_s7_read_write_szl_id* szl_id;
   uint16_t szl_index;
 };
 typedef struct plc4c_s7_read_write_s7_payload_user_data_item plc4c_s7_read_write_s7_payload_user_data_item;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_payload_user_data_item_type {
-  plc4c_s7_read_write_s7_payload_user_data_item_type_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request = 0;
-  plc4c_s7_read_write_s7_payload_user_data_item_type_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response = 1;
-}
-typedef enum plc4c_s7_read_write_s7_payload_user_data_item_type plc4c_s7_read_write_s7_payload_user_data_item_type;
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_request.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_request.h
index 0794322..dd3db17 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_request.h
@@ -28,16 +28,21 @@ extern "C" {
 #include "data_transport_error_code.h"
 #include "data_transport_size.h"
 #include "szl_id.h"
+#include "s7_payload_user_data_item.h"
 
 struct plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request {
   plc4c_s7_read_write_s7_payload_user_data_item_type _type;
-  plc4c_s7_read_write_data_transport_error_code return_code;
-  plc4c_s7_read_write_data_transport_size transport_size;
-  plc4c_s7_read_write_szl_id szl_id;
+  plc4c_s7_read_write_data_transport_error_code* return_code;
+  plc4c_s7_read_write_data_transport_size* transport_size;
+  plc4c_s7_read_write_szl_id* szl_id;
   uint16_t szl_index;
 };
 typedef struct plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_response.h
index e95ccdc..1c46ee6 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_response.h
@@ -29,17 +29,25 @@ extern "C" {
 #include "data_transport_size.h"
 #include "szl_id.h"
 #include "szl_data_tree_item.h"
+#include "s7_payload_user_data_item.h"
+
+// Constant values.
+const uint16_t S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_READ_SZL_RESPONSE_SZL_ITEM_LENGTH = 28;
 
 struct plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response {
   plc4c_s7_read_write_s7_payload_user_data_item_type _type;
-  plc4c_s7_read_write_data_transport_error_code return_code;
-  plc4c_s7_read_write_data_transport_size transport_size;
-  plc4c_s7_read_write_szl_id szl_id;
+  plc4c_s7_read_write_data_transport_error_code* return_code;
+  plc4c_s7_read_write_data_transport_size* transport_size;
+  plc4c_s7_read_write_szl_id* szl_id;
   uint16_t szl_index;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_request.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_request.h
index 67373eb..4e88a93 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_request.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_request.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_var_payload_data_item.h"
+#include "s7_payload.h"
 
 struct plc4c_s7_read_write_s7_payload_write_var_request {
   plc4c_s7_read_write_s7_payload_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_payload_write_var_request plc4c_s7_read_write_s7_payload_write_var_request;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_request** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_write_var_request* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_response.h b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_response.h
index 7e39e39..7854ae4 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_response.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_response.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_var_payload_status_item.h"
+#include "s7_payload.h"
 
 struct plc4c_s7_read_write_s7_payload_write_var_response {
   plc4c_s7_read_write_s7_payload_type _type;
-  plc4c_list items;
+  plc4c_list* items;
 };
 typedef struct plc4c_s7_read_write_s7_payload_write_var_response plc4c_s7_read_write_s7_payload_write_var_response;
 
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_response** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_write_var_response* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_data_item.h b/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_data_item.h
index d08c081..d6d65f0 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_data_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_data_item.h
@@ -29,13 +29,17 @@ extern "C" {
 #include "data_transport_size.h"
 
 struct plc4c_s7_read_write_s7_var_payload_data_item {
-  plc4c_s7_read_write_data_transport_error_code return_code;
-  plc4c_s7_read_write_data_transport_size transport_size;
+  plc4c_s7_read_write_data_transport_error_code* return_code;
+  plc4c_s7_read_write_data_transport_size* transport_size;
   uint16_t data_length;
   plc4c_list data;
 };
 typedef struct plc4c_s7_read_write_s7_var_payload_data_item plc4c_s7_read_write_s7_var_payload_data_item;
 
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_read_buffer* buf, bool lastItem, plc4c_s7_read_write_s7_var_payload_data_item** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_data_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_status_item.h b/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_status_item.h
index e288e80..355b83c 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_status_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_var_payload_status_item.h
@@ -28,10 +28,14 @@ extern "C" {
 #include "data_transport_error_code.h"
 
 struct plc4c_s7_read_write_s7_var_payload_status_item {
-  plc4c_s7_read_write_data_transport_error_code return_code;
+  plc4c_s7_read_write_data_transport_error_code* return_code;
 };
 typedef struct plc4c_s7_read_write_s7_var_payload_status_item plc4c_s7_read_write_s7_var_payload_status_item;
 
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item.h b/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item.h
index 7aaa42f..72188be 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item.h
@@ -26,16 +26,19 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 
+// Enum assigning each sub-type an individual id.
+enum plc4c_s7_read_write_s7_var_request_parameter_item_type {
+  plc4c_s7_read_write_s7_var_request_parameter_item_type_s7_read_write_s7_var_request_parameter_item_address = 0};
+typedef enum plc4c_s7_read_write_s7_var_request_parameter_item_type plc4c_s7_read_write_s7_var_request_parameter_item_type;
+
 struct plc4c_s7_read_write_s7_var_request_parameter_item {
   plc4c_s7_read_write_s7_var_request_parameter_item_type _type;
 };
 typedef struct plc4c_s7_read_write_s7_var_request_parameter_item plc4c_s7_read_write_s7_var_request_parameter_item;
 
-// Enum assigning each sub-type an individual id.
-enum plc4c_s7_read_write_s7_var_request_parameter_item_type {
-  plc4c_s7_read_write_s7_var_request_parameter_item_type_s7_read_write_s7_var_request_parameter_item_address = 0;
-}
-typedef enum plc4c_s7_read_write_s7_var_request_parameter_item_type plc4c_s7_read_write_s7_var_request_parameter_item_type;
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item* message);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item_address.h b/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item_address.h
index 7fc9856..dd28f3c 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item_address.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item_address.h
@@ -26,13 +26,18 @@ extern "C" {
 #include <stdint.h>
 #include <plc4c/utils/list.h>
 #include "s7_address.h"
+#include "s7_var_request_parameter_item.h"
 
 struct plc4c_s7_read_write_s7_var_request_parameter_item_address {
   plc4c_s7_read_write_s7_var_request_parameter_item_type _type;
-  plc4c_s7_read_write_s7_address address;
+  plc4c_s7_read_write_s7_address* address;
 };
 typedef struct plc4c_s7_read_write_s7_var_request_parameter_item_address plc4c_s7_read_write_s7_var_request_parameter_item_address;
 
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item_address** message);
+
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item_address* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/szl_data_tree_item.h b/sandbox/plc4c/generated-sources/s7/includes/szl_data_tree_item.h
index b05e556..1c0ed9d 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/szl_data_tree_item.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/szl_data_tree_item.h
@@ -35,6 +35,10 @@ struct plc4c_s7_read_write_szl_data_tree_item {
 };
 typedef struct plc4c_s7_read_write_szl_data_tree_item plc4c_s7_read_write_szl_data_tree_item;
 
+plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_szl_data_tree_item** message);
+
+plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_data_tree_item* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/szl_id.h b/sandbox/plc4c/generated-sources/s7/includes/szl_id.h
index 8cfea27..0edb9ef5 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/szl_id.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/szl_id.h
@@ -29,12 +29,16 @@ extern "C" {
 #include "szl_sublist.h"
 
 struct plc4c_s7_read_write_szl_id {
-  plc4c_s7_read_write_szl_module_type_class type_class;
+  plc4c_s7_read_write_szl_module_type_class* type_class;
   unsigned int sublist_extract : 4;
-  plc4c_s7_read_write_szl_sublist sublist_list;
+  plc4c_s7_read_write_szl_sublist* sublist_list;
 };
 typedef struct plc4c_s7_read_write_szl_id plc4c_s7_read_write_szl_id;
 
+plc4c_return_code plc4c_s7_read_write_szl_id_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_szl_id** message);
+
+plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_id* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/includes/tpkt_packet.h b/sandbox/plc4c/generated-sources/s7/includes/tpkt_packet.h
index 7037796..558410e 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/tpkt_packet.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/tpkt_packet.h
@@ -27,11 +27,18 @@ extern "C" {
 #include <plc4c/utils/list.h>
 #include "cotp_packet.h"
 
+// Constant values.
+const uint8_t S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID = 0x03;
+
 struct plc4c_s7_read_write_tpkt_packet {
-  plc4c_s7_read_write_cotp_packet payload;
+  plc4c_s7_read_write_cotp_packet* payload;
 };
 typedef struct plc4c_s7_read_write_tpkt_packet plc4c_s7_read_write_tpkt_packet;
 
+plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_tpkt_packet** message);
+
+plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_tpkt_packet* message);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
index b4fcad4..49af465 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
@@ -17,15 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "cotp_packet_data.h"
+#include "cotp_packet_connection_request.h"
+#include "cotp_packet_connection_response.h"
+#include "cotp_packet_disconnect_request.h"
+#include "cotp_packet_disconnect_response.h"
+#include "cotp_packet_tpdu_error.h"
 
 #include "cotp_packet.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet));
 
@@ -37,34 +44,34 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_read_buffer buf, u
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0xF0)) {
-    plc4c_s7_read_write_cotp_packet_data_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_data_parse(buf, cotpLen, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0xE0)) {
-    plc4c_s7_read_write_cotp_packet_connection_request_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_connection_request_parse(buf, cotpLen, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0xD0)) {
-    plc4c_s7_read_write_cotp_packet_connection_response_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_connection_response_parse(buf, cotpLen, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0x80)) {
-    plc4c_s7_read_write_cotp_packet_disconnect_request_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_disconnect_request_parse(buf, cotpLen, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0xC0)) {
-    plc4c_s7_read_write_cotp_packet_disconnect_response_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_disconnect_response_parse(buf, cotpLen, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(tpduCode, 0x70)) {
-    plc4c_s7_read_write_cotp_packet_tpdu_error_parse(buf, msg, cotpLen);
+    plc4c_s7_read_write_cotp_packet_tpdu_error_parse(buf, cotpLen, NULL/* Disabled for now */);
   }
 
   // Optional Field (payload) (Can be skipped, if a given expression evaluates to false)
-  curPos = io.getPos() - startPos;
-  plc4c_s7_read_write_s7_message payload = NULL;
+  curPos = plc4c_spi_read_get_pos(buf) - startPos;
+  plc4c_s7_read_write_s7_message* payload = NULL;
   if((curPos) < (cotpLen)) {
-    payload = plc4c_s7_read_write_s7_message_parse(buf);
+    plc4c_s7_read_write_s7_message_parse(buf, &payload);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_request.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_request.c
index 167960b..ca2fde1 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_request.c
@@ -17,32 +17,33 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_connection_request.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_connection_request* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_connection_request));
 
   // Simple Field (destinationReference)
   uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.destination_reference = destinationReference;
+  msg->destination_reference = destinationReference;
 
   // Simple Field (sourceReference)
   uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.source_reference = sourceReference;
+  msg->source_reference = sourceReference;
 
   // Enum field (protocolClass)
-  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_s7_read_write_cotp_protocol_class.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_connection_request* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_connection_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_response.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_response.c
index 5dba755..4c606a1 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_response.c
@@ -17,32 +17,33 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_connection_response.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_connection_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_connection_response* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_connection_response));
 
   // Simple Field (destinationReference)
   uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.destination_reference = destinationReference;
+  msg->destination_reference = destinationReference;
 
   // Simple Field (sourceReference)
   uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.source_reference = sourceReference;
+  msg->source_reference = sourceReference;
 
   // Enum field (protocolClass)
-  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_s7_read_write_cotp_protocol_class.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_connection_response* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_connection_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_connection_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_data.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_data.c
index ebad668..02325c8 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_data.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_data.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_data.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_data_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_data** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_data_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_data** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_data* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_data));
 
   // Simple Field (eot)
   bool eot = plc4c_spi_read_bit(buf);
-  msg.eot = eot;
+  msg->eot = eot;
 
   // Simple Field (tpduRef)
   unsigned int tpduRef = plc4c_spi_read_unsigned_short(buf, 7);
-  msg.tpdu_ref = tpduRef;
+  msg->tpdu_ref = tpduRef;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_data_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_data* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_data* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_request.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_request.c
index f88f837..8532843 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_request.c
@@ -17,32 +17,33 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_disconnect_request.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_disconnect_request* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_disconnect_request));
 
   // Simple Field (destinationReference)
   uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.destination_reference = destinationReference;
+  msg->destination_reference = destinationReference;
 
   // Simple Field (sourceReference)
   uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.source_reference = sourceReference;
+  msg->source_reference = sourceReference;
 
   // Enum field (protocolClass)
-  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_s7_read_write_cotp_protocol_class.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_disconnect_request* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_disconnect_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_response.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_response.c
index e195c7f..e23e46d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_disconnect_response.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_disconnect_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_disconnect_response* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_disconnect_response));
 
   // Simple Field (destinationReference)
   uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.destination_reference = destinationReference;
+  msg->destination_reference = destinationReference;
 
   // Simple Field (sourceReference)
   uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.source_reference = sourceReference;
+  msg->source_reference = sourceReference;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_disconnect_response* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_disconnect_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_disconnect_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_tpdu_error.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_tpdu_error.c
index 274a165..1fa6ce0 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet_tpdu_error.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet_tpdu_error.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_packet_tpdu_error.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_parse(plc4c_read_buffer buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_tpdu_error** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_parse(plc4c_spi_read_buffer* buf, uint16_t cotpLen, plc4c_s7_read_write_cotp_packet_tpdu_error** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_packet_tpdu_error* msg = malloc(sizeof(plc4c_s7_read_write_cotp_packet_tpdu_error));
 
   // Simple Field (destinationReference)
   uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.destination_reference = destinationReference;
+  msg->destination_reference = destinationReference;
 
   // Simple Field (rejectCause)
   uint8_t rejectCause = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.reject_cause = rejectCause;
+  msg->reject_cause = rejectCause;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_packet_tpdu_error* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_tpdu_error_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet_tpdu_error* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
index 0cf7986..171298c 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
@@ -17,15 +17,21 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "cotp_parameter_tpdu_size.h"
+#include "cotp_parameter_calling_tsap.h"
+#include "cotp_parameter_called_tsap.h"
+#include "cotp_parameter_checksum.h"
+#include "cotp_parameter_disconnect_additional_information.h"
 
 #include "cotp_parameter.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter));
 
@@ -37,24 +43,24 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_read_buffer buf
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xC0)) {
-    plc4c_s7_read_write_cotp_parameter_tpdu_size_parse(buf, msg, rest);
+    plc4c_s7_read_write_cotp_parameter_tpdu_size_parse(buf, rest, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xC1)) {
-    plc4c_s7_read_write_cotp_parameter_calling_tsap_parse(buf, msg, rest);
+    plc4c_s7_read_write_cotp_parameter_calling_tsap_parse(buf, rest, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xC2)) {
-    plc4c_s7_read_write_cotp_parameter_called_tsap_parse(buf, msg, rest);
+    plc4c_s7_read_write_cotp_parameter_called_tsap_parse(buf, rest, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xC3)) {
-    plc4c_s7_read_write_cotp_parameter_checksum_parse(buf, msg, rest);
+    plc4c_s7_read_write_cotp_parameter_checksum_parse(buf, rest, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xE0)) {
-    plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_parse(buf, msg, rest);
+    plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_parse(buf, rest, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_called_tsap.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_called_tsap.c
index fab4a87..121e0c8 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_called_tsap.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_called_tsap.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_parameter_called_tsap.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_called_tsap** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_called_tsap** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter_called_tsap* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter_called_tsap));
 
   // Simple Field (tsapId)
   uint16_t tsapId = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.tsap_id = tsapId;
+  msg->tsap_id = tsapId;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter_called_tsap* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_called_tsap_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_called_tsap* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_calling_tsap.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_calling_tsap.c
index e060210..ac9e13c 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_calling_tsap.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_calling_tsap.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_parameter_calling_tsap.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_calling_tsap** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_calling_tsap** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter_calling_tsap* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter_calling_tsap));
 
   // Simple Field (tsapId)
   uint16_t tsapId = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.tsap_id = tsapId;
+  msg->tsap_id = tsapId;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter_calling_tsap* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_calling_tsap_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_calling_tsap* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_checksum.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_checksum.c
index b33f989..0e8a3ef 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_checksum.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_checksum.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_parameter_checksum.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_checksum** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_checksum** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter_checksum* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter_checksum));
 
   // Simple Field (crc)
   uint8_t crc = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.crc = crc;
+  msg->crc = crc;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter_checksum* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_checksum_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_checksum* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_disconnect_additional_information.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_disconnect_additional_information.c
index 380b27c..acbb30c 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_disconnect_additional_information.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_disconnect_additional_information.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_parameter_disconnect_additional_information.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter_disconnect_additional_information* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter_disconnect_additional_information));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_disconnect_additional_information_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_disconnect_additional_information* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_tpdu_size.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_tpdu_size.c
index 9ac1142..bab4c04 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_tpdu_size.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter_tpdu_size.c
@@ -17,24 +17,25 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "cotp_parameter_tpdu_size.h"
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_parse(plc4c_read_buffer buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_tpdu_size** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_parse(plc4c_spi_read_buffer* buf, uint8_t rest, plc4c_s7_read_write_cotp_parameter_tpdu_size** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_cotp_parameter_tpdu_size* msg = malloc(sizeof(plc4c_s7_read_write_cotp_parameter_tpdu_size));
 
   // Enum field (tpduSize)
-  plc4c_s7_read_write_cotp_tpdu_size tpduSize = plc4c_s7_read_write_cotp_tpdu_size.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_cotp_tpdu_size tpduSize = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_cotp_parameter_tpdu_size* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_tpdu_size_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter_tpdu_size* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_address.c b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
index 8257321..2fd7f23 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_address.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
@@ -17,15 +17,17 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_address_any.h"
 
 #include "s7_address.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_address** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_address** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_address* msg = malloc(sizeof(plc4c_s7_read_write_s7_address));
 
@@ -34,12 +36,12 @@ plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_read_buffer buf, pl
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(addressType, 0x10)) {
-    plc4c_s7_read_write_s7_address_any_parse(buf, msg);
+    plc4c_s7_read_write_s7_address_any_parse(buf, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_address* message) {
+plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_address_any.c b/sandbox/plc4c/generated-sources/s7/src/s7_address_any.c
index 278dfbc..7d0a242 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_address_any.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_address_any.c
@@ -17,51 +17,52 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_address_any.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_address_any_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_address_any** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_address_any_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_address_any** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_address_any* msg = malloc(sizeof(plc4c_s7_read_write_s7_address_any));
 
   // Enum field (transportSize)
-  plc4c_s7_read_write_transport_size transportSize = plc4c_s7_read_write_transport_size.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
 
   // Simple Field (numberOfElements)
   uint16_t numberOfElements = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.number_of_elements = numberOfElements;
+  msg->number_of_elements = numberOfElements;
 
   // Simple Field (dbNumber)
   uint16_t dbNumber = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.db_number = dbNumber;
+  msg->db_number = dbNumber;
 
   // Enum field (area)
-  plc4c_s7_read_write_memory_area area = plc4c_s7_read_write_memory_area.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_memory_area area = plc4c_spi_read_byte(buf, 8);
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
     unsigned int reserved = plc4c_spi_read_unsigned_short(buf, 5);
     if(reserved != (unsigned int) 0x00) {
-      LOGGER.info("Expected constant value " + 0x00 + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, reserved);
     }
   }
 
   // Simple Field (byteAddress)
   uint16_t byteAddress = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.byte_address = byteAddress;
+  msg->byte_address = byteAddress;
 
   // Simple Field (bitAddress)
   unsigned int bitAddress = plc4c_spi_read_unsigned_byte(buf, 3);
-  msg.bit_address = bitAddress;
+  msg->bit_address = bitAddress;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_address_any_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_address_any* message) {
+plc4c_return_code plc4c_s7_read_write_s7_address_any_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address_any* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message.c b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
index 4132434..74ff2ad 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
@@ -17,22 +17,28 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_message_request.h"
+#include "s7_message_response.h"
+#include "s7_message_response_data.h"
+#include "s7_message_user_data.h"
 
 #include "s7_message.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_message** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_message* msg = malloc(sizeof(plc4c_s7_read_write_s7_message));
 
   // Const Field (protocolId)
   uint8_t protocolId = plc4c_spi_read_unsigned_short(buf, 8);
-  if(protocolId != S7Message.PROTOCOLID) {
-    throw new ParseException("Expected constant value " + S7Message.PROTOCOLID + " but got " + protocolId);
+  if(protocolId != S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + S7Message.PROTOCOLID + " but got " + protocolId);
   }
 
   // Discriminator Field (messageType) (Used as input to a switch field)
@@ -42,13 +48,13 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_read_buffer buf, pl
   {
     uint16_t reserved = plc4c_spi_read_unsigned_int(buf, 16);
     if(reserved != (uint16_t) 0x0000) {
-      LOGGER.info("Expected constant value " + 0x0000 + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", 0x0000, reserved);
     }
   }
 
   // Simple Field (tpduReference)
   uint16_t tpduReference = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.tpdu_reference = tpduReference;
+  msg->tpdu_reference = tpduReference;
 
   // Implicit Field (parameterLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint16_t parameterLength = plc4c_spi_read_unsigned_int(buf, 16);
@@ -58,33 +64,33 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_read_buffer buf, pl
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(messageType, 0x01)) {
-    plc4c_s7_read_write_s7_message_request_parse(buf, msg);
+    plc4c_s7_read_write_s7_message_request_parse(buf, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(messageType, 0x02)) {
-    plc4c_s7_read_write_s7_message_response_parse(buf, msg);
+    plc4c_s7_read_write_s7_message_response_parse(buf, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(messageType, 0x03)) {
-    plc4c_s7_read_write_s7_message_response_data_parse(buf, msg);
+    plc4c_s7_read_write_s7_message_response_data_parse(buf, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(messageType, 0x07)) {
-    plc4c_s7_read_write_s7_message_user_data_parse(buf, msg);
+    plc4c_s7_read_write_s7_message_user_data_parse(buf, NULL/* Disabled for now */);
   }
 
   // Optional Field (parameter) (Can be skipped, if a given expression evaluates to false)
-  plc4c_s7_read_write_s7_parameter parameter = NULL;
+  plc4c_s7_read_write_s7_parameter* parameter = NULL;
   if((parameterLength) > (0)) {
-    parameter = plc4c_s7_read_write_s7_parameter_parse(buf, messageType);
+    plc4c_s7_read_write_s7_parameter_parse(buf, messageType, &parameter);
   }
 
   // Optional Field (payload) (Can be skipped, if a given expression evaluates to false)
-  plc4c_s7_read_write_s7_payload payload = NULL;
+  plc4c_s7_read_write_s7_payload* payload = NULL;
   if((payloadLength) > (0)) {
-    payload = plc4c_s7_read_write_s7_payload_parse(buf, messageType, parameter);
+    plc4c_s7_read_write_s7_payload_parse(buf, messageType, parameter, &payload);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_message* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message_request.c b/sandbox/plc4c/generated-sources/s7/src/s7_message_request.c
index 09a890e..915cdbc 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_message_request.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_message_request_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_message_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_message_request_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_message_request* msg = malloc(sizeof(plc4c_s7_read_write_s7_message_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_message_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_message_request* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_message_response.c
index db41412..8d622e3 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message_response.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_message_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_message_response_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_message_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_message_response_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_message_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_message_response));
 
   // Simple Field (errorClass)
   uint8_t errorClass = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.error_class = errorClass;
+  msg->error_class = errorClass;
 
   // Simple Field (errorCode)
   uint8_t errorCode = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.error_code = errorCode;
+  msg->error_code = errorCode;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_message_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_message_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message_response_data.c b/sandbox/plc4c/generated-sources/s7/src/s7_message_response_data.c
index de4d9ac..9febd68 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message_response_data.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message_response_data.c
@@ -17,29 +17,30 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_message_response_data.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_message_response_data_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_message_response_data** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_message_response_data_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_response_data** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_message_response_data* msg = malloc(sizeof(plc4c_s7_read_write_s7_message_response_data));
 
   // Simple Field (errorClass)
   uint8_t errorClass = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.error_class = errorClass;
+  msg->error_class = errorClass;
 
   // Simple Field (errorCode)
   uint8_t errorCode = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.error_code = errorCode;
+  msg->error_code = errorCode;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_message_response_data_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_message_response_data* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_response_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_response_data* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message_user_data.c b/sandbox/plc4c/generated-sources/s7/src/s7_message_user_data.c
index 6af0c2b..c9fe829 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message_user_data.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message_user_data.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_message_user_data.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_message_user_data_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_message_user_data** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_message_user_data_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_message_user_data** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_message_user_data* msg = malloc(sizeof(plc4c_s7_read_write_s7_message_user_data));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_message_user_data_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_message_user_data* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message_user_data* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
index 540b519..3774cb3 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
@@ -17,15 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_parameter_setup_communication.h"
+#include "s7_parameter_read_var_request.h"
+#include "s7_parameter_read_var_response.h"
+#include "s7_parameter_write_var_request.h"
+#include "s7_parameter_write_var_response.h"
+#include "s7_parameter_user_data.h"
 
 #include "s7_parameter.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter));
 
@@ -34,27 +41,27 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_read_buffer buf,
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0xF0)) {
-    plc4c_s7_read_write_s7_parameter_setup_communication_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_setup_communication_parse(buf, messageType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0x04) && plc4c_spi_evaluation_helper_equals(messageType, 0x01)) {
-    plc4c_s7_read_write_s7_parameter_read_var_request_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_read_var_request_parse(buf, messageType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0x04) && plc4c_spi_evaluation_helper_equals(messageType, 0x03)) {
-    plc4c_s7_read_write_s7_parameter_read_var_response_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_read_var_response_parse(buf, messageType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0x05) && plc4c_spi_evaluation_helper_equals(messageType, 0x01)) {
-    plc4c_s7_read_write_s7_parameter_write_var_request_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_write_var_request_parse(buf, messageType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0x05) && plc4c_spi_evaluation_helper_equals(messageType, 0x03)) {
-    plc4c_s7_read_write_s7_parameter_write_var_response_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_write_var_response_parse(buf, messageType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameterType, 0x00) && plc4c_spi_evaluation_helper_equals(messageType, 0x07)) {
-    plc4c_s7_read_write_s7_parameter_user_data_parse(buf, msg, messageType);
+    plc4c_s7_read_write_s7_parameter_user_data_parse(buf, messageType, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_request.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_request.c
index c114ba1..6e72536 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_request.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_read_var_request.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_read_var_request* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_read_var_request));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_parse(plc4c_
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_read_var_request* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_read_var_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_response.c
index ea26140..578900f 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_response.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_read_var_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_read_var_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_read_var_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_read_var_response));
 
   // Simple Field (numItems)
   uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.num_items = numItems;
+  msg->num_items = numItems;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_read_var_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_read_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_read_var_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_setup_communication.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_setup_communication.c
index 90cffb5..d749d50 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_setup_communication.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_setup_communication.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_setup_communication.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_setup_communication** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_setup_communication** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_setup_communication* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_setup_communication));
 
@@ -33,25 +34,25 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_parse(plc
   {
     uint8_t reserved = plc4c_spi_read_unsigned_short(buf, 8);
     if(reserved != (uint8_t) 0x00) {
-      LOGGER.info("Expected constant value " + 0x00 + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, reserved);
     }
   }
 
   // Simple Field (maxAmqCaller)
   uint16_t maxAmqCaller = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.max_amq_caller = maxAmqCaller;
+  msg->max_amq_caller = maxAmqCaller;
 
   // Simple Field (maxAmqCallee)
   uint16_t maxAmqCallee = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.max_amq_callee = maxAmqCallee;
+  msg->max_amq_callee = maxAmqCallee;
 
   // Simple Field (pduLength)
   uint16_t pduLength = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.pdu_length = pduLength;
+  msg->pdu_length = pduLength;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_setup_communication* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_setup_communication_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_setup_communication* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data.c
index 2c43f2c..07694c2 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_user_data.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_user_data** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_user_data** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_user_data* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_user_data));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_parse(plc4c_read_bu
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_user_data* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
index eea731c..f809229 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
@@ -17,15 +17,17 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_parameter_user_data_item_cpu_functions.h"
 
 #include "s7_parameter_user_data_item.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_parameter_user_data_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_user_data_item* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_user_data_item));
 
@@ -34,12 +36,12 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_re
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(itemType, 0x12)) {
-    plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_parse(buf, msg);
+    plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_parse(buf, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_user_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item_cpu_functions.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item_cpu_functions.c
index a2b28e6..f705103 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item_cpu_functions.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item_cpu_functions.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_user_data_item_cpu_functions.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions));
 
@@ -34,38 +35,38 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_
 
   // Simple Field (method)
   uint8_t method = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.method = method;
+  msg->method = method;
 
   // Simple Field (cpuFunctionType)
   unsigned int cpuFunctionType = plc4c_spi_read_unsigned_byte(buf, 4);
-  msg.cpu_function_type = cpuFunctionType;
+  msg->cpu_function_type = cpuFunctionType;
 
   // Simple Field (cpuFunctionGroup)
   unsigned int cpuFunctionGroup = plc4c_spi_read_unsigned_byte(buf, 4);
-  msg.cpu_function_group = cpuFunctionGroup;
+  msg->cpu_function_group = cpuFunctionGroup;
 
   // Simple Field (cpuSubfunction)
   uint8_t cpuSubfunction = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.cpu_subfunction = cpuSubfunction;
+  msg->cpu_subfunction = cpuSubfunction;
 
   // Simple Field (sequenceNumber)
   uint8_t sequenceNumber = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.sequence_number = sequenceNumber;
+  msg->sequence_number = sequenceNumber;
 
   // Optional Field (dataUnitReferenceNumber) (Can be skipped, if a given expression evaluates to false)
-  uint8_t dataUnitReferenceNumber = NULL;
+  uint8_t dataUnitReferenceNumber = 0;
   if((cpuFunctionType) == (8)) {
     dataUnitReferenceNumber = plc4c_spi_read_unsigned_short(buf, 8);
   }
 
   // Optional Field (lastDataUnit) (Can be skipped, if a given expression evaluates to false)
-  uint8_t lastDataUnit = NULL;
+  uint8_t lastDataUnit = 0;
   if((cpuFunctionType) == (8)) {
     lastDataUnit = plc4c_spi_read_unsigned_short(buf, 8);
   }
 
   // Optional Field (errorCode) (Can be skipped, if a given expression evaluates to false)
-  uint16_t errorCode = NULL;
+  uint16_t errorCode = 0;
   if((cpuFunctionType) == (8)) {
     errorCode = plc4c_spi_read_unsigned_int(buf, 16);
   }
@@ -73,6 +74,6 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_request.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_request.c
index 7b85c1b..d3768a3 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_request.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_write_var_request.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_write_var_request* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_write_var_request));
 
@@ -35,6 +36,6 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_parse(plc4c
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_write_var_request* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_write_var_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_response.c
index 611b411..98bc37d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_response.c
@@ -17,25 +17,26 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_parameter_write_var_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter_write_var_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_parameter_write_var_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_parameter_write_var_response));
 
   // Simple Field (numItems)
   uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
-  msg.num_items = numItems;
+  msg->num_items = numItems;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_parameter_write_var_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_write_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_write_var_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
index 6db858a..a374f6a 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
@@ -17,35 +17,40 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_payload_read_var_response.h"
+#include "s7_payload_write_var_request.h"
+#include "s7_payload_write_var_response.h"
+#include "s7_payload_user_data.h"
 
 #include "s7_payload.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload));
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(parameter.getDiscriminatorValues()[0], 0x04) && plc4c_spi_evaluation_helper_equals(messageType, 0x03)) {
-    plc4c_s7_read_write_s7_payload_read_var_response_parse(buf, msg, messageType, parameter);
+    plc4c_s7_read_write_s7_payload_read_var_response_parse(buf, messageType, parameter, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameter.getDiscriminatorValues()[0], 0x05) && plc4c_spi_evaluation_helper_equals(messageType, 0x01)) {
-    plc4c_s7_read_write_s7_payload_write_var_request_parse(buf, msg, messageType, parameter);
+    plc4c_s7_read_write_s7_payload_write_var_request_parse(buf, messageType, parameter, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameter.getDiscriminatorValues()[0], 0x05) && plc4c_spi_evaluation_helper_equals(messageType, 0x03)) {
-    plc4c_s7_read_write_s7_payload_write_var_response_parse(buf, msg, messageType, parameter);
+    plc4c_s7_read_write_s7_payload_write_var_response_parse(buf, messageType, parameter, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(parameter.getDiscriminatorValues()[0], 0x00) && plc4c_spi_evaluation_helper_equals(messageType, 0x07)) {
-    plc4c_s7_read_write_s7_payload_user_data_parse(buf, msg, messageType, parameter);
+    plc4c_s7_read_write_s7_payload_user_data_parse(buf, messageType, parameter, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_read_var_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_read_var_response.c
index b819f01..22ba8f8 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_read_var_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_read_var_response.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_read_var_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_read_var_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_read_var_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_read_var_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_read_var_response));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_read_var_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_read_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_read_var_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data.c
index ed2b159..18379a9 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_user_data.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_user_data** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_user_data** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_user_data* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_user_data));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_user_data* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
index a6f2a4b..ddad501 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
@@ -17,46 +17,50 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_payload_user_data_item_cpu_function_read_szl_request.h"
+#include "s7_payload_user_data_item_cpu_function_read_szl_response.h"
 
 #include "s7_payload_user_data_item.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_read_buffer buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_user_data_item* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_user_data_item));
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_s7_read_write_data_transport_error_code.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
 
   // Enum field (transportSize)
-  plc4c_s7_read_write_data_transport_size transportSize = plc4c_s7_read_write_data_transport_size.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_data_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
 
   // Implicit Field (dataLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
   uint16_t dataLength = plc4c_spi_read_unsigned_int(buf, 16);
 
   // Simple Field (szlId)
-  plc4c_s7_read_write_szl_id szlId = plc4c_s7_read_write_szl_id_parse(buf);
-  msg.szl_id = szlId;
+  plc4c_s7_read_write_szl_id* szlId = NULL;
+  plc4c_s7_read_write_szl_id_parse(buf, &szlId);
+  msg->szl_id = szlId;
 
   // Simple Field (szlIndex)
   uint16_t szlIndex = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.szl_index = szlIndex;
+  msg->szl_index = szlIndex;
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(cpuFunctionType, 0x04)) {
-    plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_parse(buf, msg, cpuFunctionType);
+    plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_parse(buf, cpuFunctionType, NULL/* Disabled for now */);
   } else 
   if(plc4c_spi_evaluation_helper_equals(cpuFunctionType, 0x08)) {
-    plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_parse(buf, msg, cpuFunctionType);
+    plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_parse(buf, cpuFunctionType, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_user_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_request.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_request.c
index 4c14644..f54b29c 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_user_data_item_cpu_function_read_szl_request.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_parse(plc4c_read_buffer buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_response.c
index 249c067..89842cb 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_response.c
@@ -17,22 +17,24 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_user_data_item_cpu_function_read_szl_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_parse(plc4c_read_buffer buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_parse(plc4c_spi_read_buffer* buf, unsigned int cpuFunctionType, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response));
 
   // Const Field (szlItemLength)
   uint16_t szlItemLength = plc4c_spi_read_unsigned_int(buf, 16);
-  if(szlItemLength != S7PayloadUserDataItemCpuFunctionReadSzlResponse.SZLITEMLENGTH) {
-    throw new ParseException("Expected constant value " + S7PayloadUserDataItemCpuFunctionReadSzlResponse.SZLITEMLENGTH + " but got " + szlItemLength);
+  if(szlItemLength != S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_READ_SZL_RESPONSE_SZL_ITEM_LENGTH) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + S7PayloadUserDataItemCpuFunctionReadSzlResponse.SZLITEMLENGTH + " but got " + szlItemLength);
   }
 
   // Implicit Field (szlItemCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
@@ -41,6 +43,6 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_rea
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_read_szl_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_request.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_request.c
index 948579d..eadcbc2 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_request.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_request.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_write_var_request.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_request** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_request** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_write_var_request* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_write_var_request));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_write_var_request* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_request_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_write_var_request* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_response.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_response.c
index 6992b30..737bceb 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_response.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_response.c
@@ -17,21 +17,22 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_payload_write_var_response.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_parse(plc4c_read_buffer buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_response** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_parse(plc4c_spi_read_buffer* buf, uint8_t messageType, plc4c_s7_read_write_s7_parameter parameter, plc4c_s7_read_write_s7_payload_write_var_response** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_payload_write_var_response* msg = malloc(sizeof(plc4c_s7_read_write_s7_payload_write_var_response));
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_payload_write_var_response* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_write_var_response_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_write_var_response* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
index 35a304d..83357cb 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
@@ -17,27 +17,28 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_var_payload_data_item.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_read_buffer buf, bool lastItem, plc4c_s7_read_write_s7_var_payload_data_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_read_buffer* buf, bool lastItem, plc4c_s7_read_write_s7_var_payload_data_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_var_payload_data_item* msg = malloc(sizeof(plc4c_s7_read_write_s7_var_payload_data_item));
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_s7_read_write_data_transport_error_code.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
 
   // Enum field (transportSize)
-  plc4c_s7_read_write_data_transport_size transportSize = plc4c_s7_read_write_data_transport_size.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_data_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
 
   // Simple Field (dataLength)
   uint16_t dataLength = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.data_length = dataLength;
+  msg->data_length = dataLength;
 
   // Padding Field (pad)
   bool _padNeedsPadding = (bool) ((plc4c_spi_read_has_more(buf, 8)) && ((!(lastItem)) && (((((COUNT(data)) % (2))) == (1)))));
@@ -49,6 +50,6 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_read_
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_var_payload_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_data_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
index b99ee44..ee64e7f 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
@@ -17,24 +17,25 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_var_payload_status_item.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_var_payload_status_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_var_payload_status_item* msg = malloc(sizeof(plc4c_s7_read_write_s7_var_payload_status_item));
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_s7_read_write_data_transport_error_code.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_var_payload_status_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
index 0273d79..36a3449 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
@@ -17,15 +17,17 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
+#include "s7_var_request_parameter_item_address.h"
 
 #include "s7_var_request_parameter_item.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_var_request_parameter_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_var_request_parameter_item* msg = malloc(sizeof(plc4c_s7_read_write_s7_var_request_parameter_item));
 
@@ -34,12 +36,12 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(plc4c_spi_evaluation_helper_equals(itemType, 0x12)) {
-    plc4c_s7_read_write_s7_var_request_parameter_item_address_parse(buf, msg);
+    plc4c_s7_read_write_s7_var_request_parameter_item_address_parse(buf, NULL/* Disabled for now */);
   }
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_var_request_parameter_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item_address.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item_address.c
index 969768e..b84587b 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item_address.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item_address.c
@@ -17,15 +17,16 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "s7_var_request_parameter_item_address.h"
 
-plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_parse(plc4c_read_buffer buf, plc4c_s7_read_write_s7_var_request_parameter_item_address** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item_address** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_s7_var_request_parameter_item_address* msg = malloc(sizeof(plc4c_s7_read_write_s7_var_request_parameter_item_address));
 
@@ -33,12 +34,13 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_pars
   uint8_t itemLength = plc4c_spi_read_unsigned_short(buf, 8);
 
   // Simple Field (address)
-  plc4c_s7_read_write_s7_address address = plc4c_s7_read_write_s7_address_parse(buf);
-  msg.address = address;
+  plc4c_s7_read_write_s7_address* address = NULL;
+  plc4c_s7_read_write_s7_address_parse(buf, &address);
+  msg->address = address;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_s7_var_request_parameter_item_address* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item_address* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
index 5705d3e..37b373b 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
@@ -17,37 +17,38 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "szl_data_tree_item.h"
 
-plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_read_buffer buf, plc4c_s7_read_write_szl_data_tree_item** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_szl_data_tree_item** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_szl_data_tree_item* msg = malloc(sizeof(plc4c_s7_read_write_szl_data_tree_item));
 
   // Simple Field (itemIndex)
   uint16_t itemIndex = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.item_index = itemIndex;
+  msg->item_index = itemIndex;
 
   // Simple Field (moduleTypeId)
   uint16_t moduleTypeId = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.module_type_id = moduleTypeId;
+  msg->module_type_id = moduleTypeId;
 
   // Simple Field (ausbg)
   uint16_t ausbg = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.ausbg = ausbg;
+  msg->ausbg = ausbg;
 
   // Simple Field (ausbe)
   uint16_t ausbe = plc4c_spi_read_unsigned_int(buf, 16);
-  msg.ausbe = ausbe;
+  msg->ausbe = ausbe;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_szl_data_tree_item* message) {
+plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_data_tree_item* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_id.c b/sandbox/plc4c/generated-sources/s7/src/szl_id.c
index c98404d..a327a8f 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_id.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_id.c
@@ -17,31 +17,32 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "szl_id.h"
 
-plc4c_return_code plc4c_s7_read_write_szl_id_parse(plc4c_read_buffer buf, plc4c_s7_read_write_szl_id** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_szl_id_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_szl_id** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_szl_id* msg = malloc(sizeof(plc4c_s7_read_write_szl_id));
 
   // Enum field (typeClass)
-  plc4c_s7_read_write_szl_module_type_class typeClass = plc4c_s7_read_write_szl_module_type_class.valueOf(plc4c_spi_read_byte(buf, 4));
+  plc4c_s7_read_write_szl_module_type_class typeClass = plc4c_spi_read_byte(buf, 4);
 
   // Simple Field (sublistExtract)
   unsigned int sublistExtract = plc4c_spi_read_unsigned_byte(buf, 4);
-  msg.sublist_extract = sublistExtract;
+  msg->sublist_extract = sublistExtract;
 
   // Enum field (sublistList)
-  plc4c_s7_read_write_szl_sublist sublistList = plc4c_s7_read_write_szl_sublist.valueOf(plc4c_spi_read_byte(buf, 8));
+  plc4c_s7_read_write_szl_sublist sublistList = plc4c_spi_read_byte(buf, 8);
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_szl_id* message) {
+plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_id* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c b/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
index 057b788..24f2f82 100644
--- a/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
@@ -17,29 +17,31 @@
   under the License.
 */
 
+#include <stdio.h>
 #include <plc4c/spi/read_buffer.h>
 #include <plc4c/spi/write_buffer.h>
 #include <plc4c/spi/evaluation_helper.h>
 
 #include "tpkt_packet.h"
 
-plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_read_buffer buf, plc4c_s7_read_write_tpkt_packet** message) {
-  uint16_t start_pos = plc4c_spi_read_get_pos(buf);
-  uint16_t cur_pos;
+plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* buf, plc4c_s7_read_write_tpkt_packet** message) {
+  uint16_t startPos = plc4c_spi_read_get_pos(buf);
+  uint16_t curPos;
 
   plc4c_s7_read_write_tpkt_packet* msg = malloc(sizeof(plc4c_s7_read_write_tpkt_packet));
 
   // Const Field (protocolId)
   uint8_t protocolId = plc4c_spi_read_unsigned_short(buf, 8);
-  if(protocolId != TPKTPacket.PROTOCOLID) {
-    throw new ParseException("Expected constant value " + TPKTPacket.PROTOCOLID + " but got " + protocolId);
+  if(protocolId != S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID) {
+    return PARSE_ERROR;
+    // throw new ParseException("Expected constant value " + TPKTPacket.PROTOCOLID + " but got " + protocolId);
   }
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
     uint8_t reserved = plc4c_spi_read_unsigned_short(buf, 8);
     if(reserved != (uint8_t) 0x00) {
-      LOGGER.info("Expected constant value " + 0x00 + " but got " + reserved + " for reserved field.");
+      printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, reserved);
     }
   }
 
@@ -47,12 +49,13 @@ plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_read_buffer buf, p
   uint16_t len = plc4c_spi_read_unsigned_int(buf, 16);
 
   // Simple Field (payload)
-  plc4c_s7_read_write_cotp_packet payload = plc4c_s7_read_write_cotp_packet_parse(buf, (len) - (4));
-  msg.payload = payload;
+  plc4c_s7_read_write_cotp_packet* payload = NULL;
+  plc4c_s7_read_write_cotp_packet_parse(buf, (len) - (4), &payload);
+  msg->payload = payload;
 
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_write_buffer buf, plc4c_s7_read_write_tpkt_packet* message) {
+plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_tpkt_packet* message) {
   return OK;
 }
diff --git a/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h b/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
index 6e34554..5dcf7e4 100644
--- a/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
+++ b/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
@@ -26,7 +26,7 @@
 struct plc4c_spi_write_buffer {
 
 };
-typedef struct plc4c_spi_v plc4c_spi_write_buffer;
+typedef struct plc4c_spi_write_buffer plc4c_spi_write_buffer;
 
 uint8_t* plc4c_spi_write_get_data(plc4c_spi_write_buffer* buf);