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/30 10:19:02 UTC

[plc4x] branch develop updated: - Refactored the read and write functions in read_buffer and write_buffer to work with return codes. - Adjusted the code-generation to these changes

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new b57e281  - Refactored the read and write functions in read_buffer and write_buffer to work with return codes. - Adjusted the code-generation to these changes
b57e281 is described below

commit b57e28143e8be9c704f39e3ad28e3d382d532cf5
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Jun 30 12:18:54 2020 +0200

    - Refactored the read and write functions in read_buffer and write_buffer to work with return codes.
    - Adjusted the code-generation to these changes
---
 .../BaseFreemarkerLanguageTemplateHelper.java      |   6 +-
 .../plc4x/language/c/CLanguageTemplateHelper.java  |  67 +-
 .../resources/templates/c/pojo-template-c.ftlh     | 138 ++--
 .../language/java/JavaLanguageTemplateHelper.java  |   2 +-
 .../modbus/src/modbus_constants.c                  |   8 +-
 .../generated-sources/modbus/src/modbus_pdu.c      | 768 +++++++++++++++------
 .../src/modbus_pdu_read_file_record_request_item.c |  50 +-
 .../modbus_pdu_read_file_record_response_item.c    |  31 +-
 .../modbus_pdu_write_file_record_request_item.c    |  55 +-
 .../modbus_pdu_write_file_record_response_item.c   |  55 +-
 .../modbus/src/modbus_serial_adu.c                 |  60 +-
 .../generated-sources/modbus/src/modbus_tcp_adu.c  |  54 +-
 .../plc4c/generated-sources/s7/src/cotp_packet.c   | 206 ++++--
 .../generated-sources/s7/src/cotp_parameter.c      |  73 +-
 .../plc4c/generated-sources/s7/src/s7_address.c    |  91 ++-
 .../plc4c/generated-sources/s7/src/s7_message.c    | 117 +++-
 .../plc4c/generated-sources/s7/src/s7_parameter.c  | 118 +++-
 .../s7/src/s7_parameter_user_data_item.c           | 115 ++-
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  10 +-
 .../s7/src/s7_payload_user_data_item.c             |  79 ++-
 .../s7/src/s7_var_payload_data_item.c              |  55 +-
 .../s7/src/s7_var_payload_status_item.c            |  14 +-
 .../s7/src/s7_var_request_parameter_item.c         |  30 +-
 .../generated-sources/s7/src/szl_data_tree_item.c  |  56 +-
 sandbox/plc4c/generated-sources/s7/src/szl_id.c    |  38 +-
 .../plc4c/generated-sources/s7/src/tpkt_packet.c   |  41 +-
 sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h  |  26 +-
 sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h |  32 +-
 sandbox/plc4c/spi/src/read_buffer.c                |  91 ++-
 sandbox/plc4c/spi/src/write_buffer.c               |  58 +-
 sandbox/plc4c/spi/test/read_buffer_test.c          | 138 ++--
 31 files changed, 1842 insertions(+), 840 deletions(-)

diff --git a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
index ee16231..c720b7e 100644
--- a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
+++ b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
@@ -113,7 +113,11 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker
 
     public abstract String getLanguageTypeNameForTypeReference(TypeReference typeReference);
 
-    public abstract String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference);
+    public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference) {
+        return getReadBufferReadMethodCall(simpleTypeReference, null);
+    }
+
+    public abstract String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String valueString);
 
     public abstract String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeReference, String fieldName);
 
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 5f7eb15..84a3987 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
@@ -56,6 +56,15 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
             "_" + camelCaseToSnakeCase(typeName).toLowerCase();
     }
 
+    public String getFieldName(ComplexTypeDefinition baseType, NamedField field) {
+        StringBuilder sb = new StringBuilder();
+        if (baseType != getThisTypeDefinition()) {
+            sb.append(camelCaseToSnakeCase(baseType.getName())).append("_");
+        }
+        sb.append(camelCaseToSnakeCase(field.getName()));
+        return sb.toString();
+    }
+
     /**
      * Converts a camel-case string to snake-case.
      *
@@ -227,6 +236,34 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
         }
     }
 
+    public String getDefaultValueForTypeReference(TypeReference typeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
+            SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
+            switch (simpleTypeReference.getBaseType()) {
+                case BIT:
+                    return "false";
+                case UINT:
+                case INT: {
+                    return "0";
+                }
+                case FLOAT:
+                case UFLOAT:
+                    return "0.0";
+                case STRING:
+                    return "\"\"";
+                case TIME:
+                    return "unsupported";
+                case DATE:
+                    return "unsupported";
+                case DATETIME:
+                    return "unsupported";
+            }
+            return "unsupported";
+        } else {
+            return "NULL";
+        }
+    }
+
     public String getLoopExpressionSuffix(TypedField field) {
         if (field instanceof ArrayField) {
             ArrayField arrayField = (ArrayField) field;
@@ -339,55 +376,55 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
     }
 
     @Override
-    public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference) {
+    public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String valueString) {
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
-                return "plc4c_spi_read_bit(buf)";
+                return "plc4c_spi_read_bit(buf, " + valueString + ")";
             }
             case UINT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 4) {
-                    return "plc4c_spi_read_unsigned_byte(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_unsigned_byte(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "plc4c_spi_read_unsigned_short(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_unsigned_short(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "plc4c_spi_read_unsigned_int(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_unsigned_int(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "plc4c_spi_read_unsigned_long(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_unsigned_long(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
-                return "plc4c_spi_read_unsigned_big_integer(buf, " + integerTypeReference.getSizeInBits() + ")";
+                return "plc4c_spi_read_unsigned_big_integer(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
             }
             case INT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "plc4c_spi_read_byte(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_byte(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "plc4c_spi_read_short(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_short(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "plc4c_spi_read_int(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_int(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "plc4c_spi_read_long(buf, " + integerTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_long(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
-                return "plc4c_spi_read_big_integer(buf, " + integerTypeReference.getSizeInBits() + ")";
+                return "plc4c_spi_read_big_integer(buf, " + integerTypeReference.getSizeInBits() + ", " + valueString + ")";
             }
             case FLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
                 if (floatTypeReference.getSizeInBits() <= 32) {
-                    return "plc4c_spi_read_float(buf, " + floatTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_float(buf, " + floatTypeReference.getSizeInBits() + ", " + valueString + ")";
                 } else {
-                    return "plc4c_spi_read_double(buf, " + floatTypeReference.getSizeInBits() + ")";
+                    return "plc4c_spi_read_double(buf, " + floatTypeReference.getSizeInBits() + ", " + valueString + ")";
                 }
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
                 return "plc4c_spi_read_string(buf, " + stringTypeReference.getSizeInBits() + ", \"" +
-                    stringTypeReference.getEncoding() + "\")";
+                    stringTypeReference.getEncoding() + "\"" + ", " + valueString + ")";
             }
         }
         return "Hurz";
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 0015d51..2a1e83b 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
@@ -92,13 +92,14 @@ plc4c_${helper.getCTypeName(type.name)}_discriminator plc4c_${helper.getCTypeNam
 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.getLanguageTypeNameForTypeReference(parserArgument.type)}<#if !helper.isSimpleTypeReference(parserArgument.type)>*</#if> ${parserArgument.name}<#sep>, </#list>, </#if>plc4c_${helper.getCTypeName(type.name)}** _message) {
   uint16_t startPos = plc4c_spi_read_get_pos(buf);
   uint16_t curPos;
+  plc4c_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_${helper.getCTypeName(type.name)}));
   if(*_message == NULL) {
     return NO_MEMORY;
   }
-<#macro fieldName baseType field><#if baseType != type>${helper.camelCaseToSnakeCase(baseType.name)}_</#if>${helper.camelCaseToSnakeCase(field.name)}</#macro>
+<#macro fieldName baseType field>${helper.getFieldName(baseType, field)}</#macro>
 <#macro fieldParser baseType field indentContent>
     <#switch field.typeName>
         <#case "array">
@@ -122,12 +123,16 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>      <#if !helper.isSimpleTypeReference(arrayField.type)>bool lastItem = curItem == (itemCount - 1);</#if>
       <#-- Inizialize a local variable with the simple type (Intentionally keeping the java-style names so they can be used in expressions) -->
 <#if indentContent>  </#if>                <#if helper.isSimpleTypeReference(arrayField.type)>
-<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getReadBufferReadMethodCall(arrayField.type)};
+<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getDefaultValueForTypeReference(arrayField.type)};
+<#if indentContent>  </#if>      _res = ${helper.getReadBufferReadMethodCall(arrayField.type, "&_value")};
+<#if indentContent>  </#if>      if(_res != OK) {
+<#if indentContent>  </#if>        return _res;
+<#if indentContent>  </#if>      }
 <#if indentContent>  </#if>      plc4c_utils_list_insert_head_value(${arrayField.name}, &_value);
                 <#else>
       <#-- Inizialize a local variable with the complex type (Intentionally keeping the java-style names so they can be used in expressions) -->
 <#if indentContent>  </#if>      ${helper.getLanguageTypeNameForField(field)}* _value = NULL;
-<#if indentContent>  </#if>      plc4c_return_code _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
+<#if indentContent>  </#if>      _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
 <#if indentContent>  </#if>      if(_res != OK) {
 <#if indentContent>  </#if>        return _res;
 <#if indentContent>  </#if>      }
@@ -142,12 +147,16 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>    while(plc4c_spi_read_get_pos(buf) < ${arrayField.name}EndPos) {
                 <#-- Inizialize a local variable with the simple type (Intentionally keeping the java-style names so they can be used in expressions) -->
                 <#if helper.isSimpleTypeReference(arrayField.type)>
-<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getReadBufferReadMethodCall(arrayField.type)};
+<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getDefaultValueForTypeReference(arrayField.type)};
+<#if indentContent>  </#if>      _res = ${helper.getReadBufferReadMethodCall(arrayField.type, "&_value")};
+<#if indentContent>  </#if>      if(_res != OK) {
+<#if indentContent>  </#if>        return _res;
+<#if indentContent>  </#if>      }
 <#if indentContent>  </#if>      plc4c_utils_list_insert_head_value(${arrayField.name}, &_value);
                 <#else>
                 <#-- Inizialize a local variable with the complex type (Intentionally keeping the java-style names so they can be used in expressions) -->
 <#if indentContent>  </#if>      ${helper.getLanguageTypeNameForField(field)}* _value = NULL;
-<#if indentContent>  </#if>      plc4c_return_code _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
+<#if indentContent>  </#if>      _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
 <#if indentContent>  </#if>      if(_res != OK) {
 <#if indentContent>  </#if>        return _res;
 <#if indentContent>  </#if>      }
@@ -164,12 +173,16 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>    while(!((boolean) (${helper.toParseExpression(baseType, arrayField, arrayField.loopExpression, baseType.parserArguments)}))) {
             <#-- Inizialize a local variable with the simple type (Intentionally keeping the java-style names so they can be used in expressions) -->
                 <#if helper.isSimpleTypeReference(arrayField.type)>
-<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getReadBufferReadMethodCall(arrayField.type)};
+<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} _value = ${helper.getDefaultValueForTypeReference(arrayField.type)};
+<#if indentContent>  </#if>      _res = ${helper.getReadBufferReadMethodCall(arrayField.type, "&_value")};
+<#if indentContent>  </#if>      if(_res != OK) {
+<#if indentContent>  </#if>        return _res;
+<#if indentContent>  </#if>      }
 <#if indentContent>  </#if>      plc4c_utils_list_insert_head_value(${arrayField.name}, &_value);
                 <#else>
                 <#-- Inizialize a local variable with the complex type (Intentionally keeping the java-style names so they can be used in expressions) -->
 <#if indentContent>  </#if>      ${helper.getLanguageTypeNameForField(field)}* _value = NULL;
-<#if indentContent>  </#if>      plc4c_return_code _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
+<#if indentContent>  </#if>      _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_parse(buf<#if field.params?has_content>, <#list field.params as parserTerm>${helper.toParseExpression(baseType, field, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &_value);
 <#if indentContent>  </#if>      if(_res != OK) {
 <#if indentContent>  </#if>        return _res;
 <#if indentContent>  </#if>      }
@@ -192,7 +205,11 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>  {
 <#if indentContent>  </#if>    // Create an array of all the bytes read in this message element so far.
 <#if indentContent>  </#if>    byte[] checksumRawData = plc4c_spi_read_get_bytes(buf, startPos, plc4c_spi_read_get_pos(buf));
-<#if indentContent>  </#if>    ${helper.getLanguageTypeNameForField(field)} _checksumRef = ${helper.getReadBufferReadMethodCall(checksumField.type)};
+<#if indentContent>  </#if>    ${helper.getLanguageTypeNameForField(field)} _checksumRef = ${helper.getDefaultValueForTypeReference(checksumField.type)};
+<#if indentContent>  </#if>    _res = ${helper.getReadBufferReadMethodCall(checksumField.type, "&_checksumRef")};
+<#if indentContent>  </#if>    if(_res != OK) {
+<#if indentContent>  </#if>      return _res;
+<#if indentContent>  </#if>    }
 <#if indentContent>  </#if>    ${helper.getLanguageTypeNameForField(field)} _checksum = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(baseType, checksumField, checksumField.checksumExpression, baseType.parserArguments)});
 <#if indentContent>  </#if>    if(_checksum != _checksumRef) {
 <#if indentContent>  </#if>      return PARSE_ERROR;
@@ -205,7 +222,11 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
             <#assign simpleTypeReference = constField.type>
 
 <#if indentContent>  </#if>  // Const Field (${constField.name})
-<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${constField.name} = ${helper.getReadBufferReadMethodCall(constField.type)};
+<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${constField.name} = ${helper.getDefaultValueForTypeReference(constField.type)};
+<#if indentContent>  </#if>  _res = ${helper.getReadBufferReadMethodCall(constField.type, "&" + constField.name)};
+<#if indentContent>  </#if>  if(_res != OK) {
+<#if indentContent>  </#if>    return _res;
+<#if indentContent>  </#if>  }
 <#if indentContent>  </#if>  if(${constField.name} != ${helper.getCTypeName(baseType.name)?upper_case}_${helper.camelCaseToSnakeCase(constField.name)?upper_case}) {
 <#if indentContent>  </#if>    return PARSE_ERROR;
 <#if indentContent>  </#if>    // throw new ParseException("Expected constant value " + ${helper.getCTypeName(baseType.name)?upper_case}_${helper.camelCaseToSnakeCase(constField.name)?upper_case} + " but got " + ${constField.name});
@@ -216,13 +237,21 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
             <#assign simpleTypeReference = discriminatorField.type>
 
 <#if indentContent>  </#if>  // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
-<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = ${helper.getReadBufferReadMethodCall(discriminatorField.type)};
+<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = ${helper.getDefaultValueForTypeReference(discriminatorField.type)};
+<#if indentContent>  </#if>  _res = ${helper.getReadBufferReadMethodCall(discriminatorField.type, "&" + discriminatorField.name)};
+<#if indentContent>  </#if>  if(_res != OK) {
+<#if indentContent>  </#if>    return _res;
+<#if indentContent>  </#if>  }
             <#break>
         <#case "enum">
             <#assign enumField = field>
 
 <#if indentContent>  </#if>  // Enum field (${enumField.name})
-<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = ${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(enumField.type))};
+<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = ${helper.getDefaultValueForTypeReference(enumField.type)};
+<#if indentContent>  </#if>  _res = ${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(enumField.type), "&" + enumField.name)};
+<#if indentContent>  </#if>  if(_res != OK) {
+<#if indentContent>  </#if>    return _res;
+<#if indentContent>  </#if>  }
 <#if indentContent>  </#if>  (*_message)-><@fieldName baseType=baseType field=enumField/> = ${enumField.name};
             <#break>
         <#case "implicit">
@@ -230,7 +259,11 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
             <#assign simpleTypeReference = implicitField.type>
 
 <#if indentContent>  </#if>  // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${implicitField.name} = ${helper.getReadBufferReadMethodCall(implicitField.type)};
+<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${implicitField.name} = ${helper.getDefaultValueForTypeReference(implicitField.type)};
+<#if indentContent>  </#if>  _res = ${helper.getReadBufferReadMethodCall(implicitField.type, "&" + implicitField.name)};
+<#if indentContent>  </#if>  if(_res != OK) {
+<#if indentContent>  </#if>    return _res;
+<#if indentContent>  </#if>  }
             <#break>
         <#case "manualArray">
             <#assign manualArrayField = field>
@@ -258,13 +291,14 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>      return NO_MEMORY;
 <#if indentContent>  </#if>    }
         <#if helper.isSimpleTypeReference(optionalField.type)>
-<#if indentContent>  </#if>    *${optionalField.name} = ${helper.getReadBufferReadMethodCall(optionalField.type)};
+<#if indentContent>  </#if>    *${optionalField.name} = ${helper.getDefaultValueForTypeReference(optionalField.type)};
+<#if indentContent>  </#if>    _res = ${helper.getReadBufferReadMethodCall(optionalField.type, "&" + optionalField.name)};
         <#else>
-<#if indentContent>  </#if>    plc4c_return_code _res = plc4c_${helper.getCTypeName(optionalField.type.name)}_parse(buf<#if optionalField.params?has_content>, <#list optionalField.params as parserTerm>${helper.toParseExpression(baseType, optionalField, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, &${optionalField.name});
+<#if indentContent>  </#if>    _res = plc4c_${helper.getCTypeName(optionalField.type.name)}_parse(buf<#if optionalField.params?has_content>, <#list optionalField.params as parserTerm>${helper.toParseExpression(baseType, optionalField, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, &${optionalField.name});
+        </#if>
 <#if indentContent>  </#if>    if(_res != OK) {
 <#if indentContent>  </#if>      return _res;
 <#if indentContent>  </#if>    }
-        </#if>
 <#if indentContent>  </#if>    (*_message)-><@fieldName baseType=baseType field=optionalField/> = ${optionalField.name};
 <#if indentContent>  </#if>  }
             <#break>
@@ -277,7 +311,11 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>    bool _needsPadding = (bool) ((plc4c_spi_read_has_more(buf, ${helper.getNumBits(paddingField.type)})) && (${helper.toParseExpression(baseType, paddingField, paddingField.paddingCondition, baseType.parserArguments)}));
 <#if indentContent>  </#if>    if(_needsPadding) {
 <#if indentContent>  </#if>      // Just read the padding data and ignore it
-<#if indentContent>  </#if>      ${helper.getReadBufferReadMethodCall(paddingField.type)};
+<#if indentContent>  </#if>      ${helper.getLanguageTypeNameForField(field)} _paddingValue = ${helper.getDefaultValueForTypeReference(paddingField.type)};
+<#if indentContent>  </#if>      _res = ${helper.getReadBufferReadMethodCall(paddingField.type, "&_paddingValue")};
+<#if indentContent>  </#if>      if(_res != OK) {
+<#if indentContent>  </#if>        return _res;
+<#if indentContent>  </#if>      }
 <#if indentContent>  </#if>    }
 <#if indentContent>  </#if>  }
             <#break>
@@ -287,7 +325,11 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 
 <#if indentContent>  </#if>  // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 <#if indentContent>  </#if>  {
-<#if indentContent>  </#if>    ${helper.getLanguageTypeNameForField(field)} _reserved = ${helper.getReadBufferReadMethodCall(reservedField.type)};
+<#if indentContent>  </#if>    ${helper.getLanguageTypeNameForField(field)} _reserved = ${helper.getDefaultValueForTypeReference(reservedField.type)};
+<#if indentContent>  </#if>    _res = ${helper.getReadBufferReadMethodCall(reservedField.type, "_reserved")};
+<#if indentContent>  </#if>    if(_res != OK) {
+<#if indentContent>  </#if>      return _res;
+<#if indentContent>  </#if>    }
 <#if indentContent>  </#if>    if(_reserved != ${reservedField.referenceValue}) {
 <#if indentContent>  </#if>      printf("Expected constant value '%d' but got '%d' for reserved field.", ${reservedField.referenceValue}, _reserved);
 <#if indentContent>  </#if>    }
@@ -299,15 +341,16 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 <#if indentContent>  </#if>  // Simple Field (${simpleField.name})
             <#-- Inizialize a local variable with the simple type (Intentionally keeping the java-style names so they can be used in expressions) -->
             <#if helper.isSimpleTypeReference(simpleField.type)>
-<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${simpleField.name} = ${helper.getReadBufferReadMethodCall(simpleField.type)};
+<#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)} ${simpleField.name} = ${helper.getDefaultValueForTypeReference(simpleField.type)};
+<#if indentContent>  </#if>  _res = ${helper.getReadBufferReadMethodCall(simpleField.type, "&" + simpleField.name)};
             <#else>
             <#-- Inizialize a local variable with the complex type (Intentionally keeping the java-style names so they can be used in expressions) -->
 <#if indentContent>  </#if>  ${helper.getLanguageTypeNameForField(field)}* ${simpleField.name};
-<#if indentContent>  </#if>  plc4c_return_code _res = plc4c_${helper.getCTypeName(simpleField.type.name)}_parse(buf<#if simpleField.params?has_content>, <#list simpleField.params as parserTerm>${helper.toParseExpression(baseType, simpleField, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &${simpleField.name});
+<#if indentContent>  </#if>  _res = plc4c_${helper.getCTypeName(simpleField.type.name)}_parse(buf<#if simpleField.params?has_content>, <#list simpleField.params as parserTerm>${helper.toParseExpression(baseType, simpleField, parserTerm, baseType.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &${simpleField.name});
+            </#if>
 <#if indentContent>  </#if>  if(_res != OK) {
 <#if indentContent>  </#if>    return _res;
 <#if indentContent>  </#if>  }
-            </#if>
 <#if indentContent>  </#if>  (*_message)-><@fieldName baseType=baseType field=simpleField/> = ${simpleField.name};
             <#break>
         <#case "switch">
@@ -341,6 +384,7 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
 }
 
 plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_write_buffer* buf, plc4c_${helper.getCTypeName(type.name)}* _message<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) {
+  plc4c_return_code _res = OK;
 <#macro fieldSerializer baseType field indentContent>
     <#switch field.typeName>
         <#case "array">
@@ -398,9 +442,9 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
             <#assign enumField = field>
 
 <#if indentContent>    </#if>  // Enum field (${enumField.name})
-<#if indentContent>    </#if>  {
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(helper.getEnumBaseTypeReference(enumField.type))} _value = _message-><@fieldName baseType=baseType field=enumField/>;
-<#if indentContent>    </#if>    ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(enumField.type), "_value")};
+<#if indentContent>    </#if>  _res = ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(enumField.type), "_message->" + helper.getFieldName(baseType, enumField))};
+<#if indentContent>    </#if>  if(_res != OK) {
+<#if indentContent>    </#if>    return _res;
 <#if indentContent>    </#if>  }
             <#break>
         <#case "implicit">
@@ -408,7 +452,10 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
             <#assign simpleTypeReference = implicitField.type>
 
 <#if indentContent>    </#if>  // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-<#if indentContent>    </#if>  ${helper.getWriteBufferWriteMethodCall(implicitField.type, helper.toSerializationExpression(baseType, implicitField, implicitField.serializeExpression, baseType.parserArguments))};
+<#if indentContent>    </#if>  _res = ${helper.getWriteBufferWriteMethodCall(implicitField.type, helper.toSerializationExpression(baseType, implicitField, implicitField.serializeExpression, baseType.parserArguments))};
+<#if indentContent>    </#if>  if(_res != OK) {
+<#if indentContent>    </#if>    return _res;
+<#if indentContent>    </#if>  }
             <#break>
         <#case "manualArray">
             <#assign manualArrayField = field>
@@ -418,17 +465,14 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
         <#case "manual">
             <#assign manualField = field>
 
-<#if indentContent>    </#if>  // Manual Field (${manualField.name})
-<#if indentContent>    </#if>  {
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(manualField.type)}* _value = (${helper.getLanguageTypeNameForTypeReference(arrayField.type)}*) plc4c_utils_list_get_value(_message-><@fieldName baseType=baseType field=arrayField/>, curItem);
+<#if indentContent>    </#if>  // Manual Field (${manualField.name})<#if indentContent>    </#if>  {
             <#if helper.isSimpleTypeReference(manualField.type)>
-<#if indentContent>    </#if>    ${helper.getWriteBufferWriteMethodCall(manualField.type, "*_value")};
+<#if indentContent>    </#if>  _res = ${helper.getWriteBufferWriteMethodCall(manualField.type, "(${helper.getLanguageTypeNameForTypeReference(arrayField.type)}*) plc4c_utils_list_get_value(_message->" + helper.getFieldName(baseType, arrayField))};
             <#else>
-<#if indentContent>    </#if>    plc4c_return_code _res = plc4c_${helper.getCTypeName(manualField.type.name)}_serialize(buf, (void*) &_value);
-<#if indentContent>    </#if>    if(_res != OK) {
-<#if indentContent>    </#if>      return _res;
-<#if indentContent>    </#if>    }
+<#if indentContent>    </#if>  _res = plc4c_${helper.getCTypeName(manualField.type.name)}_serialize(buf, (void*) &_value);
             </#if>
+<#if indentContent>    </#if>  if(_res != OK) {
+<#if indentContent>    </#if>    return _res;
 <#if indentContent>    </#if>  }
             <#break>
         <#case "optional">
@@ -437,15 +481,13 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
 <#if indentContent>    </#if>  // Optional Field (${optionalField.name})
 <#if indentContent>    </#if>  if(_message-><@fieldName baseType=baseType field=optionalField/> != NULL) {
             <#if helper.isSimpleTypeReference(optionalField.type)>
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(optionalField.type)}* _value = _message-><@fieldName baseType=baseType field=optionalField/>;
-<#if indentContent>    </#if>    ${helper.getWriteBufferWriteMethodCall(optionalField.type, "*_value")};
+<#if indentContent>    </#if>    _res= ${helper.getWriteBufferWriteMethodCall(optionalField.type, "_message->" + helper.getFieldName(baseType, optionalField))};
             <#else>
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(optionalField.type)}* _value = _message-><@fieldName baseType=baseType field=optionalField/>;
-<#if indentContent>    </#if>    plc4c_return_code _res = plc4c_${helper.getCTypeName(optionalField.type.name)}_serialize(buf, _value);
+<#if indentContent>    </#if>    _res = plc4c_${helper.getCTypeName(optionalField.type.name)}_serialize(buf, "_message-><@fieldName baseType=baseType field=optionalField/>");
+            </#if>
 <#if indentContent>    </#if>    if(_res != OK) {
 <#if indentContent>    </#if>      return _res;
 <#if indentContent>    </#if>    }
-            </#if>
 <#if indentContent>    </#if>  }
             <#break>
         <#case "padding">
@@ -458,7 +500,10 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
 <#if indentContent>    </#if>    bool _needsPadding = (bool) (${helper.toSerializationExpression(baseType, paddingField, paddingField.paddingCondition, baseType.parserArguments)});
 <#if indentContent>    </#if>    if(_needsPadding) {
 <#if indentContent>    </#if>      // Just output the default padding data
-<#if indentContent>    </#if>      ${helper.getWriteBufferWriteMethodCall(paddingField.type, helper.toParseExpression(baseType, paddingField, paddingField.paddingValue, baseType.parserArguments))};
+<#if indentContent>    </#if>      _res = ${helper.getWriteBufferWriteMethodCall(paddingField.type, helper.toParseExpression(baseType, paddingField, paddingField.paddingValue, baseType.parserArguments))};
+<#if indentContent>    </#if>      if(_res != OK) {
+<#if indentContent>    </#if>        return _res;
+<#if indentContent>    </#if>      }
 <#if indentContent>    </#if>    }
 <#if indentContent>    </#if>  }
             <#break>
@@ -467,23 +512,22 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_wr
             <#assign simpleTypeReference = reservedField.type>
 
 <#if indentContent>    </#if>  // Reserved Field
-<#if indentContent>    </#if>  ${helper.getWriteBufferWriteMethodCall(reservedField.type, reservedField.referenceValue)};
+<#if indentContent>    </#if>  _res = ${helper.getWriteBufferWriteMethodCall(reservedField.type, reservedField.referenceValue)};
+<#if indentContent>    </#if>  if(_res != OK) {
+<#if indentContent>    </#if>    return _res;
+<#if indentContent>    </#if>  }
             <#break>
         <#case "simple">
             <#assign simpleField = field>
 
 <#if indentContent>    </#if>  // Simple Field (${simpleField.name})
-<#if indentContent>    </#if>  {
             <#if helper.isSimpleTypeReference(simpleField.type)>
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(simpleField.type)} _value = _message-><@fieldName baseType=baseType field=simpleField/>;
-<#if indentContent>    </#if>    ${helper.getWriteBufferWriteMethodCall(simpleField.type, "_value")};
+<#if indentContent>    </#if>  _res = ${helper.getWriteBufferWriteMethodCall(simpleField.type, "_message->" + helper.getFieldName(baseType, simpleField))};
             <#else>
-<#if indentContent>    </#if>    ${helper.getLanguageTypeNameForTypeReference(simpleField.type)}* _value = _message-><@fieldName baseType=baseType field=simpleField/>;
-<#if indentContent>    </#if>    plc4c_return_code _res = plc4c_${helper.getCTypeName(simpleField.type.name)}_serialize(buf, _value);
-<#if indentContent>    </#if>    if(_res != OK) {
-<#if indentContent>    </#if>      return _res;
-<#if indentContent>    </#if>    }
+<#if indentContent>    </#if>  _res = plc4c_${helper.getCTypeName(simpleField.type.name)}_serialize(buf, "_message-><@fieldName baseType=baseType field=simpleField/>");
             </#if>
+<#if indentContent>    </#if>  if(_res != OK) {
+<#if indentContent>    </#if>    return _res;
 <#if indentContent>    </#if>  }
             <#break>
         <#case "switch">
diff --git a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index dce14cf..4fc7f46 100644
--- a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -233,7 +233,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
         }
     }
 
-    public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference) {
+    public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String valueString) {
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
                 return "io.readBit()";
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
index ce05483..eb0bb4b 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_constants));
@@ -35,7 +36,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_spi_read_
   }
 
   // Const Field (modbusTcpDefaultPort)
-  uint16_t modbusTcpDefaultPort = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t modbusTcpDefaultPort = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &modbusTcpDefaultPort);
+  if(_res != OK) {
+    return _res;
+  }
   if(modbusTcpDefaultPort != MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT) {
     return PARSE_ERROR;
     // throw new ParseException("Expected constant value " + MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT + " but got " + modbusTcpDefaultPort);
@@ -45,6 +50,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_spi_read_
 }
 
 plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_constants* _message) {
+  plc4c_return_code _res = OK;
 
   // Const Field (modbusTcpDefaultPort)
   plc4c_spi_write_unsigned_int(buf, 16, MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT);
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
index ac91e89..c186c7a 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@ -110,6 +110,7 @@ plc4c_modbus_read_write_modbus_pdu_discriminator plc4c_modbus_read_write_modbus_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu));
@@ -118,17 +119,29 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
   }
 
   // Discriminator Field (error) (Used as input to a switch field)
-  bool error = plc4c_spi_read_bit(buf);
+  bool error = false;
+  _res = plc4c_spi_read_bit(buf, &error);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Discriminator Field (function) (Used as input to a switch field)
-  unsigned int function = plc4c_spi_read_unsigned_short(buf, 7);
+  unsigned int function = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 7, &function);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(error == true) { /* ModbusPDUError */
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_error;
                     
     // Simple Field (exceptionCode)
-    uint8_t exceptionCode = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t exceptionCode = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &exceptionCode);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_error_exception_code = exceptionCode;
 
   } else 
@@ -136,13 +149,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_discrete_inputs_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_discrete_inputs_request_quantity = quantity;
 
   } else 
@@ -150,7 +171,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -165,7 +190,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -176,13 +205,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_coils_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_coils_request_quantity = quantity;
 
   } else 
@@ -190,7 +227,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -205,7 +246,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -216,13 +261,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_request;
                     
     // Simple Field (address)
-    uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t address = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &address);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_coil_request_address = address;
 
 
                     
     // Simple Field (value)
-    uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t value = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &value);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_coil_request_value = value;
 
   } else 
@@ -230,13 +283,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_response;
                     
     // Simple Field (address)
-    uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t address = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &address);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_coil_response_address = address;
 
 
                     
     // Simple Field (value)
-    uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t value = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &value);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_coil_response_value = value;
 
   } else 
@@ -244,19 +305,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_coils_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_coils_request_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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -271,7 +344,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -282,13 +359,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_response;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_coils_response_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_coils_response_quantity = quantity;
 
   } else 
@@ -296,13 +381,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_input_registers_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_input_registers_request_quantity = quantity;
 
   } else 
@@ -310,7 +403,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -325,7 +422,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -336,13 +437,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_holding_registers_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_holding_registers_request_quantity = quantity;
 
   } else 
@@ -350,7 +459,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -365,7 +478,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -376,13 +493,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_request;
                     
     // Simple Field (address)
-    uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t address = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &address);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_register_request_address = address;
 
 
                     
     // Simple Field (value)
-    uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t value = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &value);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_register_request_value = value;
 
   } else 
@@ -390,13 +515,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_response;
                     
     // Simple Field (address)
-    uint16_t address = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t address = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &address);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_register_response_address = address;
 
 
                     
     // Simple Field (value)
-    uint16_t value = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t value = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &value);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_single_register_response_value = value;
 
   } else 
@@ -404,19 +537,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_holding_registers_request_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_holding_registers_request_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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -431,7 +576,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -442,13 +591,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response;
                     
     // Simple Field (startingAddress)
-    uint16_t startingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t startingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &startingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_holding_registers_response_starting_address = startingAddress;
 
 
                     
     // Simple Field (quantity)
-    uint16_t quantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t quantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &quantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_write_multiple_holding_registers_response_quantity = quantity;
 
   } else 
@@ -456,31 +613,51 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request;
                     
     // Simple Field (readStartingAddress)
-    uint16_t readStartingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t readStartingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &readStartingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_starting_address = readStartingAddress;
 
 
                     
     // Simple Field (readQuantity)
-    uint16_t readQuantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t readQuantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &readQuantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_quantity = readQuantity;
 
 
                     
     // Simple Field (writeStartingAddress)
-    uint16_t writeStartingAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t writeStartingAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &writeStartingAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_write_starting_address = writeStartingAddress;
 
 
                     
     // Simple Field (writeQuantity)
-    uint16_t writeQuantity = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t writeQuantity = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &writeQuantity);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -495,7 +672,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -506,7 +687,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -521,7 +706,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -532,19 +721,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_request;
                     
     // Simple Field (referenceAddress)
-    uint16_t referenceAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t referenceAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &referenceAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_request_reference_address = referenceAddress;
 
 
                     
     // Simple Field (andMask)
-    uint16_t andMask = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t andMask = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &andMask);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_request_and_mask = andMask;
 
 
                     
     // Simple Field (orMask)
-    uint16_t orMask = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t orMask = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &orMask);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_request_or_mask = orMask;
 
   } else 
@@ -552,19 +753,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_response;
                     
     // Simple Field (referenceAddress)
-    uint16_t referenceAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t referenceAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &referenceAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_response_reference_address = referenceAddress;
 
 
                     
     // Simple Field (andMask)
-    uint16_t andMask = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t andMask = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &andMask);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_response_and_mask = andMask;
 
 
                     
     // Simple Field (orMask)
-    uint16_t orMask = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t orMask = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &orMask);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_mask_write_holding_register_response_or_mask = orMask;
 
   } else 
@@ -572,7 +785,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_request;
                     
     // Simple Field (fifoPointerAddress)
-    uint16_t fifoPointerAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t fifoPointerAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &fifoPointerAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_fifo_queue_request_fifo_pointer_address = fifoPointerAddress;
 
   } else 
@@ -580,12 +797,20 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_response;
                     
     // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint16_t byteCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
     // Implicit Field (fifoCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint16_t fifoCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t fifoCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &fifoCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -600,7 +825,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        uint16_t _value = plc4c_spi_read_unsigned_int(buf, 16);
+        uint16_t _value = 0;
+        _res = plc4c_spi_read_unsigned_int(buf, 16, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(fifoValue, &_value);
       }
     }
@@ -611,7 +840,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_request;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -626,7 +859,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
         plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(buf, (void*) &_value);
+        _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -640,7 +873,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -655,7 +892,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
         plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(buf, (void*) &_value);
+        _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -669,7 +906,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_request;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -684,7 +925,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
         plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(buf, (void*) &_value);
+        _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -698,7 +939,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -713,7 +958,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
         plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(buf, (void*) &_value);
+        _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -730,7 +975,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_response;
                     
     // Simple Field (value)
-    uint8_t value = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t value = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &value);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_read_exception_status_response_value = value;
 
   } else 
@@ -738,13 +987,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_diagnostic_request;
                     
     // Simple Field (status)
-    uint16_t status = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t status = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &status);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_diagnostic_request_status = status;
 
 
                     
     // Simple Field (eventCount)
-    uint16_t eventCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t eventCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &eventCount);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_diagnostic_request_event_count = eventCount;
 
   } else 
@@ -755,24 +1012,40 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
     // Simple Field (status)
-    uint16_t status = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t status = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &status);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_get_com_event_log_response_status = status;
 
 
                     
     // Simple Field (eventCount)
-    uint16_t eventCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t eventCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &eventCount);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_get_com_event_log_response_event_count = eventCount;
 
 
                     
     // Simple Field (messageCount)
-    uint16_t messageCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t messageCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &messageCount);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->modbus_pdu_get_com_event_log_response_message_count = messageCount;
 
 
@@ -788,7 +1061,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(events, &_value);
       }
     }
@@ -802,7 +1079,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_response;
                     
     // 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);
+    uint8_t byteCount = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &byteCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -817,7 +1098,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        int8_t _value = plc4c_spi_read_byte(buf, 8);
+        int8_t _value = 0;
+        _res = plc4c_spi_read_byte(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(value, &_value);
       }
     }
@@ -835,6 +1120,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
 }
 
 plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu* _message) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (error)
   plc4c_spi_write_bit(buf, plc4c_modbus_read_write_modbus_pdu_get_discriminator(_message->_type).error);
@@ -847,9 +1133,9 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_error: {
 
       // Simple Field (exceptionCode)
-      {
-        uint8_t _value = _message->modbus_pdu_error_exception_code;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->modbus_pdu_error_exception_code);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -857,15 +1143,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_discrete_inputs_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_discrete_inputs_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_discrete_inputs_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_discrete_inputs_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -873,7 +1159,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_discrete_inputs_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_discrete_inputs_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_discrete_inputs_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -890,15 +1179,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_coils_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_coils_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_coils_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_coils_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -906,7 +1195,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_coils_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_coils_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_coils_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -923,15 +1215,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_request: {
 
       // Simple Field (address)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_coil_request_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_coil_request_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (value)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_coil_request_value;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_coil_request_value);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -939,15 +1231,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_coil_response: {
 
       // Simple Field (address)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_coil_response_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_coil_response_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (value)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_coil_response_value;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_coil_response_value);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -955,19 +1247,22 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_coils_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_coils_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_coils_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_coils_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_write_multiple_coils_request_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_write_multiple_coils_request_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -984,15 +1279,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_coils_response: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_coils_response_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_coils_response_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_coils_response_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_coils_response_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1000,15 +1295,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_input_registers_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_input_registers_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_input_registers_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_input_registers_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1016,7 +1311,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_input_registers_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_input_registers_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_input_registers_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -1033,15 +1331,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_holding_registers_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_holding_registers_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_holding_registers_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_holding_registers_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1049,7 +1347,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_holding_registers_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_holding_registers_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_holding_registers_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -1066,15 +1367,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_request: {
 
       // Simple Field (address)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_register_request_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_register_request_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (value)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_register_request_value;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_register_request_value);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1082,15 +1383,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_single_register_response: {
 
       // Simple Field (address)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_register_response_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_register_response_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (value)
-      {
-        uint16_t _value = _message->modbus_pdu_write_single_register_response_value;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_single_register_response_value);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1098,19 +1399,22 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_holding_registers_request_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_holding_registers_request_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_holding_registers_request_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_holding_registers_request_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_write_multiple_holding_registers_request_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_write_multiple_holding_registers_request_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -1127,15 +1431,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response: {
 
       // Simple Field (startingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_holding_registers_response_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_holding_registers_response_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (quantity)
-      {
-        uint16_t _value = _message->modbus_pdu_write_multiple_holding_registers_response_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_write_multiple_holding_registers_response_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1143,31 +1447,34 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request: {
 
       // Simple Field (readStartingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_write_multiple_holding_registers_request_read_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_write_multiple_holding_registers_request_read_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (readQuantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_write_multiple_holding_registers_request_read_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_write_multiple_holding_registers_request_read_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (writeStartingAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_write_multiple_holding_registers_request_write_starting_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_write_multiple_holding_registers_request_write_starting_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (writeQuantity)
-      {
-        uint16_t _value = _message->modbus_pdu_read_write_multiple_holding_registers_request_write_quantity;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_write_multiple_holding_registers_request_write_quantity);
+      if(_res != OK) {
+        return _res;
       }
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_write_multiple_holding_registers_request_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_write_multiple_holding_registers_request_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -1184,7 +1491,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_write_multiple_holding_registers_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_write_multiple_holding_registers_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
@@ -1201,21 +1511,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_request: {
 
       // Simple Field (referenceAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_request_reference_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_request_reference_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (andMask)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_request_and_mask;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_request_and_mask);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (orMask)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_request_or_mask;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_request_or_mask);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1223,21 +1533,21 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_mask_write_holding_register_response: {
 
       // Simple Field (referenceAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_response_reference_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_response_reference_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (andMask)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_response_and_mask;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_response_and_mask);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (orMask)
-      {
-        uint16_t _value = _message->modbus_pdu_mask_write_holding_register_response_or_mask;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_mask_write_holding_register_response_or_mask);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1245,9 +1555,9 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_request: {
 
       // Simple Field (fifoPointerAddress)
-      {
-        uint16_t _value = _message->modbus_pdu_read_fifo_queue_request_fifo_pointer_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_read_fifo_queue_request_fifo_pointer_address);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1255,10 +1565,16 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_fifo_queue_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_fifo_queue_response_fifo_value)) * (2))) + (2));
+      _res = plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_fifo_queue_response_fifo_value)) * (2))) + (2));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Implicit Field (fifoCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_fifo_queue_response_fifo_value)) * (2))) / (2));
+      _res = plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->modbus_pdu_read_fifo_queue_response_fifo_value)) * (2))) / (2));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (fifoValue)
       {
@@ -1275,7 +1591,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_request: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_read_file_record_request_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_read_file_record_request_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -1295,7 +1614,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_file_record_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_read_file_record_response_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_read_file_record_response_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -1315,7 +1637,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_request: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_write_file_record_request_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_write_file_record_request_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -1335,7 +1660,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_write_file_record_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_write_file_record_response_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_array_size_in_bytes(_message->modbus_pdu_write_file_record_response_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -1359,9 +1687,9 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_read_exception_status_response: {
 
       // Simple Field (value)
-      {
-        uint8_t _value = _message->modbus_pdu_read_exception_status_response_value;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->modbus_pdu_read_exception_status_response_value);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1369,15 +1697,15 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_diagnostic_request: {
 
       // Simple Field (status)
-      {
-        uint16_t _value = _message->modbus_pdu_diagnostic_request_status;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_diagnostic_request_status);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (eventCount)
-      {
-        uint16_t _value = _message->modbus_pdu_diagnostic_request_event_count;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_diagnostic_request_event_count);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -1389,24 +1717,27 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_get_com_event_log_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, (plc4c_spi_evaluation_helper_count(_message->modbus_pdu_get_com_event_log_response_events)) + (6));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, (plc4c_spi_evaluation_helper_count(_message->modbus_pdu_get_com_event_log_response_events)) + (6));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Simple Field (status)
-      {
-        uint16_t _value = _message->modbus_pdu_get_com_event_log_response_status;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_get_com_event_log_response_status);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (eventCount)
-      {
-        uint16_t _value = _message->modbus_pdu_get_com_event_log_response_event_count;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_get_com_event_log_response_event_count);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (messageCount)
-      {
-        uint16_t _value = _message->modbus_pdu_get_com_event_log_response_message_count;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->modbus_pdu_get_com_event_log_response_message_count);
+      if(_res != OK) {
+        return _res;
       }
 
       // Array field (events)
@@ -1428,7 +1759,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_b
     case plc4c_modbus_read_write_modbus_pdu_type_modbus_read_write_modbus_pdu_report_server_id_response: {
 
       // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_report_server_id_response_value));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->modbus_pdu_report_server_id_response_value));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (value)
       {
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 d739106..63766db 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item));
@@ -35,48 +36,65 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_it
   }
 
   // Simple Field (referenceType)
-  uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t referenceType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &referenceType);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->reference_type = referenceType;
 
   // Simple Field (fileNumber)
-  uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t fileNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &fileNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->file_number = fileNumber;
 
   // Simple Field (recordNumber)
-  uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t recordNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->record_number = recordNumber;
 
   // Simple Field (recordLength)
-  uint16_t recordLength = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t recordLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordLength);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->record_length = recordLength;
 
   return OK;
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (referenceType)
-  {
-    uint8_t _value = _message->reference_type;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->reference_type);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (fileNumber)
-  {
-    uint16_t _value = _message->file_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->file_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (recordNumber)
-  {
-    uint16_t _value = _message->record_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->record_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (recordLength)
-  {
-    uint16_t _value = _message->record_length;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->record_length);
+  if(_res != OK) {
+    return _res;
   }
 
   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 24f28ac..bf90007 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item));
@@ -35,10 +36,18 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_i
   }
 
   // Implicit Field (dataLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  uint8_t dataLength = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t dataLength = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &dataLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (referenceType)
-  uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t referenceType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &referenceType);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->reference_type = referenceType;
 
   // Array field (data)
@@ -51,7 +60,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_i
     uint8_t _dataLength = (dataLength) - (1);
     uint8_t dataEndPos = plc4c_spi_read_get_pos(buf) + _dataLength;
     while(plc4c_spi_read_get_pos(buf) < dataEndPos) {
-      uint16_t _value = plc4c_spi_read_unsigned_int(buf, 16);
+      uint16_t _value = 0;
+      _res = plc4c_spi_read_unsigned_int(buf, 16, &_value);
+      if(_res != OK) {
+        return _res;
+      }
       plc4c_utils_list_insert_head_value(data, &_value);
     }
   }
@@ -61,14 +74,18 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_i
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Implicit Field (dataLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_short(buf, 8, (((plc4c_spi_evaluation_helper_count(_message->data)) * (2))) + (1));
+  _res = plc4c_spi_write_unsigned_short(buf, 8, (((plc4c_spi_evaluation_helper_count(_message->data)) * (2))) + (1));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (referenceType)
-  {
-    uint8_t _value = _message->reference_type;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->reference_type);
+  if(_res != OK) {
+    return _res;
   }
 
   // Array field (data)
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 5f54f36..161ee2e 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item));
@@ -35,19 +36,35 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
   }
 
   // Simple Field (referenceType)
-  uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t referenceType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &referenceType);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->reference_type = referenceType;
 
   // Simple Field (fileNumber)
-  uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t fileNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &fileNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->file_number = fileNumber;
 
   // Simple Field (recordNumber)
-  uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t recordNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->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);
+  uint16_t recordLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Array field (recordData)
   plc4c_list* recordData = malloc(sizeof(plc4c_list));
@@ -59,7 +76,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
     uint8_t _recordDataLength = (recordLength) * (2);
     uint8_t recordDataEndPos = plc4c_spi_read_get_pos(buf) + _recordDataLength;
     while(plc4c_spi_read_get_pos(buf) < recordDataEndPos) {
-      uint16_t _value = plc4c_spi_read_unsigned_int(buf, 16);
+      uint16_t _value = 0;
+      _res = plc4c_spi_read_unsigned_int(buf, 16, &_value);
+      if(_res != OK) {
+        return _res;
+      }
       plc4c_utils_list_insert_head_value(recordData, &_value);
     }
   }
@@ -69,27 +90,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (referenceType)
-  {
-    uint8_t _value = _message->reference_type;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->reference_type);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (fileNumber)
-  {
-    uint16_t _value = _message->file_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->file_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (recordNumber)
-  {
-    uint16_t _value = _message->record_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->record_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Array field (recordData)
   {
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 ae169af..af8e4f8 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item));
@@ -35,19 +36,35 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
   }
 
   // Simple Field (referenceType)
-  uint8_t referenceType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t referenceType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &referenceType);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->reference_type = referenceType;
 
   // Simple Field (fileNumber)
-  uint16_t fileNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t fileNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &fileNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->file_number = fileNumber;
 
   // Simple Field (recordNumber)
-  uint16_t recordNumber = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t recordNumber = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordNumber);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->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);
+  uint16_t recordLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &recordLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Array field (recordData)
   plc4c_list* recordData = malloc(sizeof(plc4c_list));
@@ -59,7 +76,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
     uint8_t _recordDataLength = (recordLength) * (2);
     uint8_t recordDataEndPos = plc4c_spi_read_get_pos(buf) + _recordDataLength;
     while(plc4c_spi_read_get_pos(buf) < recordDataEndPos) {
-      uint16_t _value = plc4c_spi_read_unsigned_int(buf, 16);
+      uint16_t _value = 0;
+      _res = plc4c_spi_read_unsigned_int(buf, 16, &_value);
+      if(_res != OK) {
+        return _res;
+      }
       plc4c_utils_list_insert_head_value(recordData, &_value);
     }
   }
@@ -69,27 +90,31 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (referenceType)
-  {
-    uint8_t _value = _message->reference_type;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->reference_type);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (fileNumber)
-  {
-    uint16_t _value = _message->file_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->file_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (recordNumber)
-  {
-    uint16_t _value = _message->record_number;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->record_number);
+  if(_res != OK) {
+    return _res;
   }
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Array field (recordData)
   {
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 787c107..bda3e03 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_serial_adu));
@@ -35,28 +36,44 @@ plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_spi_read
   }
 
   // Simple Field (transactionId)
-  uint16_t transactionId = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t transactionId = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &transactionId);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->transaction_id = transactionId;
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
-    uint16_t _reserved = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t _reserved = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, _reserved);
+    if(_res != OK) {
+      return _res;
+    }
     if(_reserved != 0x0000) {
       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);
+  uint16_t length = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &length);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->length = length;
 
   // Simple Field (address)
-  uint8_t address = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t address = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &address);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->address = address;
 
   // Simple Field (pdu)
   plc4c_modbus_read_write_modbus_pdu* pdu;
-  plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_parse(buf, response, (void*) &pdu);
+  _res = plc4c_modbus_read_write_modbus_pdu_parse(buf, response, (void*) &pdu);
   if(_res != OK) {
     return _res;
   }
@@ -66,35 +83,36 @@ plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_spi_read
 }
 
 plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_serial_adu* _message) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (transactionId)
-  {
-    uint16_t _value = _message->transaction_id;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->transaction_id);
+  if(_res != OK) {
+    return _res;
   }
 
   // Reserved Field
-  plc4c_spi_write_unsigned_int(buf, 16, 0x0000);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, 0x0000);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (length)
-  {
-    uint16_t _value = _message->length;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->length);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (address)
-  {
-    uint8_t _value = _message->address;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->address);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (pdu)
-  {
-    plc4c_modbus_read_write_modbus_pdu* _value = _message->pdu;
-    plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_serialize(buf, _value);
-    if(_res != OK) {
-      return _res;
-    }
+  _res = plc4c_modbus_read_write_modbus_pdu_serialize(buf, "_message->pdu");
+  if(_res != OK) {
+    return _res;
   }
 
   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 869e290..df13dc7 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_modbus_read_write_modbus_tcp_adu));
@@ -35,26 +36,42 @@ plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_spi_read_bu
   }
 
   // Simple Field (transactionIdentifier)
-  uint16_t transactionIdentifier = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t transactionIdentifier = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &transactionIdentifier);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->transaction_identifier = transactionIdentifier;
 
   // Const Field (protocolIdentifier)
-  uint16_t protocolIdentifier = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t protocolIdentifier = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &protocolIdentifier);
+  if(_res != OK) {
+    return _res;
+  }
   if(protocolIdentifier != MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER) {
     return PARSE_ERROR;
     // throw new ParseException("Expected constant value " + MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER + " 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)
-  uint16_t length = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t length = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &length);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (unitIdentifier)
-  uint8_t unitIdentifier = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t unitIdentifier = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &unitIdentifier);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->unit_identifier = unitIdentifier;
 
   // Simple Field (pdu)
   plc4c_modbus_read_write_modbus_pdu* pdu;
-  plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_parse(buf, response, (void*) &pdu);
+  _res = plc4c_modbus_read_write_modbus_pdu_parse(buf, response, (void*) &pdu);
   if(_res != OK) {
     return _res;
   }
@@ -64,32 +81,33 @@ plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_spi_read_bu
 }
 
 plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_tcp_adu* _message) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (transactionIdentifier)
-  {
-    uint16_t _value = _message->transaction_identifier;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->transaction_identifier);
+  if(_res != OK) {
+    return _res;
   }
 
   // Const Field (protocolIdentifier)
   plc4c_spi_write_unsigned_int(buf, 16, MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER);
 
   // Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (plc4c_modbus_read_write_modbus_pdu_length_in_bytes(_message->pdu)) + (1));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (plc4c_modbus_read_write_modbus_pdu_length_in_bytes(_message->pdu)) + (1));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (unitIdentifier)
-  {
-    uint8_t _value = _message->unit_identifier;
-    plc4c_spi_write_unsigned_short(buf, 8, _value);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, _message->unit_identifier);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (pdu)
-  {
-    plc4c_modbus_read_write_modbus_pdu* _value = _message->pdu;
-    plc4c_return_code _res = plc4c_modbus_read_write_modbus_pdu_serialize(buf, _value);
-    if(_res != OK) {
-      return _res;
-    }
+  _res = plc4c_modbus_read_write_modbus_pdu_serialize(buf, "_message->pdu");
+  if(_res != OK) {
+    return _res;
   }
 
   return OK;
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
index 1ce5a53..00a06cc 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
@@ -50,6 +50,7 @@ plc4c_s7_read_write_cotp_packet_discriminator plc4c_s7_read_write_cotp_packet_ge
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_cotp_packet));
@@ -58,23 +59,39 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
   }
 
   // Implicit Field (headerLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  uint8_t headerLength = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t headerLength = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &headerLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Discriminator Field (tpduCode) (Used as input to a switch field)
-  uint8_t tpduCode = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t tpduCode = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &tpduCode);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(tpduCode == 0xF0) { /* COTPPacketData */
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_data;
                     
     // Simple Field (eot)
-    bool eot = plc4c_spi_read_bit(buf);
+    bool eot = false;
+    _res = plc4c_spi_read_bit(buf, &eot);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_data_eot = eot;
 
 
                     
     // Simple Field (tpduRef)
-    unsigned int tpduRef = plc4c_spi_read_unsigned_short(buf, 7);
+    unsigned int tpduRef = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 7, &tpduRef);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_data_tpdu_ref = tpduRef;
 
   } else 
@@ -82,19 +99,31 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_request;
                     
     // Simple Field (destinationReference)
-    uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t destinationReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &destinationReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_request_destination_reference = destinationReference;
 
 
                     
     // Simple Field (sourceReference)
-    uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t sourceReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &sourceReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_request_source_reference = sourceReference;
 
 
                     
     // Enum field (protocolClass)
-    plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_cotp_protocol_class protocolClass = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &protocolClass);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_request_protocol_class = protocolClass;
 
   } else 
@@ -102,19 +131,31 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_response;
                     
     // Simple Field (destinationReference)
-    uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t destinationReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &destinationReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_response_destination_reference = destinationReference;
 
 
                     
     // Simple Field (sourceReference)
-    uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t sourceReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &sourceReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_response_source_reference = sourceReference;
 
 
                     
     // Enum field (protocolClass)
-    plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_cotp_protocol_class protocolClass = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &protocolClass);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_connection_response_protocol_class = protocolClass;
 
   } else 
@@ -122,19 +163,31 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_request;
                     
     // Simple Field (destinationReference)
-    uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t destinationReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &destinationReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_disconnect_request_destination_reference = destinationReference;
 
 
                     
     // Simple Field (sourceReference)
-    uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t sourceReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &sourceReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_disconnect_request_source_reference = sourceReference;
 
 
                     
     // Enum field (protocolClass)
-    plc4c_s7_read_write_cotp_protocol_class protocolClass = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_cotp_protocol_class protocolClass = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &protocolClass);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_disconnect_request_protocol_class = protocolClass;
 
   } else 
@@ -142,13 +195,21 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_response;
                     
     // Simple Field (destinationReference)
-    uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t destinationReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &destinationReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_disconnect_response_destination_reference = destinationReference;
 
 
                     
     // Simple Field (sourceReference)
-    uint16_t sourceReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t sourceReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &sourceReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_disconnect_response_source_reference = sourceReference;
 
   } else 
@@ -156,13 +217,21 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_tpdu_error;
                     
     // Simple Field (destinationReference)
-    uint16_t destinationReference = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t destinationReference = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &destinationReference);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_tpdu_error_destination_reference = destinationReference;
 
 
                     
     // Simple Field (rejectCause)
-    uint8_t rejectCause = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t rejectCause = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &rejectCause);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_packet_tpdu_error_reject_cause = rejectCause;
 
   }
@@ -179,7 +248,7 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     uint8_t parametersEndPos = plc4c_spi_read_get_pos(buf) + _parametersLength;
     while(plc4c_spi_read_get_pos(buf) < parametersEndPos) {
       plc4c_list* _value = NULL;
-      plc4c_return_code _res = plc4c_s7_read_write_cotp_parameter_parse(buf, (((headerLength) + (1))) - (curPos), (void*) &_value);
+      _res = plc4c_s7_read_write_cotp_parameter_parse(buf, (((headerLength) + (1))) - (curPos), (void*) &_value);
       if(_res != OK) {
         return _res;
       }
@@ -197,7 +266,7 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     if(payload == NULL) {
       return NO_MEMORY;
     }
-    plc4c_return_code _res = plc4c_s7_read_write_s7_message_parse(buf, &payload);
+    _res = plc4c_s7_read_write_s7_message_parse(buf, &payload);
     if(_res != OK) {
       return _res;
     }
@@ -208,9 +277,13 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
 }
 
 plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet* _message) {
+  plc4c_return_code _res = OK;
 
   // Implicit Field (headerLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_cotp_packet_length_in_bytes(_message)) - ((((((((_message->payload) != (NULL))) ? plc4c_s7_read_write_s7_message_length_in_bytes(_message->payload) : 0))) + (1))));
+  _res = plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_cotp_packet_length_in_bytes(_message)) - ((((((((_message->payload) != (NULL))) ? plc4c_s7_read_write_s7_message_length_in_bytes(_message->payload) : 0))) + (1))));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Discriminator Field (tpduCode)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_cotp_packet_get_discriminator(_message->_type).tpduCode);
@@ -220,15 +293,15 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_data: {
 
       // Simple Field (eot)
-      {
-        bool _value = _message->cotp_packet_data_eot;
-        plc4c_spi_write_bit(buf, _value);
+      _res = plc4c_spi_write_bit(buf, _message->cotp_packet_data_eot);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (tpduRef)
-      {
-        unsigned int _value = _message->cotp_packet_data_tpdu_ref;
-        plc4c_spi_write_unsigned_short(buf, 7, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 7, _message->cotp_packet_data_tpdu_ref);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -236,21 +309,21 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_request: {
 
       // Simple Field (destinationReference)
-      {
-        uint16_t _value = _message->cotp_packet_connection_request_destination_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_connection_request_destination_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (sourceReference)
-      {
-        uint16_t _value = _message->cotp_packet_connection_request_source_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_connection_request_source_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Enum field (protocolClass)
-      {
-        int8_t _value = _message->cotp_packet_connection_request_protocol_class;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->cotp_packet_connection_request_protocol_class);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -258,21 +331,21 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_connection_response: {
 
       // Simple Field (destinationReference)
-      {
-        uint16_t _value = _message->cotp_packet_connection_response_destination_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_connection_response_destination_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (sourceReference)
-      {
-        uint16_t _value = _message->cotp_packet_connection_response_source_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_connection_response_source_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Enum field (protocolClass)
-      {
-        int8_t _value = _message->cotp_packet_connection_response_protocol_class;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->cotp_packet_connection_response_protocol_class);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -280,21 +353,21 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_request: {
 
       // Simple Field (destinationReference)
-      {
-        uint16_t _value = _message->cotp_packet_disconnect_request_destination_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_disconnect_request_destination_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (sourceReference)
-      {
-        uint16_t _value = _message->cotp_packet_disconnect_request_source_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_disconnect_request_source_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Enum field (protocolClass)
-      {
-        int8_t _value = _message->cotp_packet_disconnect_request_protocol_class;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->cotp_packet_disconnect_request_protocol_class);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -302,15 +375,15 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_disconnect_response: {
 
       // Simple Field (destinationReference)
-      {
-        uint16_t _value = _message->cotp_packet_disconnect_response_destination_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_disconnect_response_destination_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (sourceReference)
-      {
-        uint16_t _value = _message->cotp_packet_disconnect_response_source_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_disconnect_response_source_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -318,15 +391,15 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
     case plc4c_s7_read_write_cotp_packet_type_s7_read_write_cotp_packet_tpdu_error: {
 
       // Simple Field (destinationReference)
-      {
-        uint16_t _value = _message->cotp_packet_tpdu_error_destination_reference;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_packet_tpdu_error_destination_reference);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (rejectCause)
-      {
-        uint8_t _value = _message->cotp_packet_tpdu_error_reject_cause;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->cotp_packet_tpdu_error_reject_cause);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -348,8 +421,7 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buff
 
   // Optional Field (payload)
   if(_message->payload != NULL) {
-    plc4c_s7_read_write_s7_message* _value = _message->payload;
-    plc4c_return_code _res = plc4c_s7_read_write_s7_message_serialize(buf, _value);
+    _res = plc4c_s7_read_write_s7_message_serialize(buf, "_message->payload");
     if(_res != OK) {
       return _res;
     }
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
index e1cb8dc..36d15d1 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
@@ -48,6 +48,7 @@ plc4c_s7_read_write_cotp_parameter_discriminator plc4c_s7_read_write_cotp_parame
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_cotp_parameter));
@@ -56,17 +57,29 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
   }
 
   // Discriminator Field (parameterType) (Used as input to a switch field)
-  uint8_t parameterType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t parameterType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &parameterType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Implicit Field (parameterLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  uint8_t parameterLength = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t parameterLength = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &parameterLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(parameterType == 0xC0) { /* COTPParameterTpduSize */
     (*_message)->_type = plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_tpdu_size;
                     
     // Enum field (tpduSize)
-    plc4c_s7_read_write_cotp_tpdu_size tpduSize = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_cotp_tpdu_size tpduSize = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &tpduSize);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_parameter_tpdu_size_tpdu_size = tpduSize;
 
   } else 
@@ -74,7 +87,11 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_calling_tsap;
                     
     // Simple Field (tsapId)
-    uint16_t tsapId = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t tsapId = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &tsapId);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_parameter_calling_tsap_tsap_id = tsapId;
 
   } else 
@@ -82,7 +99,11 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_called_tsap;
                     
     // Simple Field (tsapId)
-    uint16_t tsapId = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t tsapId = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &tsapId);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_parameter_called_tsap_tsap_id = tsapId;
 
   } else 
@@ -90,7 +111,11 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
     (*_message)->_type = plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_checksum;
                     
     // Simple Field (crc)
-    uint8_t crc = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t crc = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &crc);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->cotp_parameter_checksum_crc = crc;
 
   } else 
@@ -108,7 +133,11 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
                   
-        uint8_t _value = plc4c_spi_read_unsigned_short(buf, 8);
+        uint8_t _value = 0;
+        _res = plc4c_spi_read_unsigned_short(buf, 8, &_value);
+        if(_res != OK) {
+          return _res;
+        }
         plc4c_utils_list_insert_head_value(data, &_value);
       }
     }
@@ -120,21 +149,25 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
 }
 
 plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter* _message) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (parameterType)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_cotp_parameter_get_discriminator(_message->_type).parameterType);
 
   // Implicit Field (parameterLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_cotp_parameter_length_in_bytes(_message)) - (2));
+  _res = plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_cotp_parameter_length_in_bytes(_message)) - (2));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending of the current type, serialize the sub-type elements)
   switch(_message->_type) {
     case plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_tpdu_size: {
 
       // Enum field (tpduSize)
-      {
-        int8_t _value = _message->cotp_parameter_tpdu_size_tpdu_size;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->cotp_parameter_tpdu_size_tpdu_size);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -142,9 +175,9 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_b
     case plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_calling_tsap: {
 
       // Simple Field (tsapId)
-      {
-        uint16_t _value = _message->cotp_parameter_calling_tsap_tsap_id;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_parameter_calling_tsap_tsap_id);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -152,9 +185,9 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_b
     case plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_called_tsap: {
 
       // Simple Field (tsapId)
-      {
-        uint16_t _value = _message->cotp_parameter_called_tsap_tsap_id;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->cotp_parameter_called_tsap_tsap_id);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -162,9 +195,9 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_b
     case plc4c_s7_read_write_cotp_parameter_type_s7_read_write_cotp_parameter_checksum: {
 
       // Simple Field (crc)
-      {
-        uint8_t _value = _message->cotp_parameter_checksum_crc;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->cotp_parameter_checksum_crc);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_address.c b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
index 8b8af7a..f170db3 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_address.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
@@ -40,6 +40,7 @@ plc4c_s7_read_write_s7_address_discriminator plc4c_s7_read_write_s7_address_get_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_address));
@@ -48,39 +49,63 @@ plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* bu
   }
 
   // Discriminator Field (addressType) (Used as input to a switch field)
-  uint8_t addressType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t addressType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &addressType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(addressType == 0x10) { /* S7AddressAny */
     (*_message)->_type = plc4c_s7_read_write_s7_address_type_s7_read_write_s7_address_any;
                     
     // Enum field (transportSize)
-    plc4c_s7_read_write_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_transport_size transportSize = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &transportSize);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_transport_size = transportSize;
 
 
                     
     // Simple Field (numberOfElements)
-    uint16_t numberOfElements = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t numberOfElements = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &numberOfElements);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_number_of_elements = numberOfElements;
 
 
                     
     // Simple Field (dbNumber)
-    uint16_t dbNumber = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t dbNumber = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &dbNumber);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_db_number = dbNumber;
 
 
                     
     // Enum field (area)
-    plc4c_s7_read_write_memory_area area = plc4c_spi_read_byte(buf, 8);
+    plc4c_s7_read_write_memory_area area = NULL;
+    _res = plc4c_spi_read_byte(buf, 8, &area);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_area = area;
 
 
                     
     // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
     {
-      unsigned int _reserved = plc4c_spi_read_unsigned_short(buf, 5);
+      unsigned int _reserved = 0;
+      _res = plc4c_spi_read_unsigned_short(buf, 5, _reserved);
+      if(_res != OK) {
+        return _res;
+      }
       if(_reserved != 0x00) {
         printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, _reserved);
       }
@@ -89,13 +114,21 @@ plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* bu
 
                     
     // Simple Field (byteAddress)
-    uint16_t byteAddress = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t byteAddress = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &byteAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_byte_address = byteAddress;
 
 
                     
     // Simple Field (bitAddress)
-    unsigned int bitAddress = plc4c_spi_read_unsigned_byte(buf, 3);
+    unsigned int bitAddress = 0;
+    _res = plc4c_spi_read_unsigned_byte(buf, 3, &bitAddress);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_address_any_bit_address = bitAddress;
 
   }
@@ -104,6 +137,7 @@ plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* bu
 }
 
 plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address* _message) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (addressType)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_address_get_discriminator(_message->_type).addressType);
@@ -113,42 +147,45 @@ plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffe
     case plc4c_s7_read_write_s7_address_type_s7_read_write_s7_address_any: {
 
       // Enum field (transportSize)
-      {
-        int8_t _value = _message->s7_address_any_transport_size;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->s7_address_any_transport_size);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (numberOfElements)
-      {
-        uint16_t _value = _message->s7_address_any_number_of_elements;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_address_any_number_of_elements);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (dbNumber)
-      {
-        uint16_t _value = _message->s7_address_any_db_number;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_address_any_db_number);
+      if(_res != OK) {
+        return _res;
       }
 
       // Enum field (area)
-      {
-        int8_t _value = _message->s7_address_any_area;
-        plc4c_spi_write_byte(buf, 8, _value);
+      _res = plc4c_spi_write_byte(buf, 8, _message->s7_address_any_area);
+      if(_res != OK) {
+        return _res;
       }
 
       // Reserved Field
-      plc4c_spi_write_unsigned_short(buf, 5, 0x00);
+      _res = plc4c_spi_write_unsigned_short(buf, 5, 0x00);
+      if(_res != OK) {
+        return _res;
+      }
 
       // Simple Field (byteAddress)
-      {
-        uint16_t _value = _message->s7_address_any_byte_address;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_address_any_byte_address);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (bitAddress)
-      {
-        unsigned int _value = _message->s7_address_any_bit_address;
-        plc4c_spi_write_unsigned_byte(buf, 3, _value);
+      _res = plc4c_spi_write_unsigned_byte(buf, 3, _message->s7_address_any_bit_address);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message.c b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
index 84780dc..99476a9 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
@@ -46,6 +46,7 @@ plc4c_s7_read_write_s7_message_discriminator plc4c_s7_read_write_s7_message_get_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_message));
@@ -54,32 +55,56 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
   }
 
   // Const Field (protocolId)
-  uint8_t protocolId = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t protocolId = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &protocolId);
+  if(_res != OK) {
+    return _res;
+  }
   if(protocolId != S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID) {
     return PARSE_ERROR;
     // throw new ParseException("Expected constant value " + S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID + " but got " + protocolId);
   }
 
   // Discriminator Field (messageType) (Used as input to a switch field)
-  uint8_t messageType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t messageType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &messageType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
-    uint16_t _reserved = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t _reserved = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, _reserved);
+    if(_res != OK) {
+      return _res;
+    }
     if(_reserved != 0x0000) {
       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);
+  uint16_t tpduReference = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &tpduReference);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->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);
+  uint16_t parameterLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &parameterLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Implicit Field (payloadLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  uint16_t payloadLength = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t payloadLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &payloadLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(messageType == 0x01) { /* S7MessageRequest */
@@ -89,13 +114,21 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
     (*_message)->_type = plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response;
                     
     // Simple Field (errorClass)
-    uint8_t errorClass = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t errorClass = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &errorClass);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_message_response_error_class = errorClass;
 
 
                     
     // Simple Field (errorCode)
-    uint8_t errorCode = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t errorCode = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &errorCode);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_message_response_error_code = errorCode;
 
   } else 
@@ -103,13 +136,21 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
     (*_message)->_type = plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response_data;
                     
     // Simple Field (errorClass)
-    uint8_t errorClass = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t errorClass = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &errorClass);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_message_response_data_error_class = errorClass;
 
 
                     
     // Simple Field (errorCode)
-    uint8_t errorCode = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t errorCode = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &errorCode);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_message_response_data_error_code = errorCode;
 
   } else 
@@ -124,7 +165,7 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
     if(parameter == NULL) {
       return NO_MEMORY;
     }
-    plc4c_return_code _res = plc4c_s7_read_write_s7_parameter_parse(buf, messageType, &parameter);
+    _res = plc4c_s7_read_write_s7_parameter_parse(buf, messageType, &parameter);
     if(_res != OK) {
       return _res;
     }
@@ -138,7 +179,7 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
     if(payload == NULL) {
       return NO_MEMORY;
     }
-    plc4c_return_code _res = plc4c_s7_read_write_s7_payload_parse(buf, messageType, parameter, &payload);
+    _res = plc4c_s7_read_write_s7_payload_parse(buf, messageType, parameter, &payload);
     if(_res != OK) {
       return _res;
     }
@@ -149,6 +190,7 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
 }
 
 plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message* _message) {
+  plc4c_return_code _res = OK;
 
   // Const Field (protocolId)
   plc4c_spi_write_unsigned_short(buf, 8, S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID);
@@ -157,19 +199,28 @@ plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffe
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_message_get_discriminator(_message->_type).messageType);
 
   // Reserved Field
-  plc4c_spi_write_unsigned_int(buf, 16, 0x0000);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, 0x0000);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (tpduReference)
-  {
-    uint16_t _value = _message->tpdu_reference;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->tpdu_reference);
+  if(_res != OK) {
+    return _res;
   }
 
   // Implicit Field (parameterLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (((_message->parameter) != (NULL)) ? plc4c_s7_read_write_s7_parameter_length_in_bytes(_message->parameter) : 0));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (((_message->parameter) != (NULL)) ? plc4c_s7_read_write_s7_parameter_length_in_bytes(_message->parameter) : 0));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Implicit Field (payloadLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (((_message->payload) != (NULL)) ? plc4c_s7_read_write_s7_payload_length_in_bytes(_message->payload) : 0));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (((_message->payload) != (NULL)) ? plc4c_s7_read_write_s7_payload_length_in_bytes(_message->payload) : 0));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending of the current type, serialize the sub-type elements)
   switch(_message->_type) {
@@ -180,15 +231,15 @@ plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffe
     case plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response: {
 
       // Simple Field (errorClass)
-      {
-        uint8_t _value = _message->s7_message_response_error_class;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_message_response_error_class);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (errorCode)
-      {
-        uint8_t _value = _message->s7_message_response_error_code;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_message_response_error_code);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -196,15 +247,15 @@ plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffe
     case plc4c_s7_read_write_s7_message_type_s7_read_write_s7_message_response_data: {
 
       // Simple Field (errorClass)
-      {
-        uint8_t _value = _message->s7_message_response_data_error_class;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_message_response_data_error_class);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (errorCode)
-      {
-        uint8_t _value = _message->s7_message_response_data_error_code;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_message_response_data_error_code);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -217,8 +268,7 @@ plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffe
 
   // Optional Field (parameter)
   if(_message->parameter != NULL) {
-    plc4c_s7_read_write_s7_parameter* _value = _message->parameter;
-    plc4c_return_code _res = plc4c_s7_read_write_s7_parameter_serialize(buf, _value);
+    _res = plc4c_s7_read_write_s7_parameter_serialize(buf, "_message->parameter");
     if(_res != OK) {
       return _res;
     }
@@ -226,8 +276,7 @@ plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffe
 
   // Optional Field (payload)
   if(_message->payload != NULL) {
-    plc4c_s7_read_write_s7_payload* _value = _message->payload;
-    plc4c_return_code _res = plc4c_s7_read_write_s7_payload_serialize(buf, _value);
+    _res = plc4c_s7_read_write_s7_payload_serialize(buf, "_message->payload");
     if(_res != OK) {
       return _res;
     }
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
index 9a107fb..40a01dd 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
@@ -50,6 +50,7 @@ plc4c_s7_read_write_s7_parameter_discriminator plc4c_s7_read_write_s7_parameter_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_parameter));
@@ -58,7 +59,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
   }
 
   // Discriminator Field (parameterType) (Used as input to a switch field)
-  uint8_t parameterType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t parameterType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &parameterType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(parameterType == 0xF0) { /* S7ParameterSetupCommunication */
@@ -66,7 +71,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
                     
     // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
     {
-      uint8_t _reserved = plc4c_spi_read_unsigned_short(buf, 8);
+      uint8_t _reserved = 0;
+      _res = plc4c_spi_read_unsigned_short(buf, 8, _reserved);
+      if(_res != OK) {
+        return _res;
+      }
       if(_reserved != 0x00) {
         printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, _reserved);
       }
@@ -75,19 +84,31 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
 
                     
     // Simple Field (maxAmqCaller)
-    uint16_t maxAmqCaller = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t maxAmqCaller = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &maxAmqCaller);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_setup_communication_max_amq_caller = maxAmqCaller;
 
 
                     
     // Simple Field (maxAmqCallee)
-    uint16_t maxAmqCallee = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t maxAmqCallee = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &maxAmqCallee);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_setup_communication_max_amq_callee = maxAmqCallee;
 
 
                     
     // Simple Field (pduLength)
-    uint16_t pduLength = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t pduLength = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &pduLength);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_setup_communication_pdu_length = pduLength;
 
   } else 
@@ -95,7 +116,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_request;
                     
     // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t numItems = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &numItems);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -110,7 +135,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -124,7 +149,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_response;
                     
     // Simple Field (numItems)
-    uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t numItems = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &numItems);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_read_var_response_num_items = numItems;
 
   } else 
@@ -132,7 +161,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_request;
                     
     // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t numItems = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &numItems);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -147,7 +180,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -161,7 +194,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_response;
                     
     // Simple Field (numItems)
-    uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t numItems = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &numItems);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_write_var_response_num_items = numItems;
 
   } else 
@@ -169,7 +206,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_user_data;
                     
     // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint8_t numItems = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t numItems = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &numItems);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -184,7 +225,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_parameter_user_data_item_parse(buf, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_parameter_user_data_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -199,6 +240,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
 }
 
 plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter* _message) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (parameterType)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_parameter_get_discriminator(_message->_type).parameterType);
@@ -208,24 +250,27 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_setup_communication: {
 
       // Reserved Field
-      plc4c_spi_write_unsigned_short(buf, 8, 0x00);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, 0x00);
+      if(_res != OK) {
+        return _res;
+      }
 
       // Simple Field (maxAmqCaller)
-      {
-        uint16_t _value = _message->s7_parameter_setup_communication_max_amq_caller;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_parameter_setup_communication_max_amq_caller);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (maxAmqCallee)
-      {
-        uint16_t _value = _message->s7_parameter_setup_communication_max_amq_callee;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_parameter_setup_communication_max_amq_callee);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (pduLength)
-      {
-        uint16_t _value = _message->s7_parameter_setup_communication_pdu_length;
-        plc4c_spi_write_unsigned_int(buf, 16, _value);
+      _res = plc4c_spi_write_unsigned_int(buf, 16, _message->s7_parameter_setup_communication_pdu_length);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -233,7 +278,10 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_request: {
 
       // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_read_var_request_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_read_var_request_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -253,9 +301,9 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_read_var_response: {
 
       // Simple Field (numItems)
-      {
-        uint8_t _value = _message->s7_parameter_read_var_response_num_items;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_read_var_response_num_items);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -263,7 +311,10 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_request: {
 
       // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_write_var_request_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_write_var_request_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
@@ -283,9 +334,9 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_write_var_response: {
 
       // Simple Field (numItems)
-      {
-        uint8_t _value = _message->s7_parameter_write_var_response_num_items;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_write_var_response_num_items);
+      if(_res != OK) {
+        return _res;
       }
 
       break;
@@ -293,7 +344,10 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buf
     case plc4c_s7_read_write_s7_parameter_type_s7_read_write_s7_parameter_user_data: {
 
       // Implicit Field (numItems) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_user_data_items));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_spi_evaluation_helper_count(_message->s7_parameter_user_data_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
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 2f47eb4..fa90799 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
@@ -40,6 +40,7 @@ plc4c_s7_read_write_s7_parameter_user_data_item_discriminator plc4c_s7_read_writ
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_parameter_user_data_item));
@@ -48,43 +49,71 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
   }
 
   // Discriminator Field (itemType) (Used as input to a switch field)
-  uint8_t itemType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t itemType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &itemType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(itemType == 0x12) { /* S7ParameterUserDataItemCPUFunctions */
     (*_message)->_type = plc4c_s7_read_write_s7_parameter_user_data_item_type_s7_read_write_s7_parameter_user_data_item_cpu_functions;
                     
     // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint8_t itemLength = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t itemLength = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &itemLength);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
     // Simple Field (method)
-    uint8_t method = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t method = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &method);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_user_data_item_cpu_functions_method = method;
 
 
                     
     // Simple Field (cpuFunctionType)
-    unsigned int cpuFunctionType = plc4c_spi_read_unsigned_byte(buf, 4);
+    unsigned int cpuFunctionType = 0;
+    _res = plc4c_spi_read_unsigned_byte(buf, 4, &cpuFunctionType);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_user_data_item_cpu_functions_cpu_function_type = cpuFunctionType;
 
 
                     
     // Simple Field (cpuFunctionGroup)
-    unsigned int cpuFunctionGroup = plc4c_spi_read_unsigned_byte(buf, 4);
+    unsigned int cpuFunctionGroup = 0;
+    _res = plc4c_spi_read_unsigned_byte(buf, 4, &cpuFunctionGroup);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_user_data_item_cpu_functions_cpu_function_group = cpuFunctionGroup;
 
 
                     
     // Simple Field (cpuSubfunction)
-    uint8_t cpuSubfunction = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t cpuSubfunction = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &cpuSubfunction);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_user_data_item_cpu_functions_cpu_subfunction = cpuSubfunction;
 
 
                     
     // Simple Field (sequenceNumber)
-    uint8_t sequenceNumber = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t sequenceNumber = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &sequenceNumber);
+    if(_res != OK) {
+      return _res;
+    }
     (*_message)->s7_parameter_user_data_item_cpu_functions_sequence_number = sequenceNumber;
 
 
@@ -96,7 +125,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
       if(dataUnitReferenceNumber == NULL) {
         return NO_MEMORY;
       }
-      *dataUnitReferenceNumber = plc4c_spi_read_unsigned_short(buf, 8);
+      *dataUnitReferenceNumber = 0;
+      _res = plc4c_spi_read_unsigned_short(buf, 8, &dataUnitReferenceNumber);
+      if(_res != OK) {
+        return _res;
+      }
       (*_message)->s7_parameter_user_data_item_cpu_functions_data_unit_reference_number = dataUnitReferenceNumber;
     }
 
@@ -109,7 +142,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
       if(lastDataUnit == NULL) {
         return NO_MEMORY;
       }
-      *lastDataUnit = plc4c_spi_read_unsigned_short(buf, 8);
+      *lastDataUnit = 0;
+      _res = plc4c_spi_read_unsigned_short(buf, 8, &lastDataUnit);
+      if(_res != OK) {
+        return _res;
+      }
       (*_message)->s7_parameter_user_data_item_cpu_functions_last_data_unit = lastDataUnit;
     }
 
@@ -122,7 +159,11 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
       if(errorCode == NULL) {
         return NO_MEMORY;
       }
-      *errorCode = plc4c_spi_read_unsigned_int(buf, 16);
+      *errorCode = 0;
+      _res = plc4c_spi_read_unsigned_int(buf, 16, &errorCode);
+      if(_res != OK) {
+        return _res;
+      }
       (*_message)->s7_parameter_user_data_item_cpu_functions_error_code = errorCode;
     }
 
@@ -132,6 +173,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (itemType)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_parameter_user_data_item_get_discriminator(_message->_type).itemType);
@@ -141,54 +183,63 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4
     case plc4c_s7_read_write_s7_parameter_user_data_item_type_s7_read_write_s7_parameter_user_data_item_cpu_functions: {
 
       // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_s7_parameter_user_data_item_length_in_bytes(_message)) - (2));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, (plc4c_s7_read_write_s7_parameter_user_data_item_length_in_bytes(_message)) - (2));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Simple Field (method)
-      {
-        uint8_t _value = _message->s7_parameter_user_data_item_cpu_functions_method;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_user_data_item_cpu_functions_method);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (cpuFunctionType)
-      {
-        unsigned int _value = _message->s7_parameter_user_data_item_cpu_functions_cpu_function_type;
-        plc4c_spi_write_unsigned_byte(buf, 4, _value);
+      _res = plc4c_spi_write_unsigned_byte(buf, 4, _message->s7_parameter_user_data_item_cpu_functions_cpu_function_type);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (cpuFunctionGroup)
-      {
-        unsigned int _value = _message->s7_parameter_user_data_item_cpu_functions_cpu_function_group;
-        plc4c_spi_write_unsigned_byte(buf, 4, _value);
+      _res = plc4c_spi_write_unsigned_byte(buf, 4, _message->s7_parameter_user_data_item_cpu_functions_cpu_function_group);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (cpuSubfunction)
-      {
-        uint8_t _value = _message->s7_parameter_user_data_item_cpu_functions_cpu_subfunction;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_user_data_item_cpu_functions_cpu_subfunction);
+      if(_res != OK) {
+        return _res;
       }
 
       // Simple Field (sequenceNumber)
-      {
-        uint8_t _value = _message->s7_parameter_user_data_item_cpu_functions_sequence_number;
-        plc4c_spi_write_unsigned_short(buf, 8, _value);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_user_data_item_cpu_functions_sequence_number);
+      if(_res != OK) {
+        return _res;
       }
 
       // Optional Field (dataUnitReferenceNumber)
       if(_message->s7_parameter_user_data_item_cpu_functions_data_unit_reference_number != NULL) {
-        uint8_t* _value = _message->s7_parameter_user_data_item_cpu_functions_data_unit_reference_number;
-        plc4c_spi_write_unsigned_short(buf, 8, *_value);
+        _res= plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_user_data_item_cpu_functions_data_unit_reference_number);
+        if(_res != OK) {
+          return _res;
+        }
       }
 
       // Optional Field (lastDataUnit)
       if(_message->s7_parameter_user_data_item_cpu_functions_last_data_unit != NULL) {
-        uint8_t* _value = _message->s7_parameter_user_data_item_cpu_functions_last_data_unit;
-        plc4c_spi_write_unsigned_short(buf, 8, *_value);
+        _res= plc4c_spi_write_unsigned_short(buf, 8, _message->s7_parameter_user_data_item_cpu_functions_last_data_unit);
+        if(_res != OK) {
+          return _res;
+        }
       }
 
       // Optional Field (errorCode)
       if(_message->s7_parameter_user_data_item_cpu_functions_error_code != NULL) {
-        uint16_t* _value = _message->s7_parameter_user_data_item_cpu_functions_error_code;
-        plc4c_spi_write_unsigned_int(buf, 16, *_value);
+        _res= plc4c_spi_write_unsigned_int(buf, 16, _message->s7_parameter_user_data_item_cpu_functions_error_code);
+        if(_res != OK) {
+          return _res;
+        }
       }
 
       break;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
index dbafb86..80abe8d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
@@ -46,6 +46,7 @@ plc4c_s7_read_write_s7_payload_discriminator plc4c_s7_read_write_s7_payload_get_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_payload));
@@ -68,7 +69,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -92,7 +93,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -116,7 +117,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_var_payload_status_item_parse(buf, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_var_payload_status_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -140,7 +141,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_payload_user_data_item_parse(buf, ((plc4c_s7_read_write_s7_parameter_user_data_item*) (plc4c_utils_list_get(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items, 0)))->s7_parameter_user_data_item_cpu_functions_cpu_function_type, (void*) &_value);
+        _res = plc4c_s7_read_write_s7_payload_user_data_item_parse(buf, ((plc4c_s7_read_write_s7_parameter_user_data_item*) (plc4c_utils_list_get(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items, 0)))->s7_parameter_user_data_item_cpu_functions_cpu_function_type, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -155,6 +156,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
 }
 
 plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload* _message) {
+  plc4c_return_code _res = OK;
 
   // Switch Field (Depending of the current type, serialize the sub-type elements)
   switch(_message->_type) {
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 50dba2c..8c3ec93 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
@@ -42,6 +42,7 @@ plc4c_s7_read_write_s7_payload_user_data_item_discriminator plc4c_s7_read_write_
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_payload_user_data_item));
@@ -50,26 +51,42 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
   }
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_data_transport_error_code returnCode = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &returnCode);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->return_code = returnCode;
 
   // Enum field (transportSize)
-  plc4c_s7_read_write_data_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_data_transport_size transportSize = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &transportSize);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->transport_size = transportSize;
 
   // 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);
+  uint16_t dataLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &dataLength);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (szlId)
   plc4c_s7_read_write_szl_id* szlId;
-  plc4c_return_code _res = plc4c_s7_read_write_szl_id_parse(buf, (void*) &szlId);
+  _res = plc4c_s7_read_write_szl_id_parse(buf, (void*) &szlId);
   if(_res != OK) {
     return _res;
   }
   (*_message)->szl_id = szlId;
 
   // Simple Field (szlIndex)
-  uint16_t szlIndex = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t szlIndex = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &szlIndex);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->szl_index = szlIndex;
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
@@ -80,7 +97,11 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
     (*_message)->_type = plc4c_s7_read_write_s7_payload_user_data_item_type_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);
+    uint16_t szlItemLength = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &szlItemLength);
+    if(_res != OK) {
+      return _res;
+    }
     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 " + S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_READ_SZL_RESPONSE_SZL_ITEM_LENGTH + " but got " + szlItemLength);
@@ -89,7 +110,11 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
 
                     
     // Implicit Field (szlItemCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint16_t szlItemCount = plc4c_spi_read_unsigned_int(buf, 16);
+    uint16_t szlItemCount = 0;
+    _res = plc4c_spi_read_unsigned_int(buf, 16, &szlItemCount);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
@@ -104,7 +129,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
                           plc4c_list* _value = NULL;
-        plc4c_return_code _res = plc4c_s7_read_write_szl_data_tree_item_parse(buf, (void*) &_value);
+        _res = plc4c_s7_read_write_szl_data_tree_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
         }
@@ -119,35 +144,36 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Enum field (returnCode)
-  {
-    int8_t _value = _message->return_code;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->return_code);
+  if(_res != OK) {
+    return _res;
   }
 
   // Enum field (transportSize)
-  {
-    int8_t _value = _message->transport_size;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->transport_size);
+  if(_res != OK) {
+    return _res;
   }
 
   // Implicit Field (dataLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (plc4c_s7_read_write_s7_payload_user_data_item_length_in_bytes(_message)) - (4));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (plc4c_s7_read_write_s7_payload_user_data_item_length_in_bytes(_message)) - (4));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (szlId)
-  {
-    plc4c_s7_read_write_szl_id* _value = _message->szl_id;
-    plc4c_return_code _res = plc4c_s7_read_write_szl_id_serialize(buf, _value);
-    if(_res != OK) {
-      return _res;
-    }
+  _res = plc4c_s7_read_write_szl_id_serialize(buf, "_message->szl_id");
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (szlIndex)
-  {
-    uint16_t _value = _message->szl_index;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->szl_index);
+  if(_res != OK) {
+    return _res;
   }
 
   // Switch Field (Depending of the current type, serialize the sub-type elements)
@@ -162,7 +188,10 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_
       plc4c_spi_write_unsigned_int(buf, 16, S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_READ_SZL_RESPONSE_SZL_ITEM_LENGTH);
 
       // Implicit Field (szlItemCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_int(buf, 16, plc4c_spi_evaluation_helper_count(_message->s7_payload_user_data_item_cpu_function_read_szl_response_items));
+      _res = plc4c_spi_write_unsigned_int(buf, 16, plc4c_spi_evaluation_helper_count(_message->s7_payload_user_data_item_cpu_function_read_szl_response_items));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Array field (items)
       {
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 22e0e71..7840ad0 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_var_payload_data_item));
@@ -35,15 +36,27 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
   }
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_data_transport_error_code returnCode = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &returnCode);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->return_code = returnCode;
 
   // Enum field (transportSize)
-  plc4c_s7_read_write_data_transport_size transportSize = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_data_transport_size transportSize = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &transportSize);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->transport_size = transportSize;
 
   // Simple Field (dataLength)
-  uint16_t dataLength = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t dataLength = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &dataLength);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->data_length = dataLength;
 
   // Array field (data)
@@ -57,7 +70,11 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
                 
-      int8_t _value = plc4c_spi_read_byte(buf, 8);
+      int8_t _value = 0;
+      _res = plc4c_spi_read_byte(buf, 8, &_value);
+      if(_res != OK) {
+        return _res;
+      }
       plc4c_utils_list_insert_head_value(data, &_value);
     }
   }
@@ -68,7 +85,11 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
     bool _needsPadding = (bool) ((plc4c_spi_read_has_more(buf, 8)) && ((!(lastItem)) && (((((plc4c_spi_evaluation_helper_count(data)) % (2))) == (1)))));
     if(_needsPadding) {
       // Just read the padding data and ignore it
-      plc4c_spi_read_unsigned_short(buf, 8);
+      uint8_t _paddingValue = 0;
+      _res = plc4c_spi_read_unsigned_short(buf, 8, &_paddingValue);
+      if(_res != OK) {
+        return _res;
+      }
     }
   }
 
@@ -76,23 +97,24 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
 }
 
 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, bool lastItem) {
+  plc4c_return_code _res = OK;
 
   // Enum field (returnCode)
-  {
-    int8_t _value = _message->return_code;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->return_code);
+  if(_res != OK) {
+    return _res;
   }
 
   // Enum field (transportSize)
-  {
-    int8_t _value = _message->transport_size;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->transport_size);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (dataLength)
-  {
-    uint16_t _value = _message->data_length;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->data_length);
+  if(_res != OK) {
+    return _res;
   }
 
   // Array field (data)
@@ -110,7 +132,10 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_s
     bool _needsPadding = (bool) ((!(lastItem)) && (((((plc4c_spi_evaluation_helper_count(_message->data)) % (2))) == (1))));
     if(_needsPadding) {
       // Just output the default padding data
-      plc4c_spi_write_unsigned_short(buf, 8, 0);
+      _res = plc4c_spi_write_unsigned_short(buf, 8, 0);
+      if(_res != OK) {
+        return _res;
+      }
     }
   }
 
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 663db6b..794a2a7 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_var_payload_status_item));
@@ -35,18 +36,23 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_parse(plc4c_spi
   }
 
   // Enum field (returnCode)
-  plc4c_s7_read_write_data_transport_error_code returnCode = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_data_transport_error_code returnCode = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &returnCode);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->return_code = returnCode;
 
   return OK;
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Enum field (returnCode)
-  {
-    int8_t _value = _message->return_code;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->return_code);
+  if(_res != OK) {
+    return _res;
   }
 
   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 8493dc9..7696b33 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
@@ -40,6 +40,7 @@ plc4c_s7_read_write_s7_var_request_parameter_item_discriminator plc4c_s7_read_wr
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_s7_var_request_parameter_item));
@@ -48,20 +49,28 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_
   }
 
   // Discriminator Field (itemType) (Used as input to a switch field)
-  uint8_t itemType = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t itemType = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &itemType);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
   if(itemType == 0x12) { /* S7VarRequestParameterItemAddress */
     (*_message)->_type = plc4c_s7_read_write_s7_var_request_parameter_item_type_s7_read_write_s7_var_request_parameter_item_address;
                     
     // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    uint8_t itemLength = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t itemLength = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, &itemLength);
+    if(_res != OK) {
+      return _res;
+    }
 
 
                     
     // Simple Field (address)
     plc4c_s7_read_write_s7_address* address;
-    plc4c_return_code _res = plc4c_s7_read_write_s7_address_parse(buf, (void*) &address);
+    _res = plc4c_s7_read_write_s7_address_parse(buf, (void*) &address);
     if(_res != OK) {
       return _res;
     }
@@ -73,6 +82,7 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Discriminator Field (itemType)
   plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_var_request_parameter_item_get_discriminator(_message->_type).itemType);
@@ -82,15 +92,15 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(pl
     case plc4c_s7_read_write_s7_var_request_parameter_item_type_s7_read_write_s7_var_request_parameter_item_address: {
 
       // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-      plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_address_length_in_bytes(_message->s7_var_request_parameter_item_address_address));
+      _res = plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_address_length_in_bytes(_message->s7_var_request_parameter_item_address_address));
+      if(_res != OK) {
+        return _res;
+      }
 
       // Simple Field (address)
-      {
-        plc4c_s7_read_write_s7_address* _value = _message->s7_var_request_parameter_item_address_address;
-        plc4c_return_code _res = plc4c_s7_read_write_s7_address_serialize(buf, _value);
-        if(_res != OK) {
-          return _res;
-        }
+      _res = plc4c_s7_read_write_s7_address_serialize(buf, "_message->s7_var_request_parameter_item_address_address");
+      if(_res != OK) {
+        return _res;
       }
 
       break;
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 4934f0f..f508054 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
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_szl_data_tree_item));
@@ -35,7 +36,11 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_bu
   }
 
   // Simple Field (itemIndex)
-  uint16_t itemIndex = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t itemIndex = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &itemIndex);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->item_index = itemIndex;
 
   // Array field (mlfb)
@@ -49,33 +54,50 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_bu
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
                 
-      int8_t _value = plc4c_spi_read_byte(buf, 8);
+      int8_t _value = 0;
+      _res = plc4c_spi_read_byte(buf, 8, &_value);
+      if(_res != OK) {
+        return _res;
+      }
       plc4c_utils_list_insert_head_value(mlfb, &_value);
     }
   }
   (*_message)->mlfb = mlfb;
 
   // Simple Field (moduleTypeId)
-  uint16_t moduleTypeId = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t moduleTypeId = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &moduleTypeId);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->module_type_id = moduleTypeId;
 
   // Simple Field (ausbg)
-  uint16_t ausbg = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t ausbg = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &ausbg);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->ausbg = ausbg;
 
   // Simple Field (ausbe)
-  uint16_t ausbe = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t ausbe = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &ausbe);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->ausbe = ausbe;
 
   return OK;
 }
 
 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) {
+  plc4c_return_code _res = OK;
 
   // Simple Field (itemIndex)
-  {
-    uint16_t _value = _message->item_index;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->item_index);
+  if(_res != OK) {
+    return _res;
   }
 
   // Array field (mlfb)
@@ -89,21 +111,21 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_spi_wri
   }
 
   // Simple Field (moduleTypeId)
-  {
-    uint16_t _value = _message->module_type_id;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->module_type_id);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (ausbg)
-  {
-    uint16_t _value = _message->ausbg;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->ausbg);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (ausbe)
-  {
-    uint16_t _value = _message->ausbe;
-    plc4c_spi_write_unsigned_int(buf, 16, _value);
+  _res = plc4c_spi_write_unsigned_int(buf, 16, _message->ausbe);
+  if(_res != OK) {
+    return _res;
   }
 
   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 12b6aca..0c4a1f8 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_id.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_id.c
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_szl_id));
@@ -35,38 +36,51 @@ plc4c_return_code plc4c_s7_read_write_szl_id_parse(plc4c_spi_read_buffer* buf, p
   }
 
   // Enum field (typeClass)
-  plc4c_s7_read_write_szl_module_type_class typeClass = plc4c_spi_read_byte(buf, 4);
+  plc4c_s7_read_write_szl_module_type_class typeClass = NULL;
+  _res = plc4c_spi_read_byte(buf, 4, &typeClass);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->type_class = typeClass;
 
   // Simple Field (sublistExtract)
-  unsigned int sublistExtract = plc4c_spi_read_unsigned_byte(buf, 4);
+  unsigned int sublistExtract = 0;
+  _res = plc4c_spi_read_unsigned_byte(buf, 4, &sublistExtract);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->sublist_extract = sublistExtract;
 
   // Enum field (sublistList)
-  plc4c_s7_read_write_szl_sublist sublistList = plc4c_spi_read_byte(buf, 8);
+  plc4c_s7_read_write_szl_sublist sublistList = NULL;
+  _res = plc4c_spi_read_byte(buf, 8, &sublistList);
+  if(_res != OK) {
+    return _res;
+  }
   (*_message)->sublist_list = sublistList;
 
   return OK;
 }
 
 plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_id* _message) {
+  plc4c_return_code _res = OK;
 
   // Enum field (typeClass)
-  {
-    int _value = _message->type_class;
-    plc4c_spi_write_byte(buf, 4, _value);
+  _res = plc4c_spi_write_byte(buf, 4, _message->type_class);
+  if(_res != OK) {
+    return _res;
   }
 
   // Simple Field (sublistExtract)
-  {
-    unsigned int _value = _message->sublist_extract;
-    plc4c_spi_write_unsigned_byte(buf, 4, _value);
+  _res = plc4c_spi_write_unsigned_byte(buf, 4, _message->sublist_extract);
+  if(_res != OK) {
+    return _res;
   }
 
   // Enum field (sublistList)
-  {
-    int8_t _value = _message->sublist_list;
-    plc4c_spi_write_byte(buf, 8, _value);
+  _res = plc4c_spi_write_byte(buf, 8, _message->sublist_list);
+  if(_res != OK) {
+    return _res;
   }
 
   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 259c90f..b144b40 100644
--- a/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
@@ -27,6 +27,7 @@
 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_return_code _res = OK;
 
   // Allocate enough memory to contain this data structure.
   (*_message) = malloc(sizeof(plc4c_s7_read_write_tpkt_packet));
@@ -35,7 +36,11 @@ plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* b
   }
 
   // Const Field (protocolId)
-  uint8_t protocolId = plc4c_spi_read_unsigned_short(buf, 8);
+  uint8_t protocolId = 0;
+  _res = plc4c_spi_read_unsigned_short(buf, 8, &protocolId);
+  if(_res != OK) {
+    return _res;
+  }
   if(protocolId != S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID) {
     return PARSE_ERROR;
     // throw new ParseException("Expected constant value " + S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID + " but got " + protocolId);
@@ -43,18 +48,26 @@ plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* b
 
   // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
   {
-    uint8_t _reserved = plc4c_spi_read_unsigned_short(buf, 8);
+    uint8_t _reserved = 0;
+    _res = plc4c_spi_read_unsigned_short(buf, 8, _reserved);
+    if(_res != OK) {
+      return _res;
+    }
     if(_reserved != 0x00) {
       printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, _reserved);
     }
   }
 
   // Implicit Field (len) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  uint16_t len = plc4c_spi_read_unsigned_int(buf, 16);
+  uint16_t len = 0;
+  _res = plc4c_spi_read_unsigned_int(buf, 16, &len);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (payload)
   plc4c_s7_read_write_cotp_packet* payload;
-  plc4c_return_code _res = plc4c_s7_read_write_cotp_packet_parse(buf, (len) - (4), (void*) &payload);
+  _res = plc4c_s7_read_write_cotp_packet_parse(buf, (len) - (4), (void*) &payload);
   if(_res != OK) {
     return _res;
   }
@@ -64,23 +77,27 @@ plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* b
 }
 
 plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_tpkt_packet* _message) {
+  plc4c_return_code _res = OK;
 
   // Const Field (protocolId)
   plc4c_spi_write_unsigned_short(buf, 8, S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID);
 
   // Reserved Field
-  plc4c_spi_write_unsigned_short(buf, 8, 0x00);
+  _res = plc4c_spi_write_unsigned_short(buf, 8, 0x00);
+  if(_res != OK) {
+    return _res;
+  }
 
   // Implicit Field (len) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  plc4c_spi_write_unsigned_int(buf, 16, (plc4c_s7_read_write_cotp_packet_length_in_bytes(_message->payload)) + (4));
+  _res = plc4c_spi_write_unsigned_int(buf, 16, (plc4c_s7_read_write_cotp_packet_length_in_bytes(_message->payload)) + (4));
+  if(_res != OK) {
+    return _res;
+  }
 
   // Simple Field (payload)
-  {
-    plc4c_s7_read_write_cotp_packet* _value = _message->payload;
-    plc4c_return_code _res = plc4c_s7_read_write_cotp_packet_serialize(buf, _value);
-    if(_res != OK) {
-      return _res;
-    }
+  _res = plc4c_s7_read_write_cotp_packet_serialize(buf, "_message->payload");
+  if(_res != OK) {
+    return _res;
   }
 
   return OK;
diff --git a/sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h b/sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h
index 85c4133..a0e2a6f 100644
--- a/sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h
+++ b/sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h
@@ -47,45 +47,45 @@ bool plc4c_spi_read_has_more(plc4c_spi_read_buffer* buf, uint16_t num_bits);
 
 plc4c_return_code plc4c_spi_read_get_bytes(plc4c_spi_read_buffer* buf, uint16_t start_pos_in_bytes, uint16_t end_pos_in_bytes, uint8_t** dest);
 
-uint8_t plc4c_spi_read_peek_byte(plc4c_spi_read_buffer* buf, uint16_t offset_in_bytes);
+plc4c_return_code plc4c_spi_read_peek_byte(plc4c_spi_read_buffer* buf, uint16_t offset_in_bytes, uint8_t* value);
 
-bool plc4c_spi_read_bit(plc4c_spi_read_buffer* buf);
+plc4c_return_code plc4c_spi_read_bit(plc4c_spi_read_buffer* buf, bool* value);
 
 // Unsigned Integers ...
 
-uint8_t plc4c_spi_read_unsigned_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_unsigned_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint8_t* value);
 
-uint16_t plc4c_spi_read_unsigned_short(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_unsigned_short(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint16_t* value);
 
-uint32_t plc4c_spi_read_unsigned_int(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_unsigned_int(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint32_t* value);
 
-uint64_t plc4c_spi_read_unsigned_long(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_unsigned_long(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint64_t* value);
 
 // TODO: Not sure which type to use in this case ...
 //uint128_t plc4c_spi_read_unsigned_big_integer(plc4c_spi_read_buffer* buf, uint8_t num_bits);
 
 // Signed Integers ...
 
-int8_t plc4c_spi_read_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits, int8_t* value);
 
-int16_t plc4c_spi_read_short(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_short(plc4c_spi_read_buffer* buf, uint8_t num_bits, int16_t* value);
 
-int32_t plc4c_spi_read_int(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_int(plc4c_spi_read_buffer* buf, uint8_t num_bits, int32_t* value);
 
-int64_t plc4c_spi_read_long(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_long(plc4c_spi_read_buffer* buf, uint8_t num_bits, int64_t* value);
 
 // TODO: Not sure which type to use in this case ...
 //int128_t plc4c_spi_read_big_integer(plc4c_spi_read_buffer* buf, uint8_t num_bits);
 
 // Floating Point Numbers ...
 
-float plc4c_spi_read_float(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_float(plc4c_spi_read_buffer* buf, uint8_t num_bits, float* value);
 
-double plc4c_spi_read_double(plc4c_spi_read_buffer* buf, uint8_t num_bits);
+plc4c_return_code plc4c_spi_read_double(plc4c_spi_read_buffer* buf, uint8_t num_bits, double* value);
 
 // TODO: Not sure which type to use in this case ...
 //doubledouble plc4c_spi_read_big_decimal(plc4c_spi_read_buffer* buf, uint8_t num_bits);
 
-char* plc4c_spi_read_string(plc4c_spi_read_buffer* buf, uint8_t num_bits, char* encoding);
+plc4c_return_code plc4c_spi_read_string(plc4c_spi_read_buffer* buf, uint8_t num_bits, char* encoding, char** value);
 
 #endif  // PLC4C_READ_BUFFER_H_
\ No newline at end of file
diff --git a/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h b/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
index 5dcf7e4..a326386 100644
--- a/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
+++ b/sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h
@@ -32,47 +32,47 @@ uint8_t* plc4c_spi_write_get_data(plc4c_spi_write_buffer* buf);
 
 uint32_t plc4c_spi_write_get_pos(plc4c_spi_write_buffer* buf);
 
-uint8_t* plc4c_spi_write_get_bytes(plc4c_spi_write_buffer* buf, uint32_t start_pos_in_bytes, uint32_t end_pos_in_bytes);
+plc4c_return_code plc4c_spi_write_get_bytes(plc4c_spi_write_buffer* buf, uint32_t start_pos_in_bytes, uint32_t end_pos_in_bytes, uint8_t** dest);
 
-uint8_t plc4c_spi_write_peek_byte(plc4c_spi_write_buffer* buf, uint32_t offset_in_bytes);
+plc4c_return_code plc4c_spi_write_peek_byte(plc4c_spi_write_buffer* buf, uint32_t offset_in_bytes, uint8_t* value);
 
-void plc4c_spi_write_bit(plc4c_spi_write_buffer* buf, bool value);
+plc4c_return_code plc4c_spi_write_bit(plc4c_spi_write_buffer* buf, bool value);
 
 // Unsigned Integers ...
 
-void plc4c_spi_write_unsigned_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint8_t value);
+plc4c_return_code plc4c_spi_write_unsigned_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint8_t value);
 
-void plc4c_spi_write_unsigned_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint16_t value);
+plc4c_return_code plc4c_spi_write_unsigned_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint16_t value);
 
-void plc4c_spi_write_unsigned_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint32_t value);
+plc4c_return_code plc4c_spi_write_unsigned_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint32_t value);
 
-void plc4c_spi_write_unsigned_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint64_t value);
+plc4c_return_code plc4c_spi_write_unsigned_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint64_t value);
 
 // TODO: Not sure which type to use in this case ...
 //void plc4c_spi_write_unsigned_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint128_t value);
 
 // Signed Integers ...
 
-void plc4c_spi_write_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, int8_t value);
+plc4c_return_code plc4c_spi_write_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, int8_t value);
 
-void plc4c_spi_write_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, int16_t value);
+plc4c_return_code plc4c_spi_write_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, int16_t value);
 
-void plc4c_spi_write_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, int32_t value);
+plc4c_return_code plc4c_spi_write_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, int32_t value);
 
-void plc4c_spi_write_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, int64_t value);
+plc4c_return_code plc4c_spi_write_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, int64_t value);
 
 // TODO: Not sure which type to use in this case ...
-//void plc4c_spi_write_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, int128_t);
+//plc4c_return_code plc4c_spi_write_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, int128_t);
 
 // Floating Point Numbers ...
 
-void plc4c_spi_write_float(plc4c_spi_write_buffer* buf, uint8_t num_bits, float value);
+plc4c_return_code plc4c_spi_write_float(plc4c_spi_write_buffer* buf, uint8_t num_bits, float value);
 
-void plc4c_spi_write_double(plc4c_spi_write_buffer* buf, uint8_t num_bits, double value);
+plc4c_return_code plc4c_spi_write_double(plc4c_spi_write_buffer* buf, uint8_t num_bits, double value);
 
 // TODO: Not sure which type to use in this case ...
-//void plc4c_spi_write_big_decimal(plc4c_spi_write_buffer* buf, uint8_t num_bits, doubledouble value);
+//plc4c_return_code plc4c_spi_write_big_decimal(plc4c_spi_write_buffer* buf, uint8_t num_bits, doubledouble value);
 
-void plc4c_spi_write_string(plc4c_spi_write_buffer* buf, uint8_t num_bits, char* encoding, char* value);
+plc4c_return_code plc4c_spi_write_string(plc4c_spi_write_buffer* buf, uint8_t num_bits, char* encoding, char* value);
 
 #endif  // PLC4C_WRITE_BUFFER_H_
\ No newline at end of file
diff --git a/sandbox/plc4c/spi/src/read_buffer.c b/sandbox/plc4c/spi/src/read_buffer.c
index 09732b6..a7f7a7b 100644
--- a/sandbox/plc4c/spi/src/read_buffer.c
+++ b/sandbox/plc4c/spi/src/read_buffer.c
@@ -20,6 +20,8 @@
 #include <plc4c/spi/read_buffer.h>
 #include <string.h>
 
+uint8_t bit_mask[9] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
+
 plc4c_return_code plc4c_spi_read_buffer_create(uint8_t* data, uint16_t length, plc4c_spi_read_buffer** buffer) {
   *buffer = malloc(sizeof(plc4c_spi_read_buffer));
   if(*buffer == NULL) {
@@ -76,23 +78,24 @@ plc4c_return_code plc4c_spi_read_get_bytes(plc4c_spi_read_buffer* buf, uint16_t
   return OK;
 }
 
-uint8_t plc4c_spi_read_peek_byte(plc4c_spi_read_buffer* buf, uint16_t offset_in_bytes) {
+plc4c_return_code plc4c_spi_read_peek_byte(plc4c_spi_read_buffer* buf, uint16_t offset_in_bytes, uint8_t* value) {
   if(buf == NULL) {
-    return 0;
+    return NULL_VALUE;
   }
   if(buf->curPosByte + offset_in_bytes > buf->length) {
-    return 0;
+    return OUT_OF_RANGE;
   }
-  return (*buf->data) + (buf->curPosByte + offset_in_bytes);
+  *value = (*buf->data) + (buf->curPosByte + offset_in_bytes);
+  return OK;
 }
 
-bool plc4c_spi_read_bit(plc4c_spi_read_buffer* buf) {
+plc4c_return_code plc4c_spi_read_bit(plc4c_spi_read_buffer* buf, bool* value) {
   uint8_t cur_byte = (*buf->data) + buf->curPosByte;
   // We have to invert the position as bit 0 will be the first
   // (most significant bit).
   unsigned int bit_pos = ((unsigned int) 7) - buf->curPosBit;
   // Get the bit's value.
-  bool value = ((cur_byte >> bit_pos) & 1) != 0;
+  *value = ((cur_byte >> bit_pos) & 1) != 0;
   // If this was the last bit in this byte, move on to the next one.
   if(buf->curPosBit == 7) {
     buf->curPosByte++;
@@ -100,63 +103,89 @@ bool plc4c_spi_read_bit(plc4c_spi_read_buffer* buf) {
   } else {
     buf->curPosBit++;
   }
-  return value;
+  return OK;
 }
 
 // Unsigned Integers ...
 
-uint8_t plc4c_spi_read_unsigned_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_unsigned_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint8_t* value) {
+  // If the bit-offset is currently 0, then we simply read a byte ...
+  if(buf->curPosBit == 0) {
+    uint8_t cur_byte = (*buf->data) + buf->curPosByte;
+    buf->curPosByte++;
+    return cur_byte;
+  } else {
+    uint8_t cur_byte = (*buf->data) + buf->curPosByte;
+    cur_byte = cur_byte << buf->curPosBit;
+    uint8_t next_byte = (*buf->data) + (buf->curPosByte + 1);
+    next_byte = next_byte >> buf->curPosBit;
+    uint8_t virtual_byte = cur_byte | next_byte;
+    buf->curPosByte++;
+    return virtual_byte;
+  }
 }
 
-uint16_t plc4c_spi_read_unsigned_short(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_unsigned_short(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint16_t* value) {
+  // If the bit-offset is currently 0, then we simply read a byte ...
+  if(buf->curPosBit == 0) {
+    uint16_t cur_short = (*buf->data) + buf->curPosByte;
+    buf->curPosByte += 2;
+    return cur_short;
+  } else {
+    uint8_t cur_short = (*buf->data) + buf->curPosByte;
+    cur_short = cur_short << buf->curPosBit;
+    uint8_t next_byte = (*buf->data) + (buf->curPosByte + 1);
+    next_byte = next_byte >> buf->curPosBit;
+    uint8_t virtual_byte = cur_short | next_byte;
+    buf->curPosByte++;
+    return virtual_byte;
+  }
 }
 
-uint32_t plc4c_spi_read_unsigned_int(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_unsigned_int(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint32_t* value) {
+  return OK;
 }
 
-uint64_t plc4c_spi_read_unsigned_long(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_unsigned_long(plc4c_spi_read_buffer* buf, uint8_t num_bits, uint64_t* value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
 /*uint128_t plc4c_spi_read_unsigned_big_integer(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+  return OK;
 }*/
 
 // Signed Integers ...
 
-int8_t plc4c_spi_read_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_byte(plc4c_spi_read_buffer* buf, uint8_t num_bits, int8_t* value) {
+  return OK;
 }
 
-int16_t plc4c_spi_read_short(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_short(plc4c_spi_read_buffer* buf, uint8_t num_bits, int16_t* value) {
+  return OK;
 }
 
-int32_t plc4c_spi_read_int(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_int(plc4c_spi_read_buffer* buf, uint8_t num_bits, int32_t* value) {
+  return OK;
 }
 
-int64_t plc4c_spi_read_long(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_long(plc4c_spi_read_buffer* buf, uint8_t num_bits, int64_t* value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
 /*int128_t plc4c_spi_read_big_integer(plc4c_spi_read_buffer* buf, uint8_t num_bits);
- * return 0;
+ * return OK;
  * }*/
 
 // Floating Point Numbers ...
 
-float plc4c_spi_read_float(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_float(plc4c_spi_read_buffer* buf, uint8_t num_bits, float* value) {
+  return OK;
 }
 
-double plc4c_spi_read_double(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
-  return 0;
+plc4c_return_code plc4c_spi_read_double(plc4c_spi_read_buffer* buf, uint8_t num_bits, double* value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
@@ -164,6 +193,6 @@ double plc4c_spi_read_double(plc4c_spi_read_buffer* buf, uint8_t num_bits) {
  * return 0;
  * } */
 
-char* plc4c_spi_read_string(plc4c_spi_read_buffer* buf, uint8_t num_bits, char* encoding) {
-  return NULL;
+plc4c_return_code plc4c_spi_read_string(plc4c_spi_read_buffer* buf, uint8_t num_bits, char* encoding, char** value) {
+  return OK;
 }
diff --git a/sandbox/plc4c/spi/src/write_buffer.c b/sandbox/plc4c/spi/src/write_buffer.c
index f06b321..7fbbe4f 100644
--- a/sandbox/plc4c/spi/src/write_buffer.c
+++ b/sandbox/plc4c/spi/src/write_buffer.c
@@ -27,76 +27,76 @@ uint32_t plc4c_spi_write_get_pos(plc4c_spi_write_buffer* buf) {
   return 0;
 }
 
-uint8_t* plc4c_spi_write_get_bytes(plc4c_spi_write_buffer* buf, uint32_t start_pos_in_bytes, uint32_t end_pos_in_bytes) {
-  return NULL;
+plc4c_return_code plc4c_spi_write_get_bytes(plc4c_spi_write_buffer* buf, uint32_t start_pos_in_bytes, uint32_t end_pos_in_bytes, uint8_t** dest) {
+  return OK;
 }
 
-uint8_t plc4c_spi_write_peek_byte(plc4c_spi_write_buffer* buf, uint32_t offset_in_bytes) {
-  return 0;
+plc4c_return_code plc4c_spi_write_peek_byte(plc4c_spi_write_buffer* buf, uint32_t offset_in_bytes, uint8_t* value) {
+  return OK;
 }
 
-void plc4c_spi_write_bit(plc4c_spi_write_buffer* buf, bool value) {
-
+plc4c_return_code plc4c_spi_write_bit(plc4c_spi_write_buffer* buf, bool value) {
+  return OK;
 }
 
 // Unsigned Integers ...
 
-void plc4c_spi_write_unsigned_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint8_t value) {
-
+plc4c_return_code plc4c_spi_write_unsigned_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint8_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_unsigned_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint16_t value) {
-
+plc4c_return_code plc4c_spi_write_unsigned_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint16_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_unsigned_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint32_t value) {
-
+plc4c_return_code plc4c_spi_write_unsigned_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint32_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_unsigned_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint64_t value) {
-
+plc4c_return_code plc4c_spi_write_unsigned_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint64_t value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
-/*void plc4c_spi_write_unsigned_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint128_t value) {
+/*plc4c_return_code plc4c_spi_write_unsigned_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, uint128_t value) {
  * } */
 
 // Signed Integers ...
 
-void plc4c_spi_write_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, int8_t value) {
-
+plc4c_return_code plc4c_spi_write_byte(plc4c_spi_write_buffer* buf, uint8_t num_bits, int8_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, int16_t value) {
-
+plc4c_return_code plc4c_spi_write_short(plc4c_spi_write_buffer* buf, uint8_t num_bits, int16_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, int32_t value) {
-
+plc4c_return_code plc4c_spi_write_int(plc4c_spi_write_buffer* buf, uint8_t num_bits, int32_t value) {
+  return OK;
 }
 
-void plc4c_spi_write_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, int64_t value) {
-
+plc4c_return_code plc4c_spi_write_long(plc4c_spi_write_buffer* buf, uint8_t num_bits, int64_t value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
-/*void plc4c_spi_write_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, int128_t) {
+/*plc4c_return_code plc4c_spi_write_big_integer(plc4c_spi_write_buffer* buf, uint8_t num_bits, int128_t) {
  * } */
 
 // Floating Point Numbers ...
 
-void plc4c_spi_write_float(plc4c_spi_write_buffer* buf, uint8_t num_bits, float value) {
-
+plc4c_return_code plc4c_spi_write_float(plc4c_spi_write_buffer* buf, uint8_t num_bits, float value) {
+  return OK;
 }
 
-void plc4c_spi_write_double(plc4c_spi_write_buffer* buf, uint8_t num_bits, double value) {
-
+plc4c_return_code plc4c_spi_write_double(plc4c_spi_write_buffer* buf, uint8_t num_bits, double value) {
+  return OK;
 }
 
 // TODO: Not sure which type to use in this case ...
 /*void plc4c_spi_write_big_decimal(plc4c_spi_write_buffer* buf, uint8_t num_bits, doubledouble value) {
  * } */
 
-void plc4c_spi_write_string(plc4c_spi_write_buffer* buf, uint8_t num_bits, char* encoding, char* value) {
+plc4c_return_code plc4c_spi_write_string(plc4c_spi_write_buffer* buf, uint8_t num_bits, char* encoding, char* value) {
 
 }
diff --git a/sandbox/plc4c/spi/test/read_buffer_test.c b/sandbox/plc4c/spi/test/read_buffer_test.c
index a991f08..e09c148 100644
--- a/sandbox/plc4c/spi/test/read_buffer_test.c
+++ b/sandbox/plc4c/spi/test/read_buffer_test.c
@@ -16,19 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+#include "plc4c/spi/read_buffer.h"
+
 #include <stdlib.h>
 #include <unity.h>
-#include "plc4c/spi/read_buffer.h"
 
 void test_plc4c_spi_read_buffer_create_args(
-    uint8_t *data, uint16_t length, plc4c_return_code expected_return_code) {
-
-  printf("Running read_buffer create test with %d, expecting return code %d", length, expected_return_code);
+    uint8_t* data, uint16_t length, plc4c_return_code expected_return_code) {
+  printf("Running read_buffer create test with %d, expecting return code %d",
+         length, expected_return_code);
 
   // Create a new read_buffer instance
   plc4c_spi_read_buffer* read_buffer;
 
-  plc4c_return_code return_code = plc4c_spi_read_buffer_create(data, length, &read_buffer);
+  plc4c_return_code return_code =
+      plc4c_spi_read_buffer_create(data, length, &read_buffer);
 
   TEST_ASSERT_EQUAL_INT(expected_return_code, return_code);
   if (expected_return_code != OK) {
@@ -42,20 +44,16 @@ void test_plc4c_spi_read_buffer_create_args(
 
 void test_plc4c_spi_read_buffer_create(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4,5,6,7,8};
+  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8};
 
   // Run test
   test_plc4c_spi_read_buffer_create_args(&data[0], 8, OK);
 }
 
-
-
-
-
 void test_plc4c_spi_read_buffer_get_total_bytes_args(
     plc4c_spi_read_buffer* read_buffer, uint16_t expected_length) {
-
-  printf("Running read_buffer get_total_bytes test. Expecting %d length", expected_length);
+  printf("Running read_buffer get_total_bytes test. Expecting %d length",
+         expected_length);
 
   uint32_t length = plc4c_spi_read_get_total_bytes(read_buffer);
 
@@ -65,7 +63,7 @@ void test_plc4c_spi_read_buffer_get_total_bytes_args(
 
 void test_plc4c_spi_read_buffer_get_total_bytes(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4,5,6,7,8};
+  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8};
   plc4c_spi_read_buffer* read_buffer;
   plc4c_spi_read_buffer_create(data, 8, &read_buffer);
 
@@ -73,13 +71,12 @@ void test_plc4c_spi_read_buffer_get_total_bytes(void) {
   test_plc4c_spi_read_buffer_get_total_bytes_args(read_buffer, 8);
 }
 
-
-
-
 void test_plc4c_spi_read_buffer_has_more_args(
-    plc4c_spi_read_buffer* read_buffer, uint16_t num_bytes, bool expected_result) {
-
-  printf("Running read_buffer has_more test. Checking if %d bytes are available", num_bytes);
+    plc4c_spi_read_buffer* read_buffer, uint16_t num_bytes,
+    bool expected_result) {
+  printf(
+      "Running read_buffer has_more test. Checking if %d bytes are available",
+      num_bytes);
 
   bool result = plc4c_spi_read_has_more(read_buffer, num_bytes);
 
@@ -89,7 +86,7 @@ void test_plc4c_spi_read_buffer_has_more_args(
 
 void test_plc4c_spi_read_buffer_has_more(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4};
+  uint8_t data[] = {1, 2, 3, 4};
   plc4c_spi_read_buffer* read_buffer;
   plc4c_spi_read_buffer_create(data, 4, &read_buffer);
 
@@ -106,23 +103,25 @@ void test_plc4c_spi_read_buffer_has_more(void) {
   test_plc4c_spi_read_buffer_has_more_args(read_buffer, 50, false);
 }
 
-
-
-
 void test_plc4c_spi_read_buffer_get_bytes_args(
-    plc4c_spi_read_buffer* read_buffer, uint16_t start_byte, uint16_t end_byte, plc4c_return_code expected_return_code, uint8_t* expected_bytes, uint8_t expected_bytes_length) {
-
-  printf("Running read_buffer get_bytes test. Checking if reading from %d to %d bytes gives the correct response", start_byte, end_byte);
+    plc4c_spi_read_buffer* read_buffer, uint16_t start_byte, uint16_t end_byte,
+    plc4c_return_code expected_return_code, const uint8_t* expected_bytes,
+    uint8_t expected_bytes_length) {
+  printf(
+      "Running read_buffer get_bytes test. Checking if reading from %d to %d "
+      "bytes gives the correct response",
+      start_byte, end_byte);
 
   uint8_t* read_bytes = NULL;
-  plc4c_return_code result = plc4c_spi_read_get_bytes(read_buffer, start_byte, end_byte, &read_bytes);
+  plc4c_return_code result =
+      plc4c_spi_read_get_bytes(read_buffer, start_byte, end_byte, &read_bytes);
 
   TEST_ASSERT_EQUAL_INT(expected_return_code, result);
-  if(expected_return_code != OK) {
+  if (expected_return_code != OK) {
     TEST_ASSERT_NULL(read_bytes);
   } else {
     TEST_ASSERT_NOT_NULL(read_bytes);
-    for(int i = 0; i < expected_bytes_length; i++) {
+    for (int i = 0; i < expected_bytes_length; i++) {
       uint8_t cur_byte = *read_buffer->data + start_byte + i;
       uint8_t expected_byte = *expected_bytes + i;
       TEST_ASSERT_EQUAL_INT(expected_byte, cur_byte);
@@ -134,39 +133,50 @@ void test_plc4c_spi_read_buffer_get_bytes_args(
 
 void test_plc4c_spi_read_buffer_get_bytes(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4,5,6,7};
+  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7};
   plc4c_spi_read_buffer* read_buffer;
   plc4c_spi_read_buffer_create(data, 8, &read_buffer);
 
   // Run test
   uint8_t result_data1[] = {1};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 0, 0, OK, result_data1, 1);
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 0, 0, OK, result_data1,
+                                            1);
   uint8_t result_data2[] = {2};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 1, 1, OK, result_data2, 1);
-  uint8_t result_data3[] = {2,3};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 1, 2, OK, result_data3, 2);
-  uint8_t result_data4[] = {4,5,6};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 3, 5, OK, result_data4, 3);
-  uint8_t result_data5[] = {4,5,6,7};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 3, 6, OK, result_data5, 4);
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 1, 1, OK, result_data2,
+                                            1);
+  uint8_t result_data3[] = {2, 3};
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 1, 2, OK, result_data3,
+                                            2);
+  uint8_t result_data4[] = {4, 5, 6};
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 3, 5, OK, result_data4,
+                                            3);
+  uint8_t result_data5[] = {4, 5, 6, 7};
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 3, 6, OK, result_data5,
+                                            4);
 
   // These should fail for various reasons ...
   uint8_t result_data6[] = {};
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 0, 10, OUT_OF_RANGE, result_data6, 0);
-  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 6, 3, INVALID_ARGUMENT, result_data6, 0);
-  test_plc4c_spi_read_buffer_get_bytes_args(NULL, 0, 0, NULL_VALUE, result_data6, 0);
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 0, 10, OUT_OF_RANGE,
+                                            result_data6, 0);
+  test_plc4c_spi_read_buffer_get_bytes_args(read_buffer, 6, 3, INVALID_ARGUMENT,
+                                            result_data6, 0);
+  test_plc4c_spi_read_buffer_get_bytes_args(NULL, 0, 0, NULL_VALUE,
+                                            result_data6, 0);
 }
 
-
-
-
 void test_plc4c_spi_read_buffer_peek_byte_args(
-    plc4c_spi_read_buffer* read_buffer, uint16_t peek_byte, uint8_t expected_value) {
-
-  printf("Running read_buffer peek_byte test. Checking if peeking byte number %d gives the correct response", peek_byte);
+    plc4c_spi_read_buffer* read_buffer, uint16_t peek_byte,
+    plc4c_return_code expected_return_code, uint8_t expected_value) {
+  printf(
+      "Running read_buffer peek_byte test. Checking if peeking byte number %d "
+      "gives the correct response",
+      peek_byte);
 
-  uint8_t peeked_byte = plc4c_spi_read_peek_byte(read_buffer, peek_byte);
+  uint8_t peeked_byte = 0;
+  plc4c_return_code result =
+      plc4c_spi_read_peek_byte(read_buffer, peek_byte, &peeked_byte);
 
+  TEST_ASSERT_EQUAL_INT(expected_return_code, result);
   TEST_ASSERT_EQUAL_INT(expected_value, peeked_byte);
 
   printf(" -> OK\n");
@@ -174,33 +184,33 @@ void test_plc4c_spi_read_buffer_peek_byte_args(
 
 void test_plc4c_spi_read_buffer_peek_byte(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4,5,6,7};
+  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7};
   plc4c_spi_read_buffer* read_buffer;
   plc4c_spi_read_buffer_create(data, 8, &read_buffer);
 
   // Run test
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 0, 1);
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 4, 5);
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 4, 5);
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 6, 7);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 0, OK, 1);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 4, OK, 5);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 4, OK, 5);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 6, OK, 7);
   // Bump the cur buffer position.
   read_buffer->curPosByte = 2;
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 2, 5);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 2, OK, 5);
 
   // These should fail
-  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 8, 0);
+  test_plc4c_spi_read_buffer_peek_byte_args(read_buffer, 8, OUT_OF_RANGE, 0);
 }
 
-
-
-
 void test_plc4c_spi_read_buffer_read_bit_args(
     plc4c_spi_read_buffer* read_buffer, bool expected_value) {
+  printf(
+      "Running read_buffer peek_byte test. Checking if reading a bit gives the "
+      "correct response");
 
-  printf("Running read_buffer peek_byte test. Checking if reading a bit gives the correct response");
-
-  bool value = plc4c_spi_read_bit(read_buffer);
+  bool value = false;
+  plc4c_return_code result = plc4c_spi_read_bit(read_buffer, &value);
 
+  TEST_ASSERT_EQUAL_INT(OK, result);
   TEST_ASSERT_EQUAL_INT(expected_value, value);
 
   printf(" -> OK\n");
@@ -208,7 +218,7 @@ void test_plc4c_spi_read_buffer_read_bit_args(
 
 void test_plc4c_spi_read_buffer_read_bit(void) {
   // Prepare input data
-  uint8_t data[] = {1,2,3,4,5,6,7};
+  uint8_t data[] = {1, 2, 3, 4, 5, 6, 7};
   plc4c_spi_read_buffer* read_buffer;
   plc4c_spi_read_buffer_create(data, 8, &read_buffer);
 
@@ -239,10 +249,6 @@ void test_plc4c_spi_read_buffer_read_bit(void) {
   test_plc4c_spi_read_buffer_read_bit_args(read_buffer, true);
 }
 
-
-
-
-
 void test_plc4c_spi_read_buffer(void) {
   test_plc4c_spi_read_buffer_create();
   test_plc4c_spi_read_buffer_get_total_bytes();