You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/11/01 12:13:19 UTC

[plc4x] 02/02: fix(plc4go/codgen): progress on golang codegen

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

sruehl pushed a commit to branch feature/mspec-ng
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 0c47784e88835c68a754cd2814248f4ce90bdd3e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Nov 1 13:10:06 2021 +0100

    fix(plc4go/codgen): progress on golang codegen
---
 .../language/go/GoLanguageTemplateHelper.java      | 295 +++++++++++----------
 .../resources/templates/go/model-template.go.ftlh  |  39 ++-
 .../language/java/JavaLanguageTemplateHelper.java  | 230 ++++++++--------
 .../resources/templates/java/io-template.java.ftlh |  21 +-
 plc4go/internal/plc4go/ads/Reader.go               |   6 +-
 plc4go/internal/plc4go/ads/Writer.go               |   2 +-
 .../model/AdsAddDeviceNotificationRequest.go       |   2 +-
 .../model/AdsAddDeviceNotificationResponse.go      |   2 +-
 .../internal/plc4go/ads/readwrite/model/AdsData.go |  40 +--
 .../model/AdsDeleteDeviceNotificationRequest.go    |   2 +-
 .../model/AdsDeleteDeviceNotificationResponse.go   |   2 +-
 .../model/AdsDeviceNotificationRequest.go          |   2 +-
 .../model/AdsDeviceNotificationResponse.go         |   2 +-
 .../ads/readwrite/model/AdsInvalidRequest.go       |   2 +-
 .../ads/readwrite/model/AdsInvalidResponse.go      |   2 +-
 .../ads/readwrite/model/AdsMultiRequestItem.go     |   6 +-
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |   2 +-
 .../model/AdsMultiRequestItemReadWrite.go          |   2 +-
 .../readwrite/model/AdsMultiRequestItemWrite.go    |   2 +-
 .../ads/readwrite/model/AdsNotificationSample.go   |   4 +-
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |   2 +-
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |   6 +-
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |   2 +-
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |   6 +-
 .../ads/readwrite/model/AdsReadStateRequest.go     |   2 +-
 .../ads/readwrite/model/AdsReadStateResponse.go    |   2 +-
 .../ads/readwrite/model/AdsReadWriteRequest.go     |   6 +-
 .../ads/readwrite/model/AdsReadWriteResponse.go    |   6 +-
 .../ads/readwrite/model/AdsWriteControlRequest.go  |   6 +-
 .../ads/readwrite/model/AdsWriteControlResponse.go |   2 +-
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |   6 +-
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |  12 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |   2 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |   2 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |   2 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |   2 +-
 .../bacnetip/readwrite/model/BACnetComplexTag.go   |  26 +-
 .../readwrite/model/BACnetComplexTagBitString.go   |   2 +-
 .../readwrite/model/BACnetComplexTagBoolean.go     |   2 +-
 .../model/BACnetComplexTagCharacterString.go       |   2 +-
 .../readwrite/model/BACnetComplexTagDate.go        |   2 +-
 .../readwrite/model/BACnetComplexTagDouble.go      |   2 +-
 .../readwrite/model/BACnetComplexTagEnumerated.go  |   2 +-
 .../readwrite/model/BACnetComplexTagNull.go        |   2 +-
 .../model/BACnetComplexTagObjectIdentifier.go      |   2 +-
 .../readwrite/model/BACnetComplexTagOctetString.go |   2 +-
 .../readwrite/model/BACnetComplexTagReal.go        |   2 +-
 .../model/BACnetComplexTagSignedInteger.go         |   2 +-
 .../readwrite/model/BACnetComplexTagTime.go        |   2 +-
 .../model/BACnetComplexTagUnsignedInteger.go       |   2 +-
 .../model/BACnetConfirmedServiceRequest.go         |  58 ++--
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |   2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |   2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |   2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |   2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |   2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |   2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |   2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |   2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |   2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |   2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |   2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |   2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |   2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |   2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |   2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |   2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |   2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |   2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |   2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |   2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |   2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |   2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |   2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |   2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |   2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |   2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |  22 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |   2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |   2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |   2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |   2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |   2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |   2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |   2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |   2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |   2 +-
 plc4go/internal/plc4go/eip/Reader.go               |  12 +-
 plc4go/internal/plc4go/eip/Writer.go               |   6 +-
 .../plc4go/eip/readwrite/model/CipReadRequest.go   |   6 +-
 .../plc4go/eip/readwrite/model/CipReadResponse.go  |   4 +-
 .../plc4go/eip/readwrite/model/CipService.go       |   8 +-
 .../eip/readwrite/model/CipUnconnectedRequest.go   |   2 +-
 .../plc4go/eip/readwrite/model/CipWriteRequest.go  |  10 +-
 .../plc4go/eip/readwrite/model/CipWriteResponse.go |   2 +-
 .../eip/readwrite/model/MultipleServiceResponse.go |   4 +-
 .../firmata/readwrite/model/FirmataCommand.go      |   8 +-
 .../model/FirmataCommandProtocolVersion.go         |   2 +-
 .../model/FirmataCommandSetDigitalPinValue.go      |   2 +-
 .../readwrite/model/FirmataCommandSetPinMode.go    |   2 +-
 .../readwrite/model/FirmataCommandSystemReset.go   |   2 +-
 .../firmata/readwrite/model/FirmataMessage.go      |   8 +-
 .../readwrite/model/FirmataMessageAnalogIO.go      |   2 +-
 .../readwrite/model/FirmataMessageDigitalIO.go     |   2 +-
 .../model/FirmataMessageSubscribeAnalogPinValue.go |   2 +-
 .../FirmataMessageSubscribeDigitalPinValue.go      |   2 +-
 .../firmata/readwrite/model/FirmataStaticHelper.go |   6 +-
 .../plc4go/firmata/readwrite/model/SysexCommand.go |  30 +--
 .../model/SysexCommandAnalogMappingQueryRequest.go |   2 +-
 .../SysexCommandAnalogMappingQueryResponse.go      |   2 +-
 .../model/SysexCommandAnalogMappingResponse.go     |   2 +-
 .../readwrite/model/SysexCommandCapabilityQuery.go |   2 +-
 .../model/SysexCommandCapabilityResponse.go        |   2 +-
 .../readwrite/model/SysexCommandExendedId.go       |   2 +-
 .../readwrite/model/SysexCommandExtendedAnalog.go  |   2 +-
 .../readwrite/model/SysexCommandPinStateQuery.go   |   2 +-
 .../model/SysexCommandPinStateResponse.go          |   2 +-
 .../model/SysexCommandReportFirmwareRequest.go     |   2 +-
 .../model/SysexCommandReportFirmwareResponse.go    |   2 +-
 .../model/SysexCommandSamplingInterval.go          |   2 +-
 .../readwrite/model/SysexCommandStringData.go      |   2 +-
 .../model/SysexCommandSysexNonRealtime.go          |   2 +-
 .../readwrite/model/SysexCommandSysexRealtime.go   |   2 +-
 .../plc4go/knxnetip/readwrite/model/Apdu.go        |   2 +-
 .../readwrite/model/ApduControlContainer.go        |   2 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |  24 +-
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |   2 +-
 .../readwrite/model/ApduDataAdcResponse.go         |   2 +-
 .../model/ApduDataDeviceDescriptorRead.go          |   2 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |   4 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |  78 +++---
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |   6 +-
 .../model/ApduDataExtAuthorizeResponse.go          |   2 +-
 .../model/ApduDataExtDomainAddressRead.go          |   2 +-
 .../model/ApduDataExtDomainAddressResponse.go      |   2 +-
 .../model/ApduDataExtDomainAddressSelectiveRead.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberRead.go    |   2 +-
 ...ApduDataExtDomainAddressSerialNumberResponse.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |   2 +-
 .../model/ApduDataExtDomainAddressWrite.go         |   2 +-
 .../model/ApduDataExtFileStreamInfoReport.go       |   2 +-
 .../ApduDataExtGroupPropertyValueInfoReport.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueRead.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueResponse.go |   2 +-
 .../model/ApduDataExtGroupPropertyValueWrite.go    |   2 +-
 ...ApduDataExtIndividualAddressSerialNumberRead.go |   2 +-
 ...DataExtIndividualAddressSerialNumberResponse.go |   2 +-
 ...pduDataExtIndividualAddressSerialNumberWrite.go |   2 +-
 .../readwrite/model/ApduDataExtKeyResponse.go      |   2 +-
 .../readwrite/model/ApduDataExtKeyWrite.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkRead.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkResponse.go     |   2 +-
 .../readwrite/model/ApduDataExtLinkWrite.go        |   2 +-
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |   2 +-
 .../model/ApduDataExtNetworkParameterRead.go       |   2 +-
 .../model/ApduDataExtNetworkParameterResponse.go   |   2 +-
 .../model/ApduDataExtNetworkParameterWrite.go      |   2 +-
 .../model/ApduDataExtOpenRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtPropertyDescriptionRead.go    |   2 +-
 .../ApduDataExtPropertyDescriptionResponse.go      |   2 +-
 .../model/ApduDataExtPropertyValueRead.go          |   2 +-
 .../model/ApduDataExtPropertyValueResponse.go      |   4 +-
 .../model/ApduDataExtPropertyValueWrite.go         |   4 +-
 .../model/ApduDataExtReadRouterMemoryRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterMemoryResponse.go   |   2 +-
 .../model/ApduDataExtReadRouterStatusRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterStatusResponse.go   |   2 +-
 .../model/ApduDataExtReadRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtReadRoutingTableResponse.go   |   2 +-
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |   2 +-
 .../model/ApduDataExtWriteRouterStatusRequest.go   |   2 +-
 .../model/ApduDataExtWriteRoutingTableRequest.go   |   2 +-
 .../readwrite/model/ApduDataGroupValueRead.go      |   2 +-
 .../readwrite/model/ApduDataGroupValueResponse.go  |   4 +-
 .../readwrite/model/ApduDataGroupValueWrite.go     |   4 +-
 .../model/ApduDataIndividualAddressRead.go         |   2 +-
 .../model/ApduDataIndividualAddressResponse.go     |   2 +-
 .../model/ApduDataIndividualAddressWrite.go        |   2 +-
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |   2 +-
 .../readwrite/model/ApduDataMemoryResponse.go      |   6 +-
 .../readwrite/model/ApduDataMemoryWrite.go         |   2 +-
 .../knxnetip/readwrite/model/ApduDataRestart.go    |   2 +-
 .../readwrite/model/ApduDataUserMessage.go         |   2 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  46 ++--
 .../knxnetip/readwrite/model/ComObjectTable.go     |   6 +-
 .../model/ComObjectTableRealisationType1.go        |   2 +-
 .../model/ComObjectTableRealisationType2.go        |   2 +-
 .../model/ComObjectTableRealisationType6.go        |   2 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |   8 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |   4 +-
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |   6 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/KnxProperty.go |  48 ++--
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |   2 +-
 .../knxnetip/readwrite/model/LDataExtended.go      |   4 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |   4 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |   2 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |   4 +-
 .../readwrite/model/MFuncPropCommandReq.go         |   2 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |   2 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |   2 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |   2 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |   2 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |   2 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |   4 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |  78 +++---
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |   2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |   2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |   2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |   2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |   2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |   2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |   6 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |   2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |   6 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |   2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |   2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |   2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |   6 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |   2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |   2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |   2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |   2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |   2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |   2 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |   4 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |   2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |   6 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |   2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |   6 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |   6 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |   6 +-
 .../model/ModbusPDUReportServerIdRequest.go        |   2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |   6 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |   2 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |   4 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |   2 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |   4 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |   6 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |   2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |   6 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |   2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |   2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |   2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  12 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |   2 +-
 .../model/COTPPacketConnectionResponse.go          |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |   2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |   2 +-
 .../model/COTPPacketDisconnectResponse.go          |   2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |   2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |   8 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |   2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |   2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |   2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |   4 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |   2 +-
 .../s7/readwrite/model/S7DataAlarmMessage.go       |   4 +-
 .../s7/readwrite/model/S7MessageObjectRequest.go   |   2 +-
 .../s7/readwrite/model/S7MessageObjectResponse.go  |   2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |  14 +-
 .../readwrite/model/S7ParameterModeTransition.go   |   2 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |   2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |   2 +-
 .../model/S7ParameterSetupCommunication.go         |   2 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |   2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |   2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |   8 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarm8.go   |   2 +-
 .../s7/readwrite/model/S7PayloadAlarmAckInd.go     |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmS.go   |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSC.go  |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go  |   2 +-
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadNotify.go   |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadNotify8.go  |   2 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |   2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |  36 +--
 .../S7PayloadUserDataItemCpuFunctionAlarmAck.go    |   2 +-
 ...yloadUserDataItemCpuFunctionAlarmAckResponse.go |   2 +-
 .../S7PayloadUserDataItemCpuFunctionAlarmQuery.go  |   2 +-
 ...oadUserDataItemCpuFunctionAlarmQueryResponse.go |   2 +-
 ...ayloadUserDataItemCpuFunctionMsgSubscription.go |   2 +-
 ...aItemCpuFunctionMsgSubscriptionAlarmResponse.go |   2 +-
 ...erDataItemCpuFunctionMsgSubscriptionResponse.go |   2 +-
 ...ataItemCpuFunctionMsgSubscriptionSysResponse.go |   2 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |   2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |   2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |   2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |   2 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |   4 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |   4 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    |  14 +-
 .../eip/src/main/resources/protocols/eip/eip.mspec |   6 +-
 .../main/resources/protocols/firmata/firmata.mspec |   4 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |  14 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |   8 +-
 328 files changed, 976 insertions(+), 983 deletions(-)

diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index a4b8fc8..08c9446 100644
--- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -85,144 +85,142 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
 
     @Override
     public String getLanguageTypeNameForTypeReference(TypeReference typeReference) {
-        if (typeReference instanceof SimpleTypeReference) {
-            SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
-            switch (simpleTypeReference.getBaseType()) {
-                case BIT: {
-                    return "bool";
+        if (typeReference == null) {
+            // TODO: shouldn't this be an error case
+            return "";
+        }
+        if (!(typeReference instanceof SimpleTypeReference)) {
+            return ((ComplexTypeReference) typeReference).getName();
+        }
+        SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
+        switch (simpleTypeReference.getBaseType()) {
+            case BIT:
+                return "bool";
+            case BYTE:
+                return "byte";
+            case UINT:
+                IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
+                    return "uint8";
                 }
-                case BYTE: {
-                    return "byte";
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
+                    return "uint16";
                 }
-                case UINT: {
-                    IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (integerTypeReference.getSizeInBits() <= 8) {
-                        return "uint8";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 16) {
-                        return "uint16";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 32) {
-                        return "uint32";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 64) {
-                        return "uint64";
-                    }
-                    emitRequiredImport("math/big");
-                    return "*big.Int";
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
+                    return "uint32";
                 }
-                case INT: {
-                    IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (integerTypeReference.getSizeInBits() <= 8) {
-                        return "int8";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 16) {
-                        return "int16";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 32) {
-                        return "int32";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 64) {
-                        return "int64";
-                    }
-                    emitRequiredImport("math/big");
-                    return "*big.Int";
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 64) {
+                    return "uint64";
                 }
-                case FLOAT:
-                case UFLOAT: {
-                    FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                    int sizeInBits = floatTypeReference.getSizeInBits();
-                    if (sizeInBits <= 32) {
-                        return "float32";
-                    }
-                    if (sizeInBits <= 64) {
-                        return "float64";
-                    }
-                    emitRequiredImport("math/big");
-                    return "*big.Float";
+                emitRequiredImport("math/big");
+                return "*big.Int";
+            case INT:
+                IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (integerTypeReference.getSizeInBits() <= 8) {
+                    return "int8";
                 }
-                case STRING:
-                case VSTRING:
-                    return "string";
-                case TIME: {
-                    return "Time";
+                if (integerTypeReference.getSizeInBits() <= 16) {
+                    return "int16";
+                }
+                if (integerTypeReference.getSizeInBits() <= 32) {
+                    return "int32";
                 }
-                case DATE: {
-                    return "Date";
+                if (integerTypeReference.getSizeInBits() <= 64) {
+                    return "int64";
                 }
-                case DATETIME: {
-                    return "Date";
+                emitRequiredImport("math/big");
+                return "*big.Int";
+            case FLOAT:
+            case UFLOAT:
+                FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
+                int sizeInBits = floatTypeReference.getSizeInBits();
+                if (sizeInBits <= 32) {
+                    return "float32";
                 }
-            }
-            throw new RuntimeException("Unsupported simple type");
-        } else {
-            return (typeReference != null) ? ((ComplexTypeReference) typeReference).getName() : "";
+                if (sizeInBits <= 64) {
+                    return "float64";
+                }
+                emitRequiredImport("math/big");
+                return "*big.Float";
+            case STRING:
+            case VSTRING:
+                return "string";
+            case TIME:
+                return "Time";
+            case DATE:
+                return "Date";
+            case DATETIME:
+                return "Date";
         }
+        throw new RuntimeException("Unsupported simple type");
     }
 
     public String getPlcValueTypeForTypeReference(TypeReference typeReference) {
-        if (typeReference instanceof SimpleTypeReference) {
-            SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
-            switch (simpleTypeReference.getBaseType()) {
-                case BIT:
-                    return "values.NewPlcBOOL";
-                case BYTE:
+        if (typeReference == null) {
+            // TODO: shouldn't this be an error case
+            return "";
+        }
+        if (!(typeReference instanceof SimpleTypeReference)) {
+            return ((ComplexTypeReference) typeReference).getName();
+        }
+        SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
+        switch (simpleTypeReference.getBaseType()) {
+            case BIT:
+                return "values.NewPlcBOOL";
+            case BYTE:
+                return "values.NewPlcBYTE";
+            case UINT:
+                IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
+                    return "values.NewPlcUSINT";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
                     return "values.NewPlcUINT";
-                case UINT:
-                    IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
-                        return "values.NewPlcUSINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
-                        return "values.NewPlcUINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
-                        return "values.NewPlcUDINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 64) {
-                        return "values.NewPlcULINT";
-                    }
-                    return "values.NewPlcBINT";
-                case INT:
-                    IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (integerTypeReference.getSizeInBits() <= 8) {
-                        return "values.NewPlcSINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 16) {
-                        return "values.NewPlcINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 32) {
-                        return "values.NewPlcDINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 64) {
-                        return "values.NewPlcLINT";
-                    }
-                    return "values.NewPlcBINT";
-                case FLOAT:
-                case UFLOAT:
-                    FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                    int sizeInBits = floatTypeReference.getSizeInBits();
-                    if (sizeInBits <= 32) {
-                        return "values.NewPlcREAL";
-                    }
-                    if (sizeInBits <= 64) {
-                        return "values.NewPlcLREAL";
-                    }
-                    return "values.NewPlcBREAL";
-                case STRING:
-                case VSTRING:
-                    return "values.NewPlcSTRING";
-                case TIME:
-                    return "values.NewPlcTIME";
-                case DATE:
-                    return "values.NewPlcDATE";
-                case DATETIME:
-                    return "values.NewPlcDATE_AND_TIME";
-            }
-            throw new FreemarkerException("Unsupported simple type" + simpleTypeReference.getBaseType());
-        } else {
-            return (typeReference != null) ? ((ComplexTypeReference) typeReference).getName() : "";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
+                    return "values.NewPlcUDINT";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 64) {
+                    return "values.NewPlcULINT";
+                }
+                return "values.NewPlcBINT";
+            case INT:
+                IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (integerTypeReference.getSizeInBits() <= 8) {
+                    return "values.NewPlcSINT";
+                }
+                if (integerTypeReference.getSizeInBits() <= 16) {
+                    return "values.NewPlcINT";
+                }
+                if (integerTypeReference.getSizeInBits() <= 32) {
+                    return "values.NewPlcDINT";
+                }
+                if (integerTypeReference.getSizeInBits() <= 64) {
+                    return "values.NewPlcLINT";
+                }
+                return "values.NewPlcBINT";
+            case FLOAT:
+            case UFLOAT:
+                FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
+                int sizeInBits = floatTypeReference.getSizeInBits();
+                if (sizeInBits <= 32) {
+                    return "values.NewPlcREAL";
+                }
+                if (sizeInBits <= 64) {
+                    return "values.NewPlcLREAL";
+                }
+                return "values.NewPlcBREAL";
+            case STRING:
+            case VSTRING:
+                return "values.NewPlcSTRING";
+            case TIME:
+                return "values.NewPlcTIME";
+            case DATE:
+                return "values.NewPlcDATE";
+            case DATETIME:
+                return "values.NewPlcDATE_AND_TIME";
         }
+        throw new FreemarkerException("Unsupported simple type" + simpleTypeReference.getBaseType());
     }
 
     @Override
@@ -252,7 +250,6 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         switch (simpleTypeReference.getBaseType()) {
             case BIT:
                 return 1;
-
             case BYTE:
                 return 8;
             case UINT:
@@ -406,10 +403,10 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
                 final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
-                if (!(encodingTerm instanceof StringLiteral)) {
-                    throw new RuntimeException("Encoding must be a quoted string value");
-                }
-                String encoding = ((StringLiteral) encodingTerm).getValue();
+                String encoding = encodingTerm.asLiteral()
+                    .orElseThrow(() -> new RuntimeException("Encoding must be a literal"))
+                    .asStringLiteral()
+                    .orElseThrow(() -> new RuntimeException("Encoding must be a quoted string value")).getValue();
                 String length = Integer.toString(simpleTypeReference.getSizeInBits());
                 return "writeBuffer.WriteString(\"" + logicalName + "\", uint8(" + length + "), \"" +
                     encoding + "\", " + fieldName + writerArgsString + ")";
@@ -417,10 +414,10 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             case VSTRING: {
                 VstringTypeReference vstringTypeReference = (VstringTypeReference) simpleTypeReference;
                 final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
-                if (!(encodingTerm instanceof StringLiteral)) {
-                    throw new RuntimeException("Encoding must be a quoted string value");
-                }
-                String encoding = ((StringLiteral) encodingTerm).getValue();
+                String encoding = encodingTerm.asLiteral()
+                    .orElseThrow(() -> new RuntimeException("Encoding must be a literal"))
+                    .asStringLiteral()
+                    .orElseThrow(() -> new RuntimeException("Encoding must be a quoted string value")).getValue();
                 // TODO: Port this to use the expression term instead.
                 String length = Integer.toString(simpleTypeReference.getSizeInBits());
                 return "writeBuffer.WriteString(\"" + logicalName + "\", uint8(" + length + "), \"" +
@@ -489,12 +486,13 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     String getCastExpressionForTypeReference(TypeReference typeReference) {
+        Tracer tracer = Tracer.start("castExpression");
         if (typeReference instanceof SimpleTypeReference) {
-            return getLanguageTypeNameForTypeReference(typeReference);
+            return tracer.dive("simpleTypeRef") + getLanguageTypeNameForTypeReference(typeReference);
         } else if (typeReference != null) {
-            return "Cast" + getLanguageTypeNameForTypeReference(typeReference);
+            return tracer.dive("anyTypeRef") + "Cast" + getLanguageTypeNameForTypeReference(typeReference);
         } else {
-            return "";
+            return tracer.dive("noTypeRef") + "";
         }
     }
 
@@ -677,7 +675,6 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         else if (variableLiteral.getName().equals(variableLiteral.getName().toUpperCase())) {
             return toUppercaseVariableExpression(field, typeReference, variableLiteral, parserArguments, serializerArguments, serialize, suppressPointerAccess, tracer);
         }
-
         // If the current property references a discriminator value, we have to serialize it differently.
         else if (thisType.isComplexTypeDefinition() && thisType.asComplexTypeDefinition()
             .orElseThrow(IllegalStateException::new)
@@ -690,19 +687,26 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         // If the variable has a child element and we're able to find a type for this ... get the type.
         else if ((variableLiteral.getChild().isPresent()) && (getTypeReferenceForProperty(((ComplexTypeDefinition) thisType), variableLiteral.getName()).isPresent())) {
             tracer = tracer.dive("child element");
-            final Optional<TypeReference> typeReferenceForProperty = getTypeReferenceForProperty(((ComplexTypeDefinition) thisType), variableLiteral.getName());
-            if (typeReferenceForProperty.isPresent() && typeReferenceForProperty.get() instanceof ComplexTypeReference) {
+            final Optional<ComplexTypeReference> typeReferenceForProperty = getTypeReferenceForProperty(((ComplexTypeDefinition) thisType), variableLiteral.getName())
+                .flatMap(TypeReferenceConversions::asComplexTypeReference);
+            if (typeReferenceForProperty.isPresent()) {
                 tracer = tracer.dive("complex");
                 final TypeReference complexTypeReference = typeReferenceForProperty.get();
                 TypeDefinition typeDefinition = getTypeDefinitionForTypeReference(complexTypeReference);
                 if (typeDefinition instanceof ComplexTypeDefinition) {
                     tracer = tracer.dive("complex");
                     ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) typeDefinition;
-                    String childProperty = variableLiteral.getChild().orElseThrow(() -> new RuntimeException("complex needs a child")).getName();
-                    final Optional<Field> matchingDiscriminatorField = complexTypeDefinition.getFields().stream().filter(curField -> (curField instanceof DiscriminatorField) && ((DiscriminatorField) curField).getName().equals(childProperty)).findFirst();
+                    String childProperty = variableLiteral.getChild()
+                        .orElseThrow(() -> new RuntimeException("complex needs a child"))
+                        .getName();
+                    final Optional<Field> matchingDiscriminatorField = complexTypeDefinition.getFields().stream()
+                        .filter(curField -> (curField instanceof DiscriminatorField) && ((DiscriminatorField) curField).getName().equals(childProperty))
+                        .findFirst();
                     if (matchingDiscriminatorField.isPresent()) {
                         return tracer + "Cast" + getLanguageTypeNameForTypeReference(complexTypeReference) + "(" + variableLiteral.getName() + ").Child." + StringUtils.capitalize(childProperty) + "()";
                     }
+                    // TODO: is this really meant to fall through?
+                    tracer = tracer.dive("we fell through the complex complex");
                 } else if (typeDefinition instanceof EnumTypeDefinition) {
                     tracer = tracer.dive("enum");
                     return tracer + (serialize ? "m." + StringUtils.capitalize(variableLiteral.getName()) : variableLiteral.getName()) +
@@ -710,6 +714,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                 }
             }
             // TODO: is this really meant to fall through?
+            tracer = tracer.dive("we fell through the child comple");
         } else if (isVariableLiteralImplicitField(variableLiteral)) {
             tracer = tracer.dive("implicit");
             if (serialize) {
@@ -799,7 +804,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         } else {
             sb.append(toVariableExpression(field, typeReference, va, parserArguments, serializerArguments, true, suppressPointerAccess));
         }
-        return tracer + getCastExpressionForTypeReference(typeReference) + "(" + va.getName() + "ArraySizeInBytes(" + sb.toString() + "))";
+        return tracer + getCastExpressionForTypeReference(typeReference) + "(" + va.getName() + "ArraySizeInBytes(" + sb + "))";
     }
 
     private String toCountVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean serialize, boolean suppressPointerAccess, Tracer tracer) {
@@ -859,7 +864,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                         sb.append(va.getName().substring(1)).append(va.getChild().map(child -> "." + toVariableExpression(field, typeReference, child, parserArguments, serializerArguments, false, suppressPointerAccess)).orElse(""));
                     } else {
                         sb.append(va.getName()).append((va.getChild().isPresent()) ?
-                            "." + toVariableExpression(field, typeReference, variableLiteral.getChild().get(), parserArguments, serializerArguments, false, suppressPointerAccess) : "");
+                            "." + toVariableExpression(field, typeReference, variableLiteral.getChild().orElseThrow(IllegalStateException::new), parserArguments, serializerArguments, false, suppressPointerAccess) : "");
                     }
                 }
                 // We have to manually evaluate the type information at code-generation time.
@@ -924,7 +929,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
 
     private String toConstantVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean suppressPointerAccess, Tracer tracer) {
         tracer = tracer.dive("enum constant");
-        VariableLiteral child = variableLiteral.getChild().get();
+        VariableLiteral child = variableLiteral.getChild().orElseThrow(IllegalStateException::new);
         return tracer + variableLiteral.getName() + "." + StringUtils.capitalize(child.getName()) + "()" +
             child.getChild().map(childChild -> "." + toVariableExpression(field, typeReference, childChild, parserArguments, serializerArguments, false, suppressPointerAccess)).orElse("");
     }
@@ -986,7 +991,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                     SimpleTypeReference simpleTypeReference = (SimpleTypeReference) type;
                     sizeInBits += simpleTypeReference.getSizeInBits();
                 } else {
-                    // No ComplexTypeReference supported.
+                    throw new IllegalStateException("No ComplexTypeReference supported");
                 }
             }
         }
diff --git a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
index b9f8c08..08bc7f4 100644
--- a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -67,7 +67,7 @@ import (
 // Code generated by code-generation. DO NOT EDIT.
 
 <#-- TODO: the code below implies that parserArguments will be null if not present... not pretty  -->
-<#if type.parserArguments.isPresent()><#assign parserArguments=type.parserArguments.orElseThrow()></#if>
+<#if type.parserArguments.isPresent()><#assign parserArguments=type.allParserArguments.orElseThrow()></#if>
 <#if type.constFields?has_content>
 
 // Constant values.
@@ -548,10 +548,8 @@ func (m *${type.name}) LengthInBytes() uint16 {
 }
 
 <#assign hasParserArguments=parserArguments?has_content/>
-<#assign parserArgumentList><#if hasParserArguments><#list parserArguments as parserArgument>${parserArgument.name}${tracer.dive("parserArgument")} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if></#assign>
-<#assign hasParentParserArguments=(type.parentType?? && type.parentType.parserArguments.isPresent() && type.parentType.parserArguments.orElseThrow()?filter(arg -> hasParserArguments && !parserArguments?map(argument->argument.name)?seq_contains(arg.name) || !hasParserArguments)?has_content)>
-<#assign parentParserArgumentList><#if hasParentParserArguments><#list type.parentType.parserArguments.orElseThrow()?filter(arg -> (hasParserArguments && !parserArguments?map(argument->argument.name)?seq_contains(arg.name) || !hasParserArguments) && type.isNonDiscriminatorField(arg.name)) as parserArgument>${tracer.dive("parentParserArgument")}${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>*</#if>${helper [...]
-func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${parserArgumentList}</#if><#if hasParentParserArguments>, ${parentParserArgumentList}</#if>) (*<#if type.parentType?has_content>${type.parentType.name}<#else>${type.name}</#if>, error) {
+<#assign parserArgumentList><#if hasParserArguments><#list parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if></#assign>
+func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${parserArgumentList}</#if>) (*<#if type.parentType?has_content>${type.parentType.name}<#else>${type.name}</#if>, error) {
 	if pullErr := readBuffer.PullContext("${type.name}"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -568,20 +566,20 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 	<#assign numberOfBytesExpression>
 		<#compress>
 		<#if field.isCountArrayField()>
-			numberOfBytes := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
+			numberOfBytes${arrayField.name} := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
 		<#elseif field.isLengthArrayField()>
-			numberOfBytes := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
+			numberOfBytes${arrayField.name} := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
 		<#elseif field.isTerminatedArrayField()>
 			<#-- TODO: we need to find out to implement this-->
-			numberOfBytes := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
+			numberOfBytes${arrayField.name} := int(${helper.toIntegerParseExpression(field, 16, arrayField.loopExpression, parserArguments)})
 		<#else>
 			<#-- TODO: we should throw a exception here-->
-			numberOfBytes := int(-1)
+			numberOfBytes${arrayField.name} := int(-1)
 		</#if>
 		</#compress>
 	</#assign>
 	${numberOfBytesExpression}
-	${arrayField.name}, _readArrayErr := readBuffer.ReadByteArray("${arrayField.name}", numberOfBytes)
+	${arrayField.name}, _readArrayErr := readBuffer.ReadByteArray("${arrayField.name}", numberOfBytes${arrayField.name})
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 	}
@@ -856,16 +854,16 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
                     <#assign typeName=typeDefinition.parentType.name>
                     <#assign typeDefinition=typeDefinition.parentType>
                 </#if>
-                    <#assign hasRefParams=complexTypeReference.params.isPresent()>
-                    <#assign refParams>
-                        <#if hasRefParams>
+				<#assign hasRefParams=complexTypeReference.params.isPresent()>
+				<#assign refParams>
+					<#if hasRefParams>
 							,
-                            <#list complexTypeReference.params.orElseThrow() as parserArgument>
-                                ${helper.toTypedParseExpression(optionalField, helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, parserArguments)}
-                                <#sep>, </#sep>
-                            </#list>
-                        </#if>
-                    </#assign>
+						<#list complexTypeReference.params.orElseThrow() as parserArgument>
+							${helper.toTypedParseExpression(optionalField, helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, parserArguments)}
+							<#sep>, </#sep>
+						</#list>
+					</#if>
+				</#assign>
 		_val, _err := ${typeName}Parse(readBuffer${refParams})
                 </...@compress>
 
@@ -904,7 +902,6 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
                     <#assign typeDefinition=typeDefinition.parentType>
                 </#if>
 				<#assign hasRefParams=complexTypeReference.params.isPresent() && typeDefinition.parserArguments.isPresent()>
-				<#assign refParams> <#if hasRefParams>, <#list complexTypeReference.params.orElseThrow() as typeParam>${helper.toTypedParseExpression(assertField, null, typeParam, null)}<#sep>, </#sep></#list> </#if> </#assign>
                 </...@compress>
 	_val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(readBuffer${refParams})
 	if _err != nil {
@@ -1042,7 +1039,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 						</#if>: // ${case.name}
                     </...@compress>
 
-		_parent, typeSwitchError = ${case.name}Parse(readBuffer<#if case.parserArguments.isPresent()>, <#list case.parserArguments.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && type.getPropertyFieldFromThisOrParentByName(parserArgument.name).orE [...]
+		_parent, typeSwitchError = ${case.name}Parse(readBuffer<#if case.allParserArguments.isPresent()>, <#list case.allParserArguments.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && type.getPropertyFieldFromThisOrParentByName(parserArgument.nam [...]
 				</#list>
 	default:
 		// TODO: return actual type
diff --git a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index cc94836..1fae41d 100644
--- a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -98,130 +98,128 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
     }
 
     public String getLanguageTypeNameForTypeReference(TypeReference typeReference, boolean allowPrimitive) {
-        if (typeReference instanceof SimpleTypeReference) {
-            SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
-            switch (simpleTypeReference.getBaseType()) {
-                case BIT:
-                    return allowPrimitive ? boolean.class.getSimpleName() : Boolean.class.getSimpleName();
-                case BYTE:
+        if (!(typeReference instanceof SimpleTypeReference)) {
+            return ((ComplexTypeReference) typeReference).getName();
+        }
+        SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
+        switch (simpleTypeReference.getBaseType()) {
+            case BIT:
+                return allowPrimitive ? boolean.class.getSimpleName() : Boolean.class.getSimpleName();
+            case BYTE:
+                return allowPrimitive ? byte.class.getSimpleName() : Byte.class.getSimpleName();
+            case UINT:
+                IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 4) {
                     return allowPrimitive ? byte.class.getSimpleName() : Byte.class.getSimpleName();
-                case UINT:
-                    IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 4) {
-                        return allowPrimitive ? byte.class.getSimpleName() : Byte.class.getSimpleName();
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
-                        return allowPrimitive ? short.class.getSimpleName() : Short.class.getSimpleName();
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
-                        return allowPrimitive ? int.class.getSimpleName() : Integer.class.getSimpleName();
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
-                        return allowPrimitive ? long.class.getSimpleName() : Long.class.getSimpleName();
-                    }
-                    return BigInteger.class.getSimpleName();
-                case INT:
-                    IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (integerTypeReference.getSizeInBits() <= 8) {
-                        return allowPrimitive ? byte.class.getSimpleName() : Byte.class.getSimpleName();
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 16) {
-                        return allowPrimitive ? short.class.getSimpleName() : Short.class.getSimpleName();
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 32) {
-                        return allowPrimitive ? int.class.getSimpleName() : Integer.class.getSimpleName();
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 64) {
-                        return allowPrimitive ? long.class.getSimpleName() : Long.class.getSimpleName();
-                    }
-                    return BigInteger.class.getSimpleName();
-                case FLOAT:
-                case UFLOAT:
-                    FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                    int sizeInBits = floatTypeReference.getSizeInBits();
-                    if (sizeInBits <= 32) {
-                        return allowPrimitive ? float.class.getSimpleName() : Float.class.getSimpleName();
-                    }
-                    if (sizeInBits <= 64) {
-                        return allowPrimitive ? double.class.getSimpleName() : Double.class.getSimpleName();
-                    }
-                    return BigDecimal.class.getSimpleName();
-                case STRING:
-                case VSTRING:
-                    return String.class.getSimpleName();
-                case TIME:
-                    return LocalTime.class.getSimpleName();
-                case DATE:
-                    return LocalDate.class.getSimpleName();
-                case DATETIME:
-                    return LocalDateTime.class.getSimpleName();
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
+                    return allowPrimitive ? short.class.getSimpleName() : Short.class.getSimpleName();
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
+                    return allowPrimitive ? int.class.getSimpleName() : Integer.class.getSimpleName();
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
+                    return allowPrimitive ? long.class.getSimpleName() : Long.class.getSimpleName();
+                }
+                return BigInteger.class.getSimpleName();
+            case INT:
+                IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (integerTypeReference.getSizeInBits() <= 8) {
+                    return allowPrimitive ? byte.class.getSimpleName() : Byte.class.getSimpleName();
+                }
+                if (integerTypeReference.getSizeInBits() <= 16) {
+                    return allowPrimitive ? short.class.getSimpleName() : Short.class.getSimpleName();
+                }
+                if (integerTypeReference.getSizeInBits() <= 32) {
+                    return allowPrimitive ? int.class.getSimpleName() : Integer.class.getSimpleName();
+                }
+                if (integerTypeReference.getSizeInBits() <= 64) {
+                    return allowPrimitive ? long.class.getSimpleName() : Long.class.getSimpleName();
+                }
+                return BigInteger.class.getSimpleName();
+            case FLOAT:
+            case UFLOAT:
+                FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
+                int sizeInBits = floatTypeReference.getSizeInBits();
+                if (sizeInBits <= 32) {
+                    return allowPrimitive ? float.class.getSimpleName() : Float.class.getSimpleName();
+                }
+                if (sizeInBits <= 64) {
+                    return allowPrimitive ? double.class.getSimpleName() : Double.class.getSimpleName();
+                }
+                return BigDecimal.class.getSimpleName();
+            case STRING:
+            case VSTRING:
+                return String.class.getSimpleName();
+            case TIME:
+                return LocalTime.class.getSimpleName();
+            case DATE:
+                return LocalDate.class.getSimpleName();
+            case DATETIME:
+                return LocalDateTime.class.getSimpleName();
 
-            }
-            throw new RuntimeException("Unsupported simple type");
-        } else {
-            return ((ComplexTypeReference) typeReference).getName();
         }
+        throw new RuntimeException("Unsupported simple type");
     }
 
     public String getPlcValueTypeForTypeReference(TypeReference typeReference) {
-        if (typeReference instanceof SimpleTypeReference) {
-            SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
-            switch (simpleTypeReference.getBaseType()) {
-                case BIT:
-                    return "PlcBOOL";
-                case BYTE:
+        if (!(typeReference instanceof SimpleTypeReference)) {
+            return "PlcStruct";
+        }
+        SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
+        switch (simpleTypeReference.getBaseType()) {
+            case BIT:
+                return "PlcBOOL";
+            case BYTE:
+                return "PlcSINT";
+            case UINT:
+                IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 4) {
+                    return "PlcUSINT";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
+                    return "PlcUINT";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
+                    return "PlcUDINT";
+                }
+                if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
+                    return "PlcULINT";
+                }
+            case INT:
+                IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+                if (integerTypeReference.getSizeInBits() <= 8) {
                     return "PlcSINT";
-                case UINT:
-                    IntegerTypeReference unsignedIntegerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 4) {
-                        return "PlcUSINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 8) {
-                        return "PlcUINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 16) {
-                        return "PlcUDINT";
-                    }
-                    if (unsignedIntegerTypeReference.getSizeInBits() <= 32) {
-                        return "PlcULINT";
-                    }
-                case INT:
-                    IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
-                    if (integerTypeReference.getSizeInBits() <= 8) {
-                        return "PlcSINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 16) {
-                        return "PlcINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 32) {
-                        return "PlcDINT";
-                    }
-                    if (integerTypeReference.getSizeInBits() <= 64) {
-                        return "PlcLINT";
-                    }
+                }
+                if (integerTypeReference.getSizeInBits() <= 16) {
+                    return "PlcINT";
+                }
+                if (integerTypeReference.getSizeInBits() <= 32) {
+                    return "PlcDINT";
+                }
+                if (integerTypeReference.getSizeInBits() <= 64) {
+                    return "PlcLINT";
+                }
 
-                case FLOAT:
-                case UFLOAT:
-                    FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                    int sizeInBits = floatTypeReference.getSizeInBits();
-                    if (sizeInBits <= 32) {
-                        return "PlcREAL";
-                    }
-                    if (sizeInBits <= 64) {
-                        return "PlcLREAL";
-                    }
-                case STRING:
-                case VSTRING:
-                    return "PlcSTRING";
-                case TIME:
-                case DATE:
-                case DATETIME:
-                    return "PlcTIME";
-            }
-            throw new RuntimeException("Unsupported simple type");
-        } else {
-            return "PlcStruct";
+            case FLOAT:
+            case UFLOAT:
+                FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
+                int sizeInBits = floatTypeReference.getSizeInBits();
+                if (sizeInBits <= 32) {
+                    return "PlcREAL";
+                }
+                if (sizeInBits <= 64) {
+                    return "PlcLREAL";
+                }
+            case STRING:
+            case VSTRING:
+                return "PlcSTRING";
+            case TIME:
+            case DATE:
+            case DATETIME:
+                return "PlcTIME";
         }
+        throw new RuntimeException("Unsupported simple type");
     }
 
     @Override
@@ -683,8 +681,6 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
             .asStringLiteral()
             .orElseThrow(() -> new RuntimeException("Expecting the first argument of a 'STATIC_CALL' to be a StringLiteral")).
             getValue();
-        // Cut off the double-quotes
-        //methodName = methodName.substring(1, methodName.length() - 1);
         sb.append(methodName).append("(");
         for (int i = 1; i < arguments.size(); i++) {
             Term arg = arguments.get(i);
diff --git a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
index e4e81d8..2076caa 100644
--- a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
+++ b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
@@ -73,7 +73,7 @@ import java.util.function.Supplier;
 // Code generated by code-generation. DO NOT EDIT.
 
 <#-- TODO: the code below implies that parserArguments will be null if not present... not pretty  -->
-<#if type.parserArguments.isPresent()><#assign parserArguments=type.parserArguments.orElseThrow()></#if>
+<#if type.parserArguments.isPresent()><#assign parserArguments=type.allParserArguments.orElseThrow()></#if>
 public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<${type.name}, ${type.name}><#else>MessageInput<${type.name}></#if> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(${type.name}IO.class);
@@ -137,9 +137,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 <#-- Here come the actual parse and serialize methods that actually do the parsing and serlaizing -->
     <#assign hasParserArguments=parserArguments?has_content/>
     <#assign parserArgumentList><#if hasParserArguments><#list parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if></#assign>
-    <#assign hasParentParserArguments=(type.parentType?? && type.parentType.parserArguments.isPresent() && type.parentType.parserArguments.orElseThrow()?filter(arg -> hasParserArguments && !parserArguments?map(argument->argument.name)?seq_contains(arg.name) || !hasParserArguments)?has_content)>
-    <#assign parentParserArgumentList><#if hasParentParserArguments><#list type.parentType.parserArguments.orElseThrow()?filter(arg -> hasParserArguments && !parserArguments?map(argument->argument.name)?seq_contains(arg.name) || !hasParserArguments) as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if></#assign>
-    public static ${type.name}<#if type.isDiscriminatedChildTypeDefinition()>Builder</#if> staticParse(ReadBuffer readBuffer<#if hasParserArguments>, ${parserArgumentList}</#if><#if hasParentParserArguments>, ${parentParserArgumentList}</#if>) throws ParseException {
+    public static ${type.name}<#if type.isDiscriminatedChildTypeDefinition()>Builder</#if> staticParse(ReadBuffer readBuffer<#if hasParserArguments>, ${parserArgumentList}</#if>) throws ParseException {
         readBuffer.pullContext("${type.name}");
         int startPos = readBuffer.getPos();
         int curPos;
@@ -232,13 +230,13 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
                     ${helper.getReadBufferReadMethodCall(discriminatorField.name, simpleTypeReference, "", discriminatorField)}
                 <#else>
                     ${discriminatorField.type.asComplexTypeReference().orElseThrow().name}IO.staticParse(readBuffer
-                    <#--if discriminatorField.params.isPresent()>
+                    <#if discriminatorField.type.asComplexTypeReference().orElseThrow().params.isPresent()>
                         ,
-                        <#list discriminatorField.params.orElseThrow() as parserArgument>
+                        <#list discriminatorField.type.asComplexTypeReference().orElseThrow().params.orElseThrow() as parserArgument>
                             (${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(simpleTypeReference, parserArgument?index), true)})
                             (${helper.toParseExpression(discriminatorField, parserArgument, null)})<#sep>, </#sep>
                         </#list>
-                    </#if-->
+                    </#if>
                     )
                 </#if>;
             </...@compress>
@@ -396,12 +394,9 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
             </#if>{
             </...@compress>
             <@compress single_line=true>
-            <#assign hasCaseParseArguments=case.parserArguments.isPresent() && case.parserArguments.orElseThrow()?has_content>
-            <#assign caseParseArguments><#if hasCaseParseArguments><#list case.parserArguments.orElseThrow() as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if></#assign>
-            <#-- We expose the parentParserArguments to the child here too-->
-            <#assign hasParentCaseParseArguments=case.parentType?? && case.parentType.parserArguments.isPresent() && case.parentType.parserArguments.orElseThrow()?filter(arg -> hasCaseParseArguments && !case.parserArguments.orElseThrow()?map(argument->argument.name)?seq_contains(arg.name) || !hasCaseParseArguments)?has_content>
-            <#assign parentCaseParseArguments><#if hasParentCaseParseArguments><#list case.parentType.parserArguments.orElseThrow()?filter(arg -> hasCaseParseArguments && !case.parserArguments.orElseThrow()?map(argument->argument.name)?seq_contains(arg.name) || !hasCaseParseArguments) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if></#assign>
-            builder = ${case.name}IO.staticParse(readBuffer<#if hasCaseParseArguments>, ${tracer.dive("case parse arguments")} ${caseParseArguments}</#if><#if hasParentCaseParseArguments>, ${tracer.dive("case parent parse arguments")} ${parentCaseParseArguments}</#if>);
+            <#assign hasCaseParseArguments=case.allParserArguments.isPresent() && case.allParserArguments.orElseThrow()?has_content>
+            <#assign caseParseArguments><#if hasCaseParseArguments><#list case.allParserArguments.orElseThrow() as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if></#assign>
+            builder = ${case.name}IO.staticParse(readBuffer<#if hasCaseParseArguments>, ${tracer.dive("case parse arguments")} ${caseParseArguments}</#if>);
             </...@compress>
         }<#sep> else </#sep>
         </#list>
diff --git a/plc4go/internal/plc4go/ads/Reader.go b/plc4go/internal/plc4go/ads/Reader.go
index e59ef29..c746ba4 100644
--- a/plc4go/internal/plc4go/ads/Reader.go
+++ b/plc4go/internal/plc4go/ads/Reader.go
@@ -331,7 +331,7 @@ func (m *Reader) resolveField(symbolicField SymbolicPlcField) (DirectPlcField, e
 		0,
 		4,
 		nil,
-		utils.ByteArrayToInt8Array([]byte(symbolicField.SymbolicAddress+"\000")),
+		[]byte(symbolicField.SymbolicAddress+"\000"),
 	)
 	result := make(chan model.PlcReadRequestResult)
 	go func() {
@@ -370,14 +370,14 @@ func (m *Reader) ToPlc4xReadResponse(amsTcpPaket readWriteModel.AmsTCPPacket, re
 	switch amsTcpPaket.Userdata.Data.Child.(type) {
 	case *readWriteModel.AdsReadResponse:
 		readResponse := readWriteModel.CastAdsReadResponse(amsTcpPaket.Userdata.Data)
-		data := utils.Int8ArrayToUint8Array(readResponse.Data)
+		data := readResponse.Data
 		rb = utils.NewLittleEndianReadBufferByteBased(data)
 		for _, fieldName := range readRequest.GetFieldNames() {
 			responseCodes[fieldName] = model.PlcResponseCode_OK
 		}
 	case *readWriteModel.AdsReadWriteResponse:
 		readResponse := readWriteModel.CastAdsReadWriteResponse(amsTcpPaket.Userdata.Data)
-		data := utils.Int8ArrayToUint8Array(readResponse.Data)
+		data := readResponse.Data
 		rb = utils.NewLittleEndianReadBufferByteBased(data)
 		// When parsing a multi-item response, the error codes of each items come
 		// in sequence and then come the values.
diff --git a/plc4go/internal/plc4go/ads/Writer.go b/plc4go/internal/plc4go/ads/Writer.go
index 6216388..12639de 100644
--- a/plc4go/internal/plc4go/ads/Writer.go
+++ b/plc4go/internal/plc4go/ads/Writer.go
@@ -113,7 +113,7 @@ func (m *Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWrite
 			}
 			return
 		}
-		data := utils.Uint8ArrayToInt8Array(io.GetBytes())
+		data := io.GetBytes()
 
 		userdata := readWriteModel.AmsPacket{
 			TargetAmsNetId: &m.targetAmsNetId,
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
index 222528a..0cc0331 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
@@ -132,7 +132,7 @@ func (m *AdsAddDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
index c60af8d..9780cbc 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
@@ -107,7 +107,7 @@ func (m *AdsAddDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
index a6b631a..3eeb690 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
@@ -101,45 +101,45 @@ func AdsDataParse(readBuffer utils.ReadBuffer, commandId CommandId, response boo
 	var typeSwitchError error
 	switch {
 	case commandId == CommandId_INVALID && response == false: // AdsInvalidRequest
-		_parent, typeSwitchError = AdsInvalidRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsInvalidRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_INVALID && response == true: // AdsInvalidResponse
-		_parent, typeSwitchError = AdsInvalidResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsInvalidResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_DEVICE_INFO && response == false: // AdsReadDeviceInfoRequest
-		_parent, typeSwitchError = AdsReadDeviceInfoRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsReadDeviceInfoRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_DEVICE_INFO && response == true: // AdsReadDeviceInfoResponse
-		_parent, typeSwitchError = AdsReadDeviceInfoResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsReadDeviceInfoResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ && response == false: // AdsReadRequest
-		_parent, typeSwitchError = AdsReadRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsReadRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ && response == true: // AdsReadResponse
-		_parent, typeSwitchError = AdsReadResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsReadResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE && response == false: // AdsWriteRequest
-		_parent, typeSwitchError = AdsWriteRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsWriteRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE && response == true: // AdsWriteResponse
-		_parent, typeSwitchError = AdsWriteResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsWriteResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_STATE && response == false: // AdsReadStateRequest
-		_parent, typeSwitchError = AdsReadStateRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsReadStateRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_STATE && response == true: // AdsReadStateResponse
-		_parent, typeSwitchError = AdsReadStateResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsReadStateResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE_CONTROL && response == false: // AdsWriteControlRequest
-		_parent, typeSwitchError = AdsWriteControlRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsWriteControlRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE_CONTROL && response == true: // AdsWriteControlResponse
-		_parent, typeSwitchError = AdsWriteControlResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsWriteControlResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == false: // AdsAddDeviceNotificationRequest
-		_parent, typeSwitchError = AdsAddDeviceNotificationRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsAddDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == true: // AdsAddDeviceNotificationResponse
-		_parent, typeSwitchError = AdsAddDeviceNotificationResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsAddDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == false: // AdsDeleteDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == true: // AdsDeleteDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == false: // AdsDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeviceNotificationRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == true: // AdsDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeviceNotificationResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_WRITE && response == false: // AdsReadWriteRequest
-		_parent, typeSwitchError = AdsReadWriteRequestParse(readBuffer)
+		_parent, typeSwitchError = AdsReadWriteRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_WRITE && response == true: // AdsReadWriteResponse
-		_parent, typeSwitchError = AdsReadWriteResponseParse(readBuffer)
+		_parent, typeSwitchError = AdsReadWriteResponseParse(readBuffer, commandId, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
index f7c3348..14cb017 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
@@ -102,7 +102,7 @@ func (m *AdsDeleteDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
index 3286eda..a854638 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
@@ -102,7 +102,7 @@ func (m *AdsDeleteDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index c778f43..f3cfc27 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -117,7 +117,7 @@ func (m *AdsDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
index e39a126..b30537e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
@@ -96,7 +96,7 @@ func (m *AdsDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
index 8af6fab..6e99e9b 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
@@ -96,7 +96,7 @@ func (m *AdsInvalidRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsInvalidRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsInvalidRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsInvalidRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
index b440038..0e4bffe 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
@@ -96,7 +96,7 @@ func (m *AdsInvalidResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsInvalidResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsInvalidResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsInvalidResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
index ea9b085..a2559c4 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
@@ -100,11 +100,11 @@ func AdsMultiRequestItemParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*
 	var typeSwitchError error
 	switch {
 	case indexGroup == 61568: // AdsMultiRequestItemRead
-		_parent, typeSwitchError = AdsMultiRequestItemReadParse(readBuffer)
+		_parent, typeSwitchError = AdsMultiRequestItemReadParse(readBuffer, indexGroup)
 	case indexGroup == 61569: // AdsMultiRequestItemWrite
-		_parent, typeSwitchError = AdsMultiRequestItemWriteParse(readBuffer)
+		_parent, typeSwitchError = AdsMultiRequestItemWriteParse(readBuffer, indexGroup)
 	case indexGroup == 61570: // AdsMultiRequestItemReadWrite
-		_parent, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer)
+		_parent, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer, indexGroup)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
index 4bb70d0..e834ef3 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
@@ -108,7 +108,7 @@ func (m *AdsMultiRequestItemRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
index 8777f31..95d25c3 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
@@ -113,7 +113,7 @@ func (m *AdsMultiRequestItemReadWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemReadWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
index eb745be..d248e40 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
@@ -108,7 +108,7 @@ func (m *AdsMultiRequestItemWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
index 88d92be..42f3a11 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
@@ -103,8 +103,8 @@ func AdsNotificationSampleParse(readBuffer utils.ReadBuffer) (*AdsNotificationSa
 		return nil, errors.Wrap(_sampleSizeErr, "Error parsing 'sampleSize' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(sampleSize)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(sampleSize)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
index 219d2e8..8305352 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
@@ -96,7 +96,7 @@ func (m *AdsReadDeviceInfoRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index 6625ec7..89063b4 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -124,7 +124,7 @@ func (m *AdsReadDeviceInfoResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -159,8 +159,8 @@ func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer) (*AdsData, erro
 		return nil, errors.Wrap(_versionErr, "Error parsing 'version' field")
 	}
 	// Byte Array field (device)
-	numberOfBytes := int(uint16(16))
-	device, _readArrayErr := readBuffer.ReadByteArray("device", numberOfBytes)
+	numberOfBytesdevice := int(uint16(16))
+	device, _readArrayErr := readBuffer.ReadByteArray("device", numberOfBytesdevice)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'device' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
index cade5a9..481dbc6 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
@@ -112,7 +112,7 @@ func (m *AdsReadRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index d0504d2..28dd38c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -112,7 +112,7 @@ func (m *AdsReadResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -136,8 +136,8 @@ func AdsReadResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(length)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(length)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
index 44adbc8..ea7a51f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
@@ -96,7 +96,7 @@ func (m *AdsReadStateRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadStateRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadStateRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadStateRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
index 70191d1..3519f1d 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
@@ -112,7 +112,7 @@ func (m *AdsReadStateResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadStateResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadStateResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadStateResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index d3fa4d8..169ecb2 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -132,7 +132,7 @@ func (m *AdsReadWriteRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -179,8 +179,8 @@ func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
 		return nil, closeErr
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(writeLength) - uint16(uint16(uint16(uint16(len(items)))*uint16(uint16(12)))))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(writeLength) - uint16(uint16(uint16(uint16(len(items)))*uint16(uint16(12)))))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index 20e38d0..f4ac0be 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -112,7 +112,7 @@ func (m *AdsReadWriteResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsReadWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -136,8 +136,8 @@ func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(length)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(length)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
index fcc8c97..17ef4e3 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
@@ -117,7 +117,7 @@ func (m *AdsWriteControlRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteControlRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -141,8 +141,8 @@ func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error)
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(length)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(length)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
index f5b4972..268aacb 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
@@ -102,7 +102,7 @@ func (m *AdsWriteControlResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsWriteControlResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsWriteControlResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteControlResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
index e56ad32..17ad335 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
@@ -117,7 +117,7 @@ func (m *AdsWriteRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsWriteRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -141,8 +141,8 @@ func AdsWriteRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(length)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(length)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
index d6b7894..858af92 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
@@ -102,7 +102,7 @@ func (m *AdsWriteResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsWriteResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+func AdsWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index a804e38..2dca357 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -112,17 +112,17 @@ func APDUParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	case apduType == 0x1: // APDUUnconfirmedRequest
 		_parent, typeSwitchError = APDUUnconfirmedRequestParse(readBuffer, apduLength)
 	case apduType == 0x2: // APDUSimpleAck
-		_parent, typeSwitchError = APDUSimpleAckParse(readBuffer)
+		_parent, typeSwitchError = APDUSimpleAckParse(readBuffer, apduLength)
 	case apduType == 0x3: // APDUComplexAck
-		_parent, typeSwitchError = APDUComplexAckParse(readBuffer)
+		_parent, typeSwitchError = APDUComplexAckParse(readBuffer, apduLength)
 	case apduType == 0x4: // APDUSegmentAck
-		_parent, typeSwitchError = APDUSegmentAckParse(readBuffer)
+		_parent, typeSwitchError = APDUSegmentAckParse(readBuffer, apduLength)
 	case apduType == 0x5: // APDUError
-		_parent, typeSwitchError = APDUErrorParse(readBuffer)
+		_parent, typeSwitchError = APDUErrorParse(readBuffer, apduLength)
 	case apduType == 0x6: // APDUReject
-		_parent, typeSwitchError = APDURejectParse(readBuffer)
+		_parent, typeSwitchError = APDURejectParse(readBuffer, apduLength)
 	case apduType == 0x7: // APDUAbort
-		_parent, typeSwitchError = APDUAbortParse(readBuffer)
+		_parent, typeSwitchError = APDUAbortParse(readBuffer, apduLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index d7dfd39..0795b38 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -112,7 +112,7 @@ func (m *APDUAbort) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDUAbortParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUAbort"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 5192857..8811598 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -131,7 +131,7 @@ func (m *APDUComplexAck) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDUComplexAckParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDUComplexAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUComplexAck"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 158b2ca..88f698b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -107,7 +107,7 @@ func (m *APDUError) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDUErrorParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDUErrorParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUError"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 6c920e7..969b133 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -107,7 +107,7 @@ func (m *APDUReject) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDURejectParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUReject"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 2a3cbd5..e35314c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -122,7 +122,7 @@ func (m *APDUSegmentAck) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDUSegmentAckParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDUSegmentAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUSegmentAck"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 0722c9c..8ca2059 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -107,7 +107,7 @@ func (m *APDUSimpleAck) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func APDUSimpleAckParse(readBuffer utils.ReadBuffer) (*APDU, error) {
+func APDUSimpleAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	if pullErr := readBuffer.PullContext("APDUSimpleAck"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
index 28aec9c..6a2909c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
@@ -224,31 +224,31 @@ func BACnetComplexTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 	var typeSwitchError error
 	switch {
 	case dataType == BACnetDataType_NULL: // BACnetComplexTagNull
-		_parent, typeSwitchError = BACnetComplexTagNullParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagNullParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_BOOLEAN: // BACnetComplexTagBoolean
-		_parent, typeSwitchError = BACnetComplexTagBooleanParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagBooleanParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_UNSIGNED_INTEGER: // BACnetComplexTagUnsignedInteger
-		_parent, typeSwitchError = BACnetComplexTagUnsignedIntegerParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagUnsignedIntegerParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_SIGNED_INTEGER: // BACnetComplexTagSignedInteger
-		_parent, typeSwitchError = BACnetComplexTagSignedIntegerParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagSignedIntegerParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_REAL: // BACnetComplexTagReal
-		_parent, typeSwitchError = BACnetComplexTagRealParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagRealParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_DOUBLE: // BACnetComplexTagDouble
-		_parent, typeSwitchError = BACnetComplexTagDoubleParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagDoubleParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_OCTET_STRING: // BACnetComplexTagOctetString
-		_parent, typeSwitchError = BACnetComplexTagOctetStringParse(readBuffer, actualLength)
+		_parent, typeSwitchError = BACnetComplexTagOctetStringParse(readBuffer, tagNumberArgument, dataType, actualLength)
 	case dataType == BACnetDataType_CHARACTER_STRING: // BACnetComplexTagCharacterString
-		_parent, typeSwitchError = BACnetComplexTagCharacterStringParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagCharacterStringParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_BIT_STRING: // BACnetComplexTagBitString
-		_parent, typeSwitchError = BACnetComplexTagBitStringParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagBitStringParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_ENUMERATED: // BACnetComplexTagEnumerated
-		_parent, typeSwitchError = BACnetComplexTagEnumeratedParse(readBuffer, lengthValueType, *extLength)
+		_parent, typeSwitchError = BACnetComplexTagEnumeratedParse(readBuffer, tagNumberArgument, dataType, lengthValueType, *extLength)
 	case dataType == BACnetDataType_DATE: // BACnetComplexTagDate
-		_parent, typeSwitchError = BACnetComplexTagDateParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagDateParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_TIME: // BACnetComplexTagTime
-		_parent, typeSwitchError = BACnetComplexTagTimeParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagTimeParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_BACNET_OBJECT_IDENTIFIER: // BACnetComplexTagObjectIdentifier
-		_parent, typeSwitchError = BACnetComplexTagObjectIdentifierParse(readBuffer)
+		_parent, typeSwitchError = BACnetComplexTagObjectIdentifierParse(readBuffer, tagNumberArgument, dataType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBitString.go
index 4535d38..fc129e5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBitString.go
@@ -111,7 +111,7 @@ func (m *BACnetComplexTagBitString) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagBitStringParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagBitStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagBitString"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBoolean.go
index 5bd58c6..44175eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagBoolean.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagBoolean) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagBooleanParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagBoolean"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
index 43dea18..37689dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagCharacterString) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagCharacterStringParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagCharacterString"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDate.go
index 5fa8b95..300d979 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDate.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagDate) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagDateParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagDateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagDate"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDouble.go
index 70186e3..b20d70f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagDouble.go
@@ -104,7 +104,7 @@ func (m *BACnetComplexTagDouble) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagDoubleParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagDoubleParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagDouble"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagEnumerated.go
index 4e8fb2a..47230e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagEnumerated.go
@@ -106,7 +106,7 @@ func (m *BACnetComplexTagEnumerated) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagEnumeratedParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagEnumerated"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagNull.go
index f6f78b4..eae619c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagNull.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagNull) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagNullParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagNullParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagNull"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
index 9372efe..4a9643b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagObjectIdentifier) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagObjectIdentifierParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagObjectIdentifier"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
index d362886..88cb056 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
@@ -107,7 +107,7 @@ func (m *BACnetComplexTagOctetString) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagOctetStringParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetComplexTag, error) {
+func BACnetComplexTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagOctetString"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagReal.go
index 6b4f92d..1f89ceb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagReal.go
@@ -104,7 +104,7 @@ func (m *BACnetComplexTagReal) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagRealParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagRealParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagReal"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagSignedInteger.go
index 7cd2cd9..39255c4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagSignedInteger.go
@@ -106,7 +106,7 @@ func (m *BACnetComplexTagSignedInteger) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagSignedIntegerParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagSignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagSignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagTime.go
index 24e68f1..07df848 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagTime.go
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagTime) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagTimeParse(readBuffer utils.ReadBuffer) (*BACnetComplexTag, error) {
+func BACnetComplexTagTimeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagTime"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagUnsignedInteger.go
index d54a05d..2fd80e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagUnsignedInteger.go
@@ -106,7 +106,7 @@ func (m *BACnetComplexTagUnsignedInteger) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetComplexTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
+func BACnetComplexTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, lengthValueType uint8, extLength uint8) (*BACnetComplexTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetComplexTagUnsignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index a5b770a..7857ae5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -108,67 +108,67 @@ func BACnetConfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint16)
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x00: // BACnetConfirmedServiceRequestAcknowledgeAlarm
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer, len)
 	case serviceChoice == 0x01: // BACnetConfirmedServiceRequestConfirmedCOVNotification
 		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer, len)
 	case serviceChoice == 0x02: // BACnetConfirmedServiceRequestConfirmedEventNotification
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer, len)
 	case serviceChoice == 0x04: // BACnetConfirmedServiceRequestGetEnrollmentSummary
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer, len)
 	case serviceChoice == 0x05: // BACnetConfirmedServiceRequestSubscribeCOV
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer, len)
 	case serviceChoice == 0x06: // BACnetConfirmedServiceRequestAtomicReadFile
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer, len)
 	case serviceChoice == 0x07: // BACnetConfirmedServiceRequestAtomicWriteFile
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer, len)
 	case serviceChoice == 0x08: // BACnetConfirmedServiceRequestAddListElement
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAddListElementParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestAddListElementParse(readBuffer, len)
 	case serviceChoice == 0x09: // BACnetConfirmedServiceRequestRemoveListElement
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer, len)
 	case serviceChoice == 0x0A: // BACnetConfirmedServiceRequestCreateObject
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestCreateObjectParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestCreateObjectParse(readBuffer, len)
 	case serviceChoice == 0x0B: // BACnetConfirmedServiceRequestDeleteObject
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer, len)
 	case serviceChoice == 0x0C: // BACnetConfirmedServiceRequestReadProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyParse(readBuffer, len)
 	case serviceChoice == 0x0E: // BACnetConfirmedServiceRequestReadPropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x0F: // BACnetConfirmedServiceRequestWriteProperty
 		_parent, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyParse(readBuffer, len)
 	case serviceChoice == 0x10: // BACnetConfirmedServiceRequestWritePropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x11: // BACnetConfirmedServiceRequestDeviceCommunicationControl
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer, len)
 	case serviceChoice == 0x12: // BACnetConfirmedServiceRequestConfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer, len)
 	case serviceChoice == 0x13: // BACnetConfirmedServiceRequestConfirmedTextMessage
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer, len)
 	case serviceChoice == 0x14: // BACnetConfirmedServiceRequestReinitializeDevice
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer, len)
 	case serviceChoice == 0x15: // BACnetConfirmedServiceRequestVTOpen
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTOpenParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTOpenParse(readBuffer, len)
 	case serviceChoice == 0x16: // BACnetConfirmedServiceRequestVTClose
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTCloseParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTCloseParse(readBuffer, len)
 	case serviceChoice == 0x17: // BACnetConfirmedServiceRequestVTData
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTDataParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTDataParse(readBuffer, len)
 	case serviceChoice == 0x18: // BACnetConfirmedServiceRequestRemovedAuthenticate
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer, len)
 	case serviceChoice == 0x19: // BACnetConfirmedServiceRequestRemovedRequestKey
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer, len)
 	case serviceChoice == 0x0D: // BACnetConfirmedServiceRequestRemovedReadPropertyConditional
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer, len)
 	case serviceChoice == 0x1A: // BACnetConfirmedServiceRequestReadRange
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(readBuffer, len)
 	case serviceChoice == 0x1B: // BACnetConfirmedServiceRequestLifeSafetyOperation
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer, len)
 	case serviceChoice == 0x1C: // BACnetConfirmedServiceRequestSubscribeCOVProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer, len)
 	case serviceChoice == 0x1D: // BACnetConfirmedServiceRequestGetEventInformation
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer, len)
 	case serviceChoice == 0x1E: // BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x1F: // BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer)
+		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index ba15b3f..4e66715 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAcknowledgeAlarm"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index bccd5ea..f7b22b0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestAddListElement) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAddListElementParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAddListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAddListElement"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index 5bfac4f..60ce456 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFile) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicReadFile"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index 911736f..149f27a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestAtomicWriteFile) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicWriteFile"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index da1451e..4e770b2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) LengthIn
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index 23c194d..8aee294 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) LengthInBytes(
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedEventNotification"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index f53a305..4b63f04 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) LengthInBytes()
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index 6ea3d8e..b388b99 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) LengthInBytes() uint
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedTextMessage"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index c7362bd..3d27b21 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestCreateObject) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestCreateObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestCreateObject"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index 63ff343..de7f028 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestDeleteObject) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestDeleteObject"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index 57ebd35..2f9af1a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) LengthInBytes(
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestDeviceCommunicationControl"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 4a12338..0ec6dd3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) LengthInBytes() uint
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestGetEnrollmentSummary"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index 4794422..6d62cd9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestGetEventInformation) LengthInBytes() uint1
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestGetEventInformation"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index c294f78..13fa3cc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) LengthInBytes() uint1
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestLifeSafetyOperation"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index cd13e6b..3164a7d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -126,7 +126,7 @@ func (m *BACnetConfirmedServiceRequestReadProperty) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadProperty"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index 2294fe8..e53a0f3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) LengthInBytes() uint
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index c48dfb4..9bfbde4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestReadRange) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadRangeParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadRange"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 75ef4b2..a92da26 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestReinitializeDevice) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReinitializeDevice"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index e50285d..9051642 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestRemoveListElement) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemoveListElement"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index 829b9f1..7092573 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) LengthInBytes() uint1
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedAuthenticate"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 6d908e8..8b5184c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) LengthInBy
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedReadPropertyConditional"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index 34270b1..33250e2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestRemovedRequestKey) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedRequestKey"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 6201184..198e636 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -148,7 +148,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOV"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 49b62b0..e926f90 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) LengthInBytes() uint
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index e02a97d..4885191 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) LengthInByte
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index da7757e..3b2d119 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestVTClose) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTCloseParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTCloseParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTClose"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index 1dc7f37..bb2ac2c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestVTData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTDataParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTDataParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTData"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index 227162d..172d303 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestVTOpen) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTOpenParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTOpen"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index 60c8c7c..f3c0a5e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -92,7 +92,7 @@ func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) LengthInBytes() uin
 	return m.LengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestWritePropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 1b59982..ba306dc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -108,29 +108,29 @@ func BACnetUnconfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint1
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x00: // BACnetUnconfirmedServiceRequestIAm
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIAmParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIAmParse(readBuffer, len)
 	case serviceChoice == 0x01: // BACnetUnconfirmedServiceRequestIHave
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIHaveParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIHaveParse(readBuffer, len)
 	case serviceChoice == 0x02: // BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer, len)
 	case serviceChoice == 0x03: // BACnetUnconfirmedServiceRequestUnconfirmedEventNotification
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer, len)
 	case serviceChoice == 0x04: // BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer
 		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer, len)
 	case serviceChoice == 0x05: // BACnetUnconfirmedServiceRequestUnconfirmedTextMessage
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer, len)
 	case serviceChoice == 0x06: // BACnetUnconfirmedServiceRequestTimeSynchronization
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer, len)
 	case serviceChoice == 0x07: // BACnetUnconfirmedServiceRequestWhoHas
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer, len)
 	case serviceChoice == 0x08: // BACnetUnconfirmedServiceRequestWhoIs
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer, len)
 	case serviceChoice == 0x09: // BACnetUnconfirmedServiceRequestUTCTimeSynchronization
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer, len)
 	case serviceChoice == 0x0A: // BACnetUnconfirmedServiceRequestWriteGroup
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer, len)
 	case serviceChoice == 0x0B: // BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer)
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index 8cc7c7b..9c8d4e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -144,7 +144,7 @@ func (m *BACnetUnconfirmedServiceRequestIAm) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestIAmParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestIAmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestIAm"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index 0f1c949..0b043a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestIHave) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestIHave"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index 93fb992..21c6508 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) LengthInBytes() uin
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestTimeSynchronization"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index 68a7113..7ae950f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) LengthInBytes()
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUTCTimeSynchronization"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index 5788978..2f038a8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) LengthInByte
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index c11142d..a5bebd1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) Leng
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index 3811987..3f6d9a9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) LengthInBy
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedEventNotification"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index b945070..d335f34 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) LengthInBytes()
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedTextMessage"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index a27720a..082e67c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -121,7 +121,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWhoHas"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 92debc4..00a6caf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -128,7 +128,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWhoIs"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index b66f224..4b831e0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -92,7 +92,7 @@ func (m *BACnetUnconfirmedServiceRequestWriteGroup) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer utils.ReadBuffer) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWriteGroup"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/eip/Reader.go b/plc4go/internal/plc4go/eip/Reader.go
index da21710..35a54cc 100644
--- a/plc4go/internal/plc4go/eip/Reader.go
+++ b/plc4go/internal/plc4go/eip/Reader.go
@@ -284,7 +284,7 @@ func getRequestSize(tag string) int8 {
 	return requestPathSize
 }
 
-func toAnsi(tag string) ([]int8, error) {
+func toAnsi(tag string) ([]byte, error) {
 	arrayIndex := byte(0)
 	isArray := false
 	isStruct := false
@@ -357,12 +357,12 @@ func toAnsi(tag string) ([]int8, error) {
 		if err != nil {
 			return nil, err
 		}
-		err = buffer.WriteByteArray("", utils.Int8ArrayToByteArray(ansi))
+		err = buffer.WriteByteArray("", ansi)
 		if err != nil {
 			return nil, err
 		}
 	}
-	return utils.Uint8ArrayToInt8Array(buffer.GetBytes()), nil
+	return buffer.GetBytes(), nil
 }
 
 func (m *Reader) ToPlc4xReadResponse(response *readWriteModel.CipService, readRequest model.PlcReadRequest) (model.PlcReadResponse, error) {
@@ -376,7 +376,7 @@ func (m *Reader) ToPlc4xReadResponse(response *readWriteModel.CipService, readRe
 		code := decodeResponseCode(cipReadResponse.Status)
 		var plcValue values.PlcValue
 		_type := cipReadResponse.DataType
-		data := utils.NewLittleEndianReadBufferByteBased(utils.Int8ArrayToByteArray(cipReadResponse.Data))
+		data := utils.NewLittleEndianReadBufferByteBased(cipReadResponse.Data)
 		if code == model.PlcResponseCode_OK {
 			var err error
 			plcValue, err = parsePlcValue(field, data, _type)
@@ -390,7 +390,7 @@ func (m *Reader) ToPlc4xReadResponse(response *readWriteModel.CipService, readRe
 		multipleServiceResponse := response.Child.(*readWriteModel.MultipleServiceResponse)
 		nb := multipleServiceResponse.ServiceNb
 		arr := make([]*readWriteModel.CipService, nb)
-		read := utils.NewLittleEndianReadBufferByteBased(utils.Int8ArrayToByteArray(multipleServiceResponse.ServicesData))
+		read := utils.NewLittleEndianReadBufferByteBased(multipleServiceResponse.ServicesData)
 		total := read.GetTotalBytes()
 		for i := uint16(0); i < nb; i++ {
 			length := uint16(0)
@@ -413,7 +413,7 @@ func (m *Reader) ToPlc4xReadResponse(response *readWriteModel.CipService, readRe
 			if cipReadResponse, ok := services.Services[i].Child.(*readWriteModel.CipReadResponse); ok {
 				code := decodeResponseCode(cipReadResponse.Status)
 				_type := cipReadResponse.DataType
-				data := utils.NewLittleEndianReadBufferByteBased(utils.Int8ArrayToByteArray(cipReadResponse.Data))
+				data := utils.NewLittleEndianReadBufferByteBased(cipReadResponse.Data)
 				var plcValue values.PlcValue
 				if code == model.PlcResponseCode_OK {
 					var err error
diff --git a/plc4go/internal/plc4go/eip/Writer.go b/plc4go/internal/plc4go/eip/Writer.go
index fddd3b5..f6da141 100644
--- a/plc4go/internal/plc4go/eip/Writer.go
+++ b/plc4go/internal/plc4go/eip/Writer.go
@@ -277,7 +277,7 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
 	return result
 }
 
-func encodeValue(value values.PlcValue, _type readWriteModel.CIPDataTypeCode, elements uint16) ([]int8, error) {
+func encodeValue(value values.PlcValue, _type readWriteModel.CIPDataTypeCode, elements uint16) ([]byte, error) {
 	buffer := utils.NewLittleEndianWriteBufferByteBased()
 	switch _type {
 	case readWriteModel.CIPDataTypeCode_SINT:
@@ -304,7 +304,7 @@ func encodeValue(value values.PlcValue, _type readWriteModel.CIPDataTypeCode, el
 		// TODO: what is the default type? write nothing?
 		//panic("unmapped type: " + strconv.Itoa(int(_type)))
 	}
-	return utils.ByteArrayToInt8Array(buffer.GetBytes()), nil
+	return buffer.GetBytes(), nil
 }
 
 func (m Writer) ToPlc4xWriteResponse(response *readWriteModel.CipService, writeRequest model.PlcWriteRequest) (model.PlcWriteResponse, error) {
@@ -319,7 +319,7 @@ func (m Writer) ToPlc4xWriteResponse(response *readWriteModel.CipService, writeR
 		multipleServiceResponse := response.Child.(*readWriteModel.MultipleServiceResponse)
 		nb := multipleServiceResponse.ServiceNb
 		arr := make([]*readWriteModel.CipService, nb)
-		read := utils.NewLittleEndianReadBufferByteBased(utils.Int8ArrayToByteArray(multipleServiceResponse.ServicesData))
+		read := utils.NewLittleEndianReadBufferByteBased(multipleServiceResponse.ServicesData)
 		total := read.GetTotalBytes()
 		for i := uint16(0); i < nb; i++ {
 			length := uint16(0)
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
index aec519d..8846e4e 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
@@ -110,7 +110,7 @@ func (m *CipReadRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CipReadRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
+func CipReadRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
 	if pullErr := readBuffer.PullContext("CipReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,8 +121,8 @@ func CipReadRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
 		return nil, errors.Wrap(_requestPathSizeErr, "Error parsing 'requestPathSize' field")
 	}
 	// Byte Array field (tag)
-	numberOfBytes := int(uint16(uint16(requestPathSize) * uint16(uint16(2))))
-	tag, _readArrayErr := readBuffer.ReadByteArray("tag", numberOfBytes)
+	numberOfBytestag := int(uint16(uint16(requestPathSize) * uint16(uint16(2))))
+	tag, _readArrayErr := readBuffer.ReadByteArray("tag", numberOfBytestag)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'tag' field")
 	}
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
index 1b9ab4e..568eb77 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
@@ -162,8 +162,8 @@ func CipReadResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipS
 		return nil, closeErr
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(serviceLen) - uint16(uint16(6)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(serviceLen) - uint16(uint16(6)))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
index 12e3b14..0138830 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
@@ -108,19 +108,19 @@ func CipServiceParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipServic
 	var typeSwitchError error
 	switch {
 	case service == 0x4C: // CipReadRequest
-		_parent, typeSwitchError = CipReadRequestParse(readBuffer)
+		_parent, typeSwitchError = CipReadRequestParse(readBuffer, serviceLen)
 	case service == 0xCC: // CipReadResponse
 		_parent, typeSwitchError = CipReadResponseParse(readBuffer, serviceLen)
 	case service == 0x4D: // CipWriteRequest
-		_parent, typeSwitchError = CipWriteRequestParse(readBuffer)
+		_parent, typeSwitchError = CipWriteRequestParse(readBuffer, serviceLen)
 	case service == 0xCD: // CipWriteResponse
-		_parent, typeSwitchError = CipWriteResponseParse(readBuffer)
+		_parent, typeSwitchError = CipWriteResponseParse(readBuffer, serviceLen)
 	case service == 0x0A: // MultipleServiceRequest
 		_parent, typeSwitchError = MultipleServiceRequestParse(readBuffer, serviceLen)
 	case service == 0x8A: // MultipleServiceResponse
 		_parent, typeSwitchError = MultipleServiceResponseParse(readBuffer, serviceLen)
 	case service == 0x52: // CipUnconnectedRequest
-		_parent, typeSwitchError = CipUnconnectedRequestParse(readBuffer)
+		_parent, typeSwitchError = CipUnconnectedRequestParse(readBuffer, serviceLen)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
index c113aa8..e795336 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
@@ -137,7 +137,7 @@ func (m *CipUnconnectedRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CipUnconnectedRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
+func CipUnconnectedRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
 	if pullErr := readBuffer.PullContext("CipUnconnectedRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
index ae71b09..0db92c3 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
@@ -122,7 +122,7 @@ func (m *CipWriteRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CipWriteRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
+func CipWriteRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
 	if pullErr := readBuffer.PullContext("CipWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -133,8 +133,8 @@ func CipWriteRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
 		return nil, errors.Wrap(_requestPathSizeErr, "Error parsing 'requestPathSize' field")
 	}
 	// Byte Array field (tag)
-	numberOfBytes := int(uint16(requestPathSize) * uint16(uint16(2)))
-	tag, _readArrayErr := readBuffer.ReadByteArray("tag", numberOfBytes)
+	numberOfBytestag := int(uint16(requestPathSize) * uint16(uint16(2)))
+	tag, _readArrayErr := readBuffer.ReadByteArray("tag", numberOfBytestag)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'tag' field")
 	}
@@ -157,8 +157,8 @@ func CipWriteRequestParse(readBuffer utils.ReadBuffer) (*CipService, error) {
 		return nil, errors.Wrap(_elementNbErr, "Error parsing 'elementNb' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(dataType.Size()) * uint16(elementNb))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(dataType.Size()) * uint16(elementNb))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
index 68e5db8..5615e60 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
@@ -107,7 +107,7 @@ func (m *CipWriteResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CipWriteResponseParse(readBuffer utils.ReadBuffer) (*CipService, error) {
+func CipWriteResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
 	if pullErr := readBuffer.PullContext("CipWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
index 1bc193b..6e46017 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
@@ -180,8 +180,8 @@ func MultipleServiceResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16
 		return nil, closeErr
 	}
 	// Byte Array field (servicesData)
-	numberOfBytes := int(uint16(uint16(serviceLen)-uint16(uint16(6))) - uint16(uint16(uint16(uint16(2))*uint16(serviceNb))))
-	servicesData, _readArrayErr := readBuffer.ReadByteArray("servicesData", numberOfBytes)
+	numberOfBytesservicesData := int(uint16(uint16(serviceLen)-uint16(uint16(6))) - uint16(uint16(uint16(uint16(2))*uint16(serviceNb))))
+	servicesData, _readArrayErr := readBuffer.ReadByteArray("servicesData", numberOfBytesservicesData)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'servicesData' field")
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
index f2ba3d2..bb35b9a 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
@@ -110,13 +110,13 @@ func FirmataCommandParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCo
 	case commandCode == 0x0: // FirmataCommandSysex
 		_parent, typeSwitchError = FirmataCommandSysexParse(readBuffer, response)
 	case commandCode == 0x4: // FirmataCommandSetPinMode
-		_parent, typeSwitchError = FirmataCommandSetPinModeParse(readBuffer)
+		_parent, typeSwitchError = FirmataCommandSetPinModeParse(readBuffer, response)
 	case commandCode == 0x5: // FirmataCommandSetDigitalPinValue
-		_parent, typeSwitchError = FirmataCommandSetDigitalPinValueParse(readBuffer)
+		_parent, typeSwitchError = FirmataCommandSetDigitalPinValueParse(readBuffer, response)
 	case commandCode == 0x9: // FirmataCommandProtocolVersion
-		_parent, typeSwitchError = FirmataCommandProtocolVersionParse(readBuffer)
+		_parent, typeSwitchError = FirmataCommandProtocolVersionParse(readBuffer, response)
 	case commandCode == 0xF: // FirmataCommandSystemReset
-		_parent, typeSwitchError = FirmataCommandSystemResetParse(readBuffer)
+		_parent, typeSwitchError = FirmataCommandSystemResetParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
index 7ea4574..30a92ea 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
@@ -103,7 +103,7 @@ func (m *FirmataCommandProtocolVersion) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataCommandProtocolVersionParse(readBuffer utils.ReadBuffer) (*FirmataCommand, error) {
+func FirmataCommandProtocolVersionParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandProtocolVersion"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
index ed73e7a..cc1882d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
@@ -107,7 +107,7 @@ func (m *FirmataCommandSetDigitalPinValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataCommandSetDigitalPinValueParse(readBuffer utils.ReadBuffer) (*FirmataCommand, error) {
+func FirmataCommandSetDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSetDigitalPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
index 512fb36..0353e87 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
@@ -103,7 +103,7 @@ func (m *FirmataCommandSetPinMode) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataCommandSetPinModeParse(readBuffer utils.ReadBuffer) (*FirmataCommand, error) {
+func FirmataCommandSetPinModeParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSetPinMode"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
index 1b0110f..45f7b28 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
@@ -92,7 +92,7 @@ func (m *FirmataCommandSystemReset) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataCommandSystemResetParse(readBuffer utils.ReadBuffer) (*FirmataCommand, error) {
+func FirmataCommandSystemResetParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSystemReset"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
index 538b14d..4bafe55 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
@@ -108,13 +108,13 @@ func FirmataMessageParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMe
 	var typeSwitchError error
 	switch {
 	case messageType == 0xE: // FirmataMessageAnalogIO
-		_parent, typeSwitchError = FirmataMessageAnalogIOParse(readBuffer)
+		_parent, typeSwitchError = FirmataMessageAnalogIOParse(readBuffer, response)
 	case messageType == 0x9: // FirmataMessageDigitalIO
-		_parent, typeSwitchError = FirmataMessageDigitalIOParse(readBuffer)
+		_parent, typeSwitchError = FirmataMessageDigitalIOParse(readBuffer, response)
 	case messageType == 0xC: // FirmataMessageSubscribeAnalogPinValue
-		_parent, typeSwitchError = FirmataMessageSubscribeAnalogPinValueParse(readBuffer)
+		_parent, typeSwitchError = FirmataMessageSubscribeAnalogPinValueParse(readBuffer, response)
 	case messageType == 0xD: // FirmataMessageSubscribeDigitalPinValue
-		_parent, typeSwitchError = FirmataMessageSubscribeDigitalPinValueParse(readBuffer)
+		_parent, typeSwitchError = FirmataMessageSubscribeDigitalPinValueParse(readBuffer, response)
 	case messageType == 0xF: // FirmataMessageCommand
 		_parent, typeSwitchError = FirmataMessageCommandParse(readBuffer, response)
 	default:
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
index 09ae2ce..88be4ae 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
@@ -105,7 +105,7 @@ func (m *FirmataMessageAnalogIO) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataMessageAnalogIOParse(readBuffer utils.ReadBuffer) (*FirmataMessage, error) {
+func FirmataMessageAnalogIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageAnalogIO"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
index 109da30..18c4095 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
@@ -105,7 +105,7 @@ func (m *FirmataMessageDigitalIO) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataMessageDigitalIOParse(readBuffer utils.ReadBuffer) (*FirmataMessage, error) {
+func FirmataMessageDigitalIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageDigitalIO"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
index 802f9ae..dd58ba0 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
@@ -107,7 +107,7 @@ func (m *FirmataMessageSubscribeAnalogPinValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataMessageSubscribeAnalogPinValueParse(readBuffer utils.ReadBuffer) (*FirmataMessage, error) {
+func FirmataMessageSubscribeAnalogPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageSubscribeAnalogPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
index 075ee92..b312d9f 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
@@ -107,7 +107,7 @@ func (m *FirmataMessageSubscribeDigitalPinValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func FirmataMessageSubscribeDigitalPinValueParse(readBuffer utils.ReadBuffer) (*FirmataMessage, error) {
+func FirmataMessageSubscribeDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageSubscribeDigitalPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataStaticHelper.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataStaticHelper.go
index d49d472..9117ba9 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataStaticHelper.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataStaticHelper.go
@@ -35,11 +35,11 @@ func FirmataUtilsParseSysexString(io utils.ReadBuffer) int8 {
 	return aByte
 }
 
-func FirmataUtilsSerializeSysexString(io utils.WriteBuffer, data int8) {
-	_ = io.WriteByte("", byte(data))
+func FirmataUtilsSerializeSysexString(io utils.WriteBuffer, data byte) {
+	_ = io.WriteByte("", data)
 	_ = io.WriteByte("", 0x00)
 }
 
-func FirmataUtilsLengthSysexString(data []int8) uint16 {
+func FirmataUtilsLengthSysexString(data []byte) uint16 {
 	return uint16(len(data) * 2)
 }
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
index 560894f..9f6d0e8 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
@@ -109,35 +109,35 @@ func SysexCommandParse(readBuffer utils.ReadBuffer, response bool) (*SysexComman
 	var typeSwitchError error
 	switch {
 	case commandType == 0x00: // SysexCommandExendedId
-		_parent, typeSwitchError = SysexCommandExendedIdParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandExendedIdParse(readBuffer, response)
 	case commandType == 0x69 && response == false: // SysexCommandAnalogMappingQueryRequest
-		_parent, typeSwitchError = SysexCommandAnalogMappingQueryRequestParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandAnalogMappingQueryRequestParse(readBuffer, response)
 	case commandType == 0x69 && response == true: // SysexCommandAnalogMappingQueryResponse
-		_parent, typeSwitchError = SysexCommandAnalogMappingQueryResponseParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandAnalogMappingQueryResponseParse(readBuffer, response)
 	case commandType == 0x6A: // SysexCommandAnalogMappingResponse
-		_parent, typeSwitchError = SysexCommandAnalogMappingResponseParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandAnalogMappingResponseParse(readBuffer, response)
 	case commandType == 0x6B: // SysexCommandCapabilityQuery
-		_parent, typeSwitchError = SysexCommandCapabilityQueryParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandCapabilityQueryParse(readBuffer, response)
 	case commandType == 0x6C: // SysexCommandCapabilityResponse
-		_parent, typeSwitchError = SysexCommandCapabilityResponseParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandCapabilityResponseParse(readBuffer, response)
 	case commandType == 0x6D: // SysexCommandPinStateQuery
-		_parent, typeSwitchError = SysexCommandPinStateQueryParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandPinStateQueryParse(readBuffer, response)
 	case commandType == 0x6E: // SysexCommandPinStateResponse
-		_parent, typeSwitchError = SysexCommandPinStateResponseParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandPinStateResponseParse(readBuffer, response)
 	case commandType == 0x6F: // SysexCommandExtendedAnalog
-		_parent, typeSwitchError = SysexCommandExtendedAnalogParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandExtendedAnalogParse(readBuffer, response)
 	case commandType == 0x71: // SysexCommandStringData
-		_parent, typeSwitchError = SysexCommandStringDataParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandStringDataParse(readBuffer, response)
 	case commandType == 0x79 && response == false: // SysexCommandReportFirmwareRequest
-		_parent, typeSwitchError = SysexCommandReportFirmwareRequestParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandReportFirmwareRequestParse(readBuffer, response)
 	case commandType == 0x79 && response == true: // SysexCommandReportFirmwareResponse
-		_parent, typeSwitchError = SysexCommandReportFirmwareResponseParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandReportFirmwareResponseParse(readBuffer, response)
 	case commandType == 0x7A: // SysexCommandSamplingInterval
-		_parent, typeSwitchError = SysexCommandSamplingIntervalParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandSamplingIntervalParse(readBuffer, response)
 	case commandType == 0x7E: // SysexCommandSysexNonRealtime
-		_parent, typeSwitchError = SysexCommandSysexNonRealtimeParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandSysexNonRealtimeParse(readBuffer, response)
 	case commandType == 0x7F: // SysexCommandSysexRealtime
-		_parent, typeSwitchError = SysexCommandSysexRealtimeParse(readBuffer)
+		_parent, typeSwitchError = SysexCommandSysexRealtimeParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
index a184556..e9d468a 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
@@ -96,7 +96,7 @@ func (m *SysexCommandAnalogMappingQueryRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingQueryRequestParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandAnalogMappingQueryRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingQueryRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
index 62a38f1..0a0ed2d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
@@ -102,7 +102,7 @@ func (m *SysexCommandAnalogMappingQueryResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingQueryResponseParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandAnalogMappingQueryResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingQueryResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
index 4bbd164..42635be 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
@@ -96,7 +96,7 @@ func (m *SysexCommandAnalogMappingResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingResponseParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandAnalogMappingResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
index 638a251..9fca5b2 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
@@ -96,7 +96,7 @@ func (m *SysexCommandCapabilityQuery) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandCapabilityQueryParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandCapabilityQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandCapabilityQuery"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
index d6707d6..b6c14a4 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
@@ -96,7 +96,7 @@ func (m *SysexCommandCapabilityResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandCapabilityResponseParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandCapabilityResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandCapabilityResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExendedId.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExendedId.go
index a755cd1..93fee4a 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExendedId.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExendedId.go
@@ -104,7 +104,7 @@ func (m *SysexCommandExendedId) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandExendedIdParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandExendedIdParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandExendedId"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
index 684c060..cc5bcf7 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
@@ -96,7 +96,7 @@ func (m *SysexCommandExtendedAnalog) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandExtendedAnalogParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandExtendedAnalogParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandExtendedAnalog"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
index c699f3a..aacbdcc 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
@@ -102,7 +102,7 @@ func (m *SysexCommandPinStateQuery) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandPinStateQueryParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandPinStateQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandPinStateQuery"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
index 70ac374..51b61b0 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
@@ -112,7 +112,7 @@ func (m *SysexCommandPinStateResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandPinStateResponseParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandPinStateResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandPinStateResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
index 6c183e7..70e6d0c 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
@@ -96,7 +96,7 @@ func (m *SysexCommandReportFirmwareRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandReportFirmwareRequestParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandReportFirmwareRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandReportFirmwareRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
index b6d9177..1e5bd36 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
@@ -113,7 +113,7 @@ func (m *SysexCommandReportFirmwareResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandReportFirmwareResponseParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandReportFirmwareResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandReportFirmwareResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
index 4fdba4b..899ccee 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
@@ -96,7 +96,7 @@ func (m *SysexCommandSamplingInterval) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandSamplingIntervalParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandSamplingIntervalParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSamplingInterval"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
index 08c2fbf..3dc897c 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
@@ -96,7 +96,7 @@ func (m *SysexCommandStringData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandStringDataParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandStringDataParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandStringData"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
index d0f9e98..e971eab 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
@@ -96,7 +96,7 @@ func (m *SysexCommandSysexNonRealtime) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandSysexNonRealtimeParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandSysexNonRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSysexNonRealtime"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
index 07e6b79..bd653c6 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
@@ -96,7 +96,7 @@ func (m *SysexCommandSysexRealtime) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func SysexCommandSysexRealtimeParse(readBuffer utils.ReadBuffer) (*SysexCommand, error) {
+func SysexCommandSysexRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSysexRealtime"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
index 85d4cac..289021e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
@@ -128,7 +128,7 @@ func ApduParse(readBuffer utils.ReadBuffer, dataLength uint8) (*Apdu, error) {
 	var typeSwitchError error
 	switch {
 	case control == 1: // ApduControlContainer
-		_parent, typeSwitchError = ApduControlContainerParse(readBuffer)
+		_parent, typeSwitchError = ApduControlContainerParse(readBuffer, dataLength)
 	case control == 0: // ApduDataContainer
 		_parent, typeSwitchError = ApduDataContainerParse(readBuffer, dataLength)
 	default:
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
index 152ffd5..2d11e10 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
@@ -100,7 +100,7 @@ func (m *ApduControlContainer) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduControlContainerParse(readBuffer utils.ReadBuffer) (*Apdu, error) {
+func ApduControlContainerParse(readBuffer utils.ReadBuffer, dataLength uint8) (*Apdu, error) {
 	if pullErr := readBuffer.PullContext("ApduControlContainer"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
index 9ae1680..dfaebc3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
@@ -108,35 +108,35 @@ func ApduDataParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, er
 	var typeSwitchError error
 	switch {
 	case apciType == 0x0: // ApduDataGroupValueRead
-		_parent, typeSwitchError = ApduDataGroupValueReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataGroupValueReadParse(readBuffer, dataLength)
 	case apciType == 0x1: // ApduDataGroupValueResponse
 		_parent, typeSwitchError = ApduDataGroupValueResponseParse(readBuffer, dataLength)
 	case apciType == 0x2: // ApduDataGroupValueWrite
 		_parent, typeSwitchError = ApduDataGroupValueWriteParse(readBuffer, dataLength)
 	case apciType == 0x3: // ApduDataIndividualAddressWrite
-		_parent, typeSwitchError = ApduDataIndividualAddressWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataIndividualAddressWriteParse(readBuffer, dataLength)
 	case apciType == 0x4: // ApduDataIndividualAddressRead
-		_parent, typeSwitchError = ApduDataIndividualAddressReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataIndividualAddressReadParse(readBuffer, dataLength)
 	case apciType == 0x5: // ApduDataIndividualAddressResponse
-		_parent, typeSwitchError = ApduDataIndividualAddressResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataIndividualAddressResponseParse(readBuffer, dataLength)
 	case apciType == 0x6: // ApduDataAdcRead
-		_parent, typeSwitchError = ApduDataAdcReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataAdcReadParse(readBuffer, dataLength)
 	case apciType == 0x7: // ApduDataAdcResponse
-		_parent, typeSwitchError = ApduDataAdcResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataAdcResponseParse(readBuffer, dataLength)
 	case apciType == 0x8: // ApduDataMemoryRead
-		_parent, typeSwitchError = ApduDataMemoryReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataMemoryReadParse(readBuffer, dataLength)
 	case apciType == 0x9: // ApduDataMemoryResponse
-		_parent, typeSwitchError = ApduDataMemoryResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataMemoryResponseParse(readBuffer, dataLength)
 	case apciType == 0xA: // ApduDataMemoryWrite
-		_parent, typeSwitchError = ApduDataMemoryWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataMemoryWriteParse(readBuffer, dataLength)
 	case apciType == 0xB: // ApduDataUserMessage
-		_parent, typeSwitchError = ApduDataUserMessageParse(readBuffer)
+		_parent, typeSwitchError = ApduDataUserMessageParse(readBuffer, dataLength)
 	case apciType == 0xC: // ApduDataDeviceDescriptorRead
-		_parent, typeSwitchError = ApduDataDeviceDescriptorReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataDeviceDescriptorReadParse(readBuffer, dataLength)
 	case apciType == 0xD: // ApduDataDeviceDescriptorResponse
 		_parent, typeSwitchError = ApduDataDeviceDescriptorResponseParse(readBuffer, dataLength)
 	case apciType == 0xE: // ApduDataRestart
-		_parent, typeSwitchError = ApduDataRestartParse(readBuffer)
+		_parent, typeSwitchError = ApduDataRestartParse(readBuffer, dataLength)
 	case apciType == 0xF: // ApduDataOther
 		_parent, typeSwitchError = ApduDataOtherParse(readBuffer, dataLength)
 	default:
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
index c54072c..4480287 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataAdcRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataAdcReadParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataAdcReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataAdcRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
index 362d4f4..b3bc55d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataAdcResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataAdcResponseParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataAdcResponseParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataAdcResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
index 21ff042..b0cde45 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
@@ -98,7 +98,7 @@ func (m *ApduDataDeviceDescriptorRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataDeviceDescriptorReadParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataDeviceDescriptorReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataDeviceDescriptorRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
index ae5910d..201d1e4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
@@ -116,8 +116,8 @@ func ApduDataDeviceDescriptorResponseParse(readBuffer utils.ReadBuffer, dataLeng
 		return nil, errors.Wrap(_descriptorTypeErr, "Error parsing 'descriptorType' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
index 900f273..baaeda3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
@@ -108,87 +108,87 @@ func ApduDataExtParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt,
 	var typeSwitchError error
 	switch {
 	case extApciType == 0x00: // ApduDataExtOpenRoutingTableRequest
-		_parent, typeSwitchError = ApduDataExtOpenRoutingTableRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtOpenRoutingTableRequestParse(readBuffer, length)
 	case extApciType == 0x01: // ApduDataExtReadRoutingTableRequest
-		_parent, typeSwitchError = ApduDataExtReadRoutingTableRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRoutingTableRequestParse(readBuffer, length)
 	case extApciType == 0x02: // ApduDataExtReadRoutingTableResponse
-		_parent, typeSwitchError = ApduDataExtReadRoutingTableResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRoutingTableResponseParse(readBuffer, length)
 	case extApciType == 0x03: // ApduDataExtWriteRoutingTableRequest
-		_parent, typeSwitchError = ApduDataExtWriteRoutingTableRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtWriteRoutingTableRequestParse(readBuffer, length)
 	case extApciType == 0x08: // ApduDataExtReadRouterMemoryRequest
-		_parent, typeSwitchError = ApduDataExtReadRouterMemoryRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRouterMemoryRequestParse(readBuffer, length)
 	case extApciType == 0x09: // ApduDataExtReadRouterMemoryResponse
-		_parent, typeSwitchError = ApduDataExtReadRouterMemoryResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRouterMemoryResponseParse(readBuffer, length)
 	case extApciType == 0x0A: // ApduDataExtWriteRouterMemoryRequest
-		_parent, typeSwitchError = ApduDataExtWriteRouterMemoryRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtWriteRouterMemoryRequestParse(readBuffer, length)
 	case extApciType == 0x0D: // ApduDataExtReadRouterStatusRequest
-		_parent, typeSwitchError = ApduDataExtReadRouterStatusRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRouterStatusRequestParse(readBuffer, length)
 	case extApciType == 0x0E: // ApduDataExtReadRouterStatusResponse
-		_parent, typeSwitchError = ApduDataExtReadRouterStatusResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtReadRouterStatusResponseParse(readBuffer, length)
 	case extApciType == 0x0F: // ApduDataExtWriteRouterStatusRequest
-		_parent, typeSwitchError = ApduDataExtWriteRouterStatusRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtWriteRouterStatusRequestParse(readBuffer, length)
 	case extApciType == 0x10: // ApduDataExtMemoryBitWrite
-		_parent, typeSwitchError = ApduDataExtMemoryBitWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtMemoryBitWriteParse(readBuffer, length)
 	case extApciType == 0x11: // ApduDataExtAuthorizeRequest
-		_parent, typeSwitchError = ApduDataExtAuthorizeRequestParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtAuthorizeRequestParse(readBuffer, length)
 	case extApciType == 0x12: // ApduDataExtAuthorizeResponse
-		_parent, typeSwitchError = ApduDataExtAuthorizeResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtAuthorizeResponseParse(readBuffer, length)
 	case extApciType == 0x13: // ApduDataExtKeyWrite
-		_parent, typeSwitchError = ApduDataExtKeyWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtKeyWriteParse(readBuffer, length)
 	case extApciType == 0x14: // ApduDataExtKeyResponse
-		_parent, typeSwitchError = ApduDataExtKeyResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtKeyResponseParse(readBuffer, length)
 	case extApciType == 0x15: // ApduDataExtPropertyValueRead
-		_parent, typeSwitchError = ApduDataExtPropertyValueReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtPropertyValueReadParse(readBuffer, length)
 	case extApciType == 0x16: // ApduDataExtPropertyValueResponse
 		_parent, typeSwitchError = ApduDataExtPropertyValueResponseParse(readBuffer, length)
 	case extApciType == 0x17: // ApduDataExtPropertyValueWrite
 		_parent, typeSwitchError = ApduDataExtPropertyValueWriteParse(readBuffer, length)
 	case extApciType == 0x18: // ApduDataExtPropertyDescriptionRead
-		_parent, typeSwitchError = ApduDataExtPropertyDescriptionReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtPropertyDescriptionReadParse(readBuffer, length)
 	case extApciType == 0x19: // ApduDataExtPropertyDescriptionResponse
-		_parent, typeSwitchError = ApduDataExtPropertyDescriptionResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtPropertyDescriptionResponseParse(readBuffer, length)
 	case extApciType == 0x1A: // ApduDataExtNetworkParameterRead
-		_parent, typeSwitchError = ApduDataExtNetworkParameterReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtNetworkParameterReadParse(readBuffer, length)
 	case extApciType == 0x1B: // ApduDataExtNetworkParameterResponse
-		_parent, typeSwitchError = ApduDataExtNetworkParameterResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtNetworkParameterResponseParse(readBuffer, length)
 	case extApciType == 0x1C: // ApduDataExtIndividualAddressSerialNumberRead
-		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberReadParse(readBuffer, length)
 	case extApciType == 0x1D: // ApduDataExtIndividualAddressSerialNumberResponse
-		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberResponseParse(readBuffer, length)
 	case extApciType == 0x1E: // ApduDataExtIndividualAddressSerialNumberWrite
-		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtIndividualAddressSerialNumberWriteParse(readBuffer, length)
 	case extApciType == 0x20: // ApduDataExtDomainAddressWrite
-		_parent, typeSwitchError = ApduDataExtDomainAddressWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressWriteParse(readBuffer, length)
 	case extApciType == 0x21: // ApduDataExtDomainAddressRead
-		_parent, typeSwitchError = ApduDataExtDomainAddressReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressReadParse(readBuffer, length)
 	case extApciType == 0x22: // ApduDataExtDomainAddressResponse
-		_parent, typeSwitchError = ApduDataExtDomainAddressResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressResponseParse(readBuffer, length)
 	case extApciType == 0x23: // ApduDataExtDomainAddressSelectiveRead
-		_parent, typeSwitchError = ApduDataExtDomainAddressSelectiveReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressSelectiveReadParse(readBuffer, length)
 	case extApciType == 0x24: // ApduDataExtNetworkParameterWrite
-		_parent, typeSwitchError = ApduDataExtNetworkParameterWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtNetworkParameterWriteParse(readBuffer, length)
 	case extApciType == 0x25: // ApduDataExtLinkRead
-		_parent, typeSwitchError = ApduDataExtLinkReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtLinkReadParse(readBuffer, length)
 	case extApciType == 0x26: // ApduDataExtLinkResponse
-		_parent, typeSwitchError = ApduDataExtLinkResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtLinkResponseParse(readBuffer, length)
 	case extApciType == 0x27: // ApduDataExtLinkWrite
-		_parent, typeSwitchError = ApduDataExtLinkWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtLinkWriteParse(readBuffer, length)
 	case extApciType == 0x28: // ApduDataExtGroupPropertyValueRead
-		_parent, typeSwitchError = ApduDataExtGroupPropertyValueReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtGroupPropertyValueReadParse(readBuffer, length)
 	case extApciType == 0x29: // ApduDataExtGroupPropertyValueResponse
-		_parent, typeSwitchError = ApduDataExtGroupPropertyValueResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtGroupPropertyValueResponseParse(readBuffer, length)
 	case extApciType == 0x2A: // ApduDataExtGroupPropertyValueWrite
-		_parent, typeSwitchError = ApduDataExtGroupPropertyValueWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtGroupPropertyValueWriteParse(readBuffer, length)
 	case extApciType == 0x2B: // ApduDataExtGroupPropertyValueInfoReport
-		_parent, typeSwitchError = ApduDataExtGroupPropertyValueInfoReportParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtGroupPropertyValueInfoReportParse(readBuffer, length)
 	case extApciType == 0x2C: // ApduDataExtDomainAddressSerialNumberRead
-		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberReadParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberReadParse(readBuffer, length)
 	case extApciType == 0x2D: // ApduDataExtDomainAddressSerialNumberResponse
-		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberResponseParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberResponseParse(readBuffer, length)
 	case extApciType == 0x2E: // ApduDataExtDomainAddressSerialNumberWrite
-		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberWriteParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtDomainAddressSerialNumberWriteParse(readBuffer, length)
 	case extApciType == 0x30: // ApduDataExtFileStreamInfoReport
-		_parent, typeSwitchError = ApduDataExtFileStreamInfoReportParse(readBuffer)
+		_parent, typeSwitchError = ApduDataExtFileStreamInfoReportParse(readBuffer, length)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
index 4ff1cd5..e582323 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
@@ -105,7 +105,7 @@ func (m *ApduDataExtAuthorizeRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtAuthorizeRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtAuthorizeRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtAuthorizeRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -116,8 +116,8 @@ func ApduDataExtAuthorizeRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt
 		return nil, errors.Wrap(_levelErr, "Error parsing 'level' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(4))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(4))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
index abbdeea..72fad0a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
@@ -98,7 +98,7 @@ func (m *ApduDataExtAuthorizeResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtAuthorizeResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtAuthorizeResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtAuthorizeResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
index 282a965..b0af18d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
index cfecaed..9f08ce1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
index 045441a..60af804 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressSelectiveRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressSelectiveReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressSelectiveReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressSelectiveRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
index 90015ef..1c78325 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressSerialNumberRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressSerialNumberReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressSerialNumberReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressSerialNumberRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
index 60ca464..0cc44dd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressSerialNumberResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressSerialNumberResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressSerialNumberResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressSerialNumberResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
index bbf76d0..c116e12 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressSerialNumberWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressSerialNumberWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressSerialNumberWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressSerialNumberWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
index 434b686..cfb7506 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtDomainAddressWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtDomainAddressWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtDomainAddressWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtDomainAddressWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
index 7c8b70d..73d7c1d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtFileStreamInfoReport) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtFileStreamInfoReportParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtFileStreamInfoReportParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtFileStreamInfoReport"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
index a8b4296..995b50b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtGroupPropertyValueInfoReport) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtGroupPropertyValueInfoReportParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtGroupPropertyValueInfoReportParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtGroupPropertyValueInfoReport"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
index 9205b60..e2ccd08 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtGroupPropertyValueRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtGroupPropertyValueReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtGroupPropertyValueReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtGroupPropertyValueRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
index 7e46dd1..4262339 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtGroupPropertyValueResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtGroupPropertyValueResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtGroupPropertyValueResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtGroupPropertyValueResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
index bf86f28..d996326 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtGroupPropertyValueWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtGroupPropertyValueWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtGroupPropertyValueWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtGroupPropertyValueWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
index 71b0b16..5b67eb3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtIndividualAddressSerialNumberReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtIndividualAddressSerialNumberReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtIndividualAddressSerialNumberRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
index 530549e..8bdfcef 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberResponse) LengthInBytes() uint1
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtIndividualAddressSerialNumberResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtIndividualAddressSerialNumberResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtIndividualAddressSerialNumberResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
index acea47b..9e70823 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtIndividualAddressSerialNumberWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtIndividualAddressSerialNumberWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtIndividualAddressSerialNumberWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
index 396f72f..be56fd1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtKeyResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtKeyResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtKeyResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtKeyResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
index 6f7e32b..dd4fabf 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtKeyWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtKeyWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtKeyWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtKeyWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
index 7265ed1..7bda1ae 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtLinkRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtLinkReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtLinkReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtLinkRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
index 411b221..bf6b0af 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtLinkResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtLinkResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtLinkResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtLinkResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
index c62479d..ca328a4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtLinkWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtLinkWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtLinkWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtLinkWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
index 1bcf4e2..fd207e1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtMemoryBitWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtMemoryBitWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtMemoryBitWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtMemoryBitWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
index 269e911..ea7f772 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtNetworkParameterRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtNetworkParameterReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtNetworkParameterReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtNetworkParameterRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
index 39afe57..c824cc1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtNetworkParameterResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtNetworkParameterResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtNetworkParameterResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtNetworkParameterResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
index 21342e1..659caa6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtNetworkParameterWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtNetworkParameterWriteParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtNetworkParameterWriteParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtNetworkParameterWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
index d75f4c7..aa43441 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtOpenRoutingTableRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtOpenRoutingTableRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtOpenRoutingTableRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtOpenRoutingTableRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
index 3d3f1fa..a43f864 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
@@ -108,7 +108,7 @@ func (m *ApduDataExtPropertyDescriptionRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtPropertyDescriptionReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtPropertyDescriptionReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtPropertyDescriptionRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
index 12a4160..cf345a1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
@@ -140,7 +140,7 @@ func (m *ApduDataExtPropertyDescriptionResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtPropertyDescriptionResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtPropertyDescriptionResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtPropertyDescriptionResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
index feeb46b..26b6dab 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
@@ -113,7 +113,7 @@ func (m *ApduDataExtPropertyValueRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtPropertyValueReadParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtPropertyValueReadParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtPropertyValueRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
index 01c6a75..9012b6b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
@@ -149,8 +149,8 @@ func ApduDataExtPropertyValueResponseParse(readBuffer utils.ReadBuffer, length u
 		return nil, errors.Wrap(_indexErr, "Error parsing 'index' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(length) - uint16(uint16(5)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(length) - uint16(uint16(5)))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
index 0d79e47..0dea978 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
@@ -149,8 +149,8 @@ func ApduDataExtPropertyValueWriteParse(readBuffer utils.ReadBuffer, length uint
 		return nil, errors.Wrap(_indexErr, "Error parsing 'index' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(length) - uint16(uint16(5)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(length) - uint16(uint16(5)))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
index 75f56f2..16f28bc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRouterMemoryRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRouterMemoryRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRouterMemoryRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRouterMemoryRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
index 58efa02..4dc19fa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRouterMemoryResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRouterMemoryResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRouterMemoryResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRouterMemoryResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
index b75cc5c..9a2b24e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRouterStatusRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRouterStatusRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRouterStatusRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRouterStatusRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
index b82b3c8..200c344 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRouterStatusResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRouterStatusResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRouterStatusResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRouterStatusResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
index 942d491..99d2163 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRoutingTableRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRoutingTableRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRoutingTableRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRoutingTableRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
index 96905a0..15a2b53 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtReadRoutingTableResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtReadRoutingTableResponseParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtReadRoutingTableResponseParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtReadRoutingTableResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
index be13d09..bd241ff 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtWriteRouterMemoryRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtWriteRouterMemoryRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtWriteRouterMemoryRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtWriteRouterMemoryRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
index 429639c..4e2a5ef 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtWriteRouterStatusRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtWriteRouterStatusRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtWriteRouterStatusRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtWriteRouterStatusRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
index 02f07f2..81b56ef 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
@@ -92,7 +92,7 @@ func (m *ApduDataExtWriteRoutingTableRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataExtWriteRoutingTableRequestParse(readBuffer utils.ReadBuffer) (*ApduDataExt, error) {
+func ApduDataExtWriteRoutingTableRequestParse(readBuffer utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 	if pullErr := readBuffer.PullContext("ApduDataExtWriteRoutingTableRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
index 32e89b8..7a0e376 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
@@ -97,7 +97,7 @@ func (m *ApduDataGroupValueRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataGroupValueReadParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataGroupValueReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataGroupValueRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
index 9c38295..ed074dd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
@@ -116,8 +116,8 @@ func ApduDataGroupValueResponseParse(readBuffer utils.ReadBuffer, dataLength uin
 		return nil, errors.Wrap(_dataFirstByteErr, "Error parsing 'dataFirstByte' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
index 0a6039e..e81e46c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
@@ -116,8 +116,8 @@ func ApduDataGroupValueWriteParse(readBuffer utils.ReadBuffer, dataLength uint8)
 		return nil, errors.Wrap(_dataFirstByteErr, "Error parsing 'dataFirstByte' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(utils.InlineIf(bool(bool((dataLength) < (1))), func() interface{} { return uint16(uint16(0)) }, func() interface{} { return uint16(uint16(dataLength) - uint16(uint16(1))) }).(uint16))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
index e6f82f8..d502cfa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
@@ -92,7 +92,7 @@ func (m *ApduDataIndividualAddressRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataIndividualAddressReadParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataIndividualAddressReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataIndividualAddressRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
index 1e6303b..f4c119d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
@@ -92,7 +92,7 @@ func (m *ApduDataIndividualAddressResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataIndividualAddressResponseParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataIndividualAddressResponseParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataIndividualAddressResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
index c5a241d..4de3f51 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataIndividualAddressWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataIndividualAddressWriteParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataIndividualAddressWriteParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataIndividualAddressWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
index 2b25808..c87d26a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
@@ -103,7 +103,7 @@ func (m *ApduDataMemoryRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataMemoryReadParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataMemoryReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataMemoryRead"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
index 36ab222..c7513c0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
@@ -108,7 +108,7 @@ func (m *ApduDataMemoryResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataMemoryResponseParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataMemoryResponseParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataMemoryResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -126,8 +126,8 @@ func ApduDataMemoryResponseParse(readBuffer utils.ReadBuffer) (*ApduData, error)
 		return nil, errors.Wrap(_addressErr, "Error parsing 'address' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(numBytes)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(numBytes)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
index f54f3f5..8c183fa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
@@ -92,7 +92,7 @@ func (m *ApduDataMemoryWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataMemoryWriteParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataMemoryWriteParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataMemoryWrite"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
index 189344a..2b6bda2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
@@ -92,7 +92,7 @@ func (m *ApduDataRestart) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataRestartParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataRestartParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataRestart"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
index 7564527..dbd279a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
@@ -92,7 +92,7 @@ func (m *ApduDataUserMessage) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ApduDataUserMessageParse(readBuffer utils.ReadBuffer) (*ApduData, error) {
+func ApduDataUserMessageParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
 	if pullErr := readBuffer.PullContext("ApduDataUserMessage"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 75a51ac..82b3146 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -108,51 +108,51 @@ func CEMIParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	var typeSwitchError error
 	switch {
 	case messageCode == 0x2B: // LBusmonInd
-		_parent, typeSwitchError = LBusmonIndParse(readBuffer)
+		_parent, typeSwitchError = LBusmonIndParse(readBuffer, size)
 	case messageCode == 0x11: // LDataReq
-		_parent, typeSwitchError = LDataReqParse(readBuffer)
+		_parent, typeSwitchError = LDataReqParse(readBuffer, size)
 	case messageCode == 0x29: // LDataInd
-		_parent, typeSwitchError = LDataIndParse(readBuffer)
+		_parent, typeSwitchError = LDataIndParse(readBuffer, size)
 	case messageCode == 0x2E: // LDataCon
-		_parent, typeSwitchError = LDataConParse(readBuffer)
+		_parent, typeSwitchError = LDataConParse(readBuffer, size)
 	case messageCode == 0x10: // LRawReq
-		_parent, typeSwitchError = LRawReqParse(readBuffer)
+		_parent, typeSwitchError = LRawReqParse(readBuffer, size)
 	case messageCode == 0x2D: // LRawInd
-		_parent, typeSwitchError = LRawIndParse(readBuffer)
+		_parent, typeSwitchError = LRawIndParse(readBuffer, size)
 	case messageCode == 0x2F: // LRawCon
-		_parent, typeSwitchError = LRawConParse(readBuffer)
+		_parent, typeSwitchError = LRawConParse(readBuffer, size)
 	case messageCode == 0x13: // LPollDataReq
-		_parent, typeSwitchError = LPollDataReqParse(readBuffer)
+		_parent, typeSwitchError = LPollDataReqParse(readBuffer, size)
 	case messageCode == 0x25: // LPollDataCon
-		_parent, typeSwitchError = LPollDataConParse(readBuffer)
+		_parent, typeSwitchError = LPollDataConParse(readBuffer, size)
 	case messageCode == 0x41: // TDataConnectedReq
-		_parent, typeSwitchError = TDataConnectedReqParse(readBuffer)
+		_parent, typeSwitchError = TDataConnectedReqParse(readBuffer, size)
 	case messageCode == 0x89: // TDataConnectedInd
-		_parent, typeSwitchError = TDataConnectedIndParse(readBuffer)
+		_parent, typeSwitchError = TDataConnectedIndParse(readBuffer, size)
 	case messageCode == 0x4A: // TDataIndividualReq
-		_parent, typeSwitchError = TDataIndividualReqParse(readBuffer)
+		_parent, typeSwitchError = TDataIndividualReqParse(readBuffer, size)
 	case messageCode == 0x94: // TDataIndividualInd
-		_parent, typeSwitchError = TDataIndividualIndParse(readBuffer)
+		_parent, typeSwitchError = TDataIndividualIndParse(readBuffer, size)
 	case messageCode == 0xFC: // MPropReadReq
-		_parent, typeSwitchError = MPropReadReqParse(readBuffer)
+		_parent, typeSwitchError = MPropReadReqParse(readBuffer, size)
 	case messageCode == 0xFB: // MPropReadCon
-		_parent, typeSwitchError = MPropReadConParse(readBuffer)
+		_parent, typeSwitchError = MPropReadConParse(readBuffer, size)
 	case messageCode == 0xF6: // MPropWriteReq
-		_parent, typeSwitchError = MPropWriteReqParse(readBuffer)
+		_parent, typeSwitchError = MPropWriteReqParse(readBuffer, size)
 	case messageCode == 0xF5: // MPropWriteCon
-		_parent, typeSwitchError = MPropWriteConParse(readBuffer)
+		_parent, typeSwitchError = MPropWriteConParse(readBuffer, size)
 	case messageCode == 0xF7: // MPropInfoInd
-		_parent, typeSwitchError = MPropInfoIndParse(readBuffer)
+		_parent, typeSwitchError = MPropInfoIndParse(readBuffer, size)
 	case messageCode == 0xF8: // MFuncPropCommandReq
-		_parent, typeSwitchError = MFuncPropCommandReqParse(readBuffer)
+		_parent, typeSwitchError = MFuncPropCommandReqParse(readBuffer, size)
 	case messageCode == 0xF9: // MFuncPropStateReadReq
-		_parent, typeSwitchError = MFuncPropStateReadReqParse(readBuffer)
+		_parent, typeSwitchError = MFuncPropStateReadReqParse(readBuffer, size)
 	case messageCode == 0xFA: // MFuncPropCon
-		_parent, typeSwitchError = MFuncPropConParse(readBuffer)
+		_parent, typeSwitchError = MFuncPropConParse(readBuffer, size)
 	case messageCode == 0xF1: // MResetReq
-		_parent, typeSwitchError = MResetReqParse(readBuffer)
+		_parent, typeSwitchError = MResetReqParse(readBuffer, size)
 	case messageCode == 0xF0: // MResetInd
-		_parent, typeSwitchError = MResetIndParse(readBuffer)
+		_parent, typeSwitchError = MResetIndParse(readBuffer, size)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
index 689a7c9..e002b1f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
@@ -100,11 +100,11 @@ func ComObjectTableParse(readBuffer utils.ReadBuffer, firmwareType FirmwareType)
 	var typeSwitchError error
 	switch {
 	case firmwareType == FirmwareType_SYSTEM_1: // ComObjectTableRealisationType1
-		_parent, typeSwitchError = ComObjectTableRealisationType1Parse(readBuffer)
+		_parent, typeSwitchError = ComObjectTableRealisationType1Parse(readBuffer, firmwareType)
 	case firmwareType == FirmwareType_SYSTEM_2: // ComObjectTableRealisationType2
-		_parent, typeSwitchError = ComObjectTableRealisationType2Parse(readBuffer)
+		_parent, typeSwitchError = ComObjectTableRealisationType2Parse(readBuffer, firmwareType)
 	case firmwareType == FirmwareType_SYSTEM_300: // ComObjectTableRealisationType6
-		_parent, typeSwitchError = ComObjectTableRealisationType6Parse(readBuffer)
+		_parent, typeSwitchError = ComObjectTableRealisationType6Parse(readBuffer, firmwareType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
index 58b83e1..22cbcff 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
@@ -113,7 +113,7 @@ func (m *ComObjectTableRealisationType1) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ComObjectTableRealisationType1Parse(readBuffer utils.ReadBuffer) (*ComObjectTable, error) {
+func ComObjectTableRealisationType1Parse(readBuffer utils.ReadBuffer, firmwareType FirmwareType) (*ComObjectTable, error) {
 	if pullErr := readBuffer.PullContext("ComObjectTableRealisationType1"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
index 9a3a4da..753c17e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
@@ -113,7 +113,7 @@ func (m *ComObjectTableRealisationType2) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ComObjectTableRealisationType2Parse(readBuffer utils.ReadBuffer) (*ComObjectTable, error) {
+func ComObjectTableRealisationType2Parse(readBuffer utils.ReadBuffer, firmwareType FirmwareType) (*ComObjectTable, error) {
 	if pullErr := readBuffer.PullContext("ComObjectTableRealisationType2"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
index 1561e40..53ce01b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
@@ -98,7 +98,7 @@ func (m *ComObjectTableRealisationType6) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ComObjectTableRealisationType6Parse(readBuffer utils.ReadBuffer) (*ComObjectTable, error) {
+func ComObjectTableRealisationType6Parse(readBuffer utils.ReadBuffer, firmwareType FirmwareType) (*ComObjectTable, error) {
 	if pullErr := readBuffer.PullContext("ComObjectTableRealisationType6"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
index d686da2..2ffac9a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
@@ -181,8 +181,8 @@ func DIBDeviceInfoParse(readBuffer utils.ReadBuffer) (*DIBDeviceInfo, error) {
 		return nil, closeErr
 	}
 	// Byte Array field (knxNetIpDeviceSerialNumber)
-	numberOfBytes := int(uint16(6))
-	knxNetIpDeviceSerialNumber, _readArrayErr := readBuffer.ReadByteArray("knxNetIpDeviceSerialNumber", numberOfBytes)
+	numberOfBytesknxNetIpDeviceSerialNumber := int(uint16(6))
+	knxNetIpDeviceSerialNumber, _readArrayErr := readBuffer.ReadByteArray("knxNetIpDeviceSerialNumber", numberOfBytesknxNetIpDeviceSerialNumber)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'knxNetIpDeviceSerialNumber' field")
 	}
@@ -211,8 +211,8 @@ func DIBDeviceInfoParse(readBuffer utils.ReadBuffer) (*DIBDeviceInfo, error) {
 		return nil, closeErr
 	}
 	// Byte Array field (deviceFriendlyName)
-	numberOfBytes := int(uint16(30))
-	deviceFriendlyName, _readArrayErr := readBuffer.ReadByteArray("deviceFriendlyName", numberOfBytes)
+	numberOfBytesdeviceFriendlyName := int(uint16(30))
+	deviceFriendlyName, _readArrayErr := readBuffer.ReadByteArray("deviceFriendlyName", numberOfBytesdeviceFriendlyName)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'deviceFriendlyName' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
index ed28f9b..4f19699 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
@@ -83,8 +83,8 @@ func IPAddressParse(readBuffer utils.ReadBuffer) (*IPAddress, error) {
 		return nil, pullErr
 	}
 	// Byte Array field (addr)
-	numberOfBytes := int(uint16(4))
-	addr, _readArrayErr := readBuffer.ReadByteArray("addr", numberOfBytes)
+	numberOfBytesaddr := int(uint16(4))
+	addr, _readArrayErr := readBuffer.ReadByteArray("addr", numberOfBytesaddr)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'addr' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
index 7b06bae..99b61c2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
@@ -100,11 +100,11 @@ func KnxGroupAddressParse(readBuffer utils.ReadBuffer, numLevels uint8) (*KnxGro
 	var typeSwitchError error
 	switch {
 	case numLevels == 1: // KnxGroupAddressFreeLevel
-		_parent, typeSwitchError = KnxGroupAddressFreeLevelParse(readBuffer)
+		_parent, typeSwitchError = KnxGroupAddressFreeLevelParse(readBuffer, numLevels)
 	case numLevels == 2: // KnxGroupAddress2Level
-		_parent, typeSwitchError = KnxGroupAddress2LevelParse(readBuffer)
+		_parent, typeSwitchError = KnxGroupAddress2LevelParse(readBuffer, numLevels)
 	case numLevels == 3: // KnxGroupAddress3Level
-		_parent, typeSwitchError = KnxGroupAddress3LevelParse(readBuffer)
+		_parent, typeSwitchError = KnxGroupAddress3LevelParse(readBuffer, numLevels)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
index f4f869a..934fa74 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
@@ -103,7 +103,7 @@ func (m *KnxGroupAddress2Level) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func KnxGroupAddress2LevelParse(readBuffer utils.ReadBuffer) (*KnxGroupAddress, error) {
+func KnxGroupAddress2LevelParse(readBuffer utils.ReadBuffer, numLevels uint8) (*KnxGroupAddress, error) {
 	if pullErr := readBuffer.PullContext("KnxGroupAddress2Level"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
index 6ea8ddf..29f0bd3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
@@ -108,7 +108,7 @@ func (m *KnxGroupAddress3Level) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func KnxGroupAddress3LevelParse(readBuffer utils.ReadBuffer) (*KnxGroupAddress, error) {
+func KnxGroupAddress3LevelParse(readBuffer utils.ReadBuffer, numLevels uint8) (*KnxGroupAddress, error) {
 	if pullErr := readBuffer.PullContext("KnxGroupAddress3Level"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
index 30a9e82..3d7368e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
@@ -98,7 +98,7 @@ func (m *KnxGroupAddressFreeLevel) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func KnxGroupAddressFreeLevelParse(readBuffer utils.ReadBuffer) (*KnxGroupAddress, error) {
+func KnxGroupAddressFreeLevelParse(readBuffer utils.ReadBuffer, numLevels uint8) (*KnxGroupAddress, error) {
 	if pullErr := readBuffer.PullContext("KnxGroupAddressFreeLevel"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxProperty.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxProperty.go
index a3b69de..3a2f0d0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxProperty.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxProperty.go
@@ -226,7 +226,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -240,7 +240,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			groupAddress = append(groupAddress, values.NewPlcUINT(_item))
+			groupAddress = append(groupAddress, values.NewPlcBYTE(_item))
 		}
 
 		// Simple Field (disable)
@@ -272,7 +272,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -426,7 +426,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -439,7 +439,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -452,7 +452,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -465,7 +465,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -478,7 +478,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -491,7 +491,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -504,7 +504,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -517,7 +517,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -530,7 +530,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -543,7 +543,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -556,7 +556,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -569,7 +569,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -582,7 +582,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -595,7 +595,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -608,7 +608,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -621,7 +621,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -634,7 +634,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -647,7 +647,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -660,7 +660,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -673,7 +673,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
@@ -860,7 +860,7 @@ func KnxPropertyParse(readBuffer utils.ReadBuffer, propertyType KnxPropertyDataT
 			if _itemErr != nil {
 				return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
 			}
-			value = append(value, values.NewPlcUINT(_item))
+			value = append(value, values.NewPlcBYTE(_item))
 		}
 		readBuffer.CloseContext("KnxProperty")
 		return values.NewPlcList(value), nil
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
index 6479dea..bdead96 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
@@ -119,7 +119,7 @@ func (m *LBusmonInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LBusmonIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LBusmonIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LBusmonInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
index 9323fa0..27230e4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
@@ -112,7 +112,7 @@ func (m *LDataCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LDataConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LDataConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LDataCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
index f66e426..db85886 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
@@ -172,8 +172,8 @@ func LDataExtendedParse(readBuffer utils.ReadBuffer) (*LDataFrame, error) {
 		return nil, closeErr
 	}
 	// Byte Array field (destinationAddress)
-	numberOfBytes := int(uint16(2))
-	destinationAddress, _readArrayErr := readBuffer.ReadByteArray("destinationAddress", numberOfBytes)
+	numberOfBytesdestinationAddress := int(uint16(2))
+	destinationAddress, _readArrayErr := readBuffer.ReadByteArray("destinationAddress", numberOfBytesdestinationAddress)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'destinationAddress' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
index f85b6f1..ebcb090 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
@@ -112,7 +112,7 @@ func (m *LDataInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LDataIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LDataIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LDataInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
index 91b5dae..50e3f0b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
@@ -112,7 +112,7 @@ func (m *LDataReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LDataReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LDataReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LDataReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
index a1fca16..9165846 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
@@ -140,8 +140,8 @@ func LPollDataParse(readBuffer utils.ReadBuffer) (*LDataFrame, error) {
 		return nil, closeErr
 	}
 	// Byte Array field (targetAddress)
-	numberOfBytes := int(uint16(2))
-	targetAddress, _readArrayErr := readBuffer.ReadByteArray("targetAddress", numberOfBytes)
+	numberOfBytestargetAddress := int(uint16(2))
+	targetAddress, _readArrayErr := readBuffer.ReadByteArray("targetAddress", numberOfBytestargetAddress)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'targetAddress' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
index db57360..6991791 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
@@ -92,7 +92,7 @@ func (m *LPollDataCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LPollDataConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LPollDataConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LPollDataCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
index 9964a17..6c8b9a5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
@@ -92,7 +92,7 @@ func (m *LPollDataReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LPollDataReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LPollDataReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LPollDataReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
index 167cf3b..6a189fb 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
@@ -92,7 +92,7 @@ func (m *LRawCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LRawConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LRawConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LRawCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
index 6374fbe..0d358ae 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
@@ -92,7 +92,7 @@ func (m *LRawInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LRawIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LRawIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LRawInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
index 1084904..275780d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
@@ -92,7 +92,7 @@ func (m *LRawReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func LRawReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func LRawReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("LRawReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
index 5bc954f..dd523bf 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
@@ -83,8 +83,8 @@ func MACAddressParse(readBuffer utils.ReadBuffer) (*MACAddress, error) {
 		return nil, pullErr
 	}
 	// Byte Array field (addr)
-	numberOfBytes := int(uint16(6))
-	addr, _readArrayErr := readBuffer.ReadByteArray("addr", numberOfBytes)
+	numberOfBytesaddr := int(uint16(6))
+	addr, _readArrayErr := readBuffer.ReadByteArray("addr", numberOfBytesaddr)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'addr' field")
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
index 21d5f7c..f7cf966 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
@@ -92,7 +92,7 @@ func (m *MFuncPropCommandReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MFuncPropCommandReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MFuncPropCommandReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MFuncPropCommandReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
index 4b1d346..24e623d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
@@ -92,7 +92,7 @@ func (m *MFuncPropCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MFuncPropConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MFuncPropConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MFuncPropCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
index 8e64b10..b9bda66 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
@@ -92,7 +92,7 @@ func (m *MFuncPropStateReadReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MFuncPropStateReadReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MFuncPropStateReadReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MFuncPropStateReadReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
index 1df8367..efb73a6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
@@ -92,7 +92,7 @@ func (m *MPropInfoInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MPropInfoIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MPropInfoIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MPropInfoInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
index f8d578e..3d9bd7d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
@@ -123,7 +123,7 @@ func (m *MPropReadCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MPropReadConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MPropReadConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MPropReadCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
index d820665..d57185d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
@@ -118,7 +118,7 @@ func (m *MPropReadReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MPropReadReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MPropReadReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MPropReadReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
index 60ffeb2..53ac92e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
@@ -92,7 +92,7 @@ func (m *MPropWriteCon) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MPropWriteConParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MPropWriteConParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MPropWriteCon"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
index 5a0ca9b..162895e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
@@ -92,7 +92,7 @@ func (m *MPropWriteReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MPropWriteReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MPropWriteReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MPropWriteReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
index c448ca3..c41f318 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
@@ -92,7 +92,7 @@ func (m *MResetInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MResetIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MResetIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MResetInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
index 6df2fd0..be2fa37 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
@@ -92,7 +92,7 @@ func (m *MResetReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func MResetReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func MResetReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("MResetReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
index dd3fb18..b9f7132 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
@@ -92,7 +92,7 @@ func (m *TDataConnectedInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func TDataConnectedIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func TDataConnectedIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("TDataConnectedInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
index b9ea829..5ad1f0a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
@@ -92,7 +92,7 @@ func (m *TDataConnectedReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func TDataConnectedReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func TDataConnectedReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("TDataConnectedReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
index 90c1946..d01e146 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
@@ -92,7 +92,7 @@ func (m *TDataIndividualInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func TDataIndividualIndParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func TDataIndividualIndParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("TDataIndividualInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
index a8d0904..23ca12e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
@@ -92,7 +92,7 @@ func (m *TDataIndividualReq) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func TDataIndividualReqParse(readBuffer utils.ReadBuffer) (*CEMI, error) {
+func TDataIndividualReqParse(readBuffer utils.ReadBuffer, size uint16) (*CEMI, error) {
 	if pullErr := readBuffer.PullContext("TDataIndividualReq"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
index 4ca7bec..4ebf0ba 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
@@ -105,8 +105,8 @@ func UnknownMessageParse(readBuffer utils.ReadBuffer, totalLength uint16) (*KnxN
 		return nil, pullErr
 	}
 	// Byte Array field (unknownData)
-	numberOfBytes := int(uint16(totalLength) - uint16(uint16(6)))
-	unknownData, _readArrayErr := readBuffer.ReadByteArray("unknownData", numberOfBytes)
+	numberOfBytesunknownData := int(uint16(totalLength) - uint16(uint16(6)))
+	unknownData, _readArrayErr := readBuffer.ReadByteArray("unknownData", numberOfBytesunknownData)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'unknownData' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
index 3c3b4b8..33b2207 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
@@ -118,83 +118,83 @@ func ModbusPDUParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, err
 	var typeSwitchError error
 	switch {
 	case errorFlag == true: // ModbusPDUError
-		_parent, typeSwitchError = ModbusPDUErrorParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUErrorParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x02 && response == false: // ModbusPDUReadDiscreteInputsRequest
-		_parent, typeSwitchError = ModbusPDUReadDiscreteInputsRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadDiscreteInputsRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x02 && response == true: // ModbusPDUReadDiscreteInputsResponse
-		_parent, typeSwitchError = ModbusPDUReadDiscreteInputsResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadDiscreteInputsResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x01 && response == false: // ModbusPDUReadCoilsRequest
-		_parent, typeSwitchError = ModbusPDUReadCoilsRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadCoilsRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x01 && response == true: // ModbusPDUReadCoilsResponse
-		_parent, typeSwitchError = ModbusPDUReadCoilsResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadCoilsResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x05 && response == false: // ModbusPDUWriteSingleCoilRequest
-		_parent, typeSwitchError = ModbusPDUWriteSingleCoilRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteSingleCoilRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x05 && response == true: // ModbusPDUWriteSingleCoilResponse
-		_parent, typeSwitchError = ModbusPDUWriteSingleCoilResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteSingleCoilResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0F && response == false: // ModbusPDUWriteMultipleCoilsRequest
-		_parent, typeSwitchError = ModbusPDUWriteMultipleCoilsRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteMultipleCoilsRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0F && response == true: // ModbusPDUWriteMultipleCoilsResponse
-		_parent, typeSwitchError = ModbusPDUWriteMultipleCoilsResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteMultipleCoilsResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x04 && response == false: // ModbusPDUReadInputRegistersRequest
-		_parent, typeSwitchError = ModbusPDUReadInputRegistersRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadInputRegistersRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x04 && response == true: // ModbusPDUReadInputRegistersResponse
-		_parent, typeSwitchError = ModbusPDUReadInputRegistersResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadInputRegistersResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x03 && response == false: // ModbusPDUReadHoldingRegistersRequest
-		_parent, typeSwitchError = ModbusPDUReadHoldingRegistersRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadHoldingRegistersRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x03 && response == true: // ModbusPDUReadHoldingRegistersResponse
-		_parent, typeSwitchError = ModbusPDUReadHoldingRegistersResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadHoldingRegistersResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x06 && response == false: // ModbusPDUWriteSingleRegisterRequest
-		_parent, typeSwitchError = ModbusPDUWriteSingleRegisterRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteSingleRegisterRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x06 && response == true: // ModbusPDUWriteSingleRegisterResponse
-		_parent, typeSwitchError = ModbusPDUWriteSingleRegisterResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteSingleRegisterResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x10 && response == false: // ModbusPDUWriteMultipleHoldingRegistersRequest
-		_parent, typeSwitchError = ModbusPDUWriteMultipleHoldingRegistersRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteMultipleHoldingRegistersRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x10 && response == true: // ModbusPDUWriteMultipleHoldingRegistersResponse
-		_parent, typeSwitchError = ModbusPDUWriteMultipleHoldingRegistersResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteMultipleHoldingRegistersResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x17 && response == false: // ModbusPDUReadWriteMultipleHoldingRegistersRequest
-		_parent, typeSwitchError = ModbusPDUReadWriteMultipleHoldingRegistersRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadWriteMultipleHoldingRegistersRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x17 && response == true: // ModbusPDUReadWriteMultipleHoldingRegistersResponse
-		_parent, typeSwitchError = ModbusPDUReadWriteMultipleHoldingRegistersResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadWriteMultipleHoldingRegistersResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x16 && response == false: // ModbusPDUMaskWriteHoldingRegisterRequest
-		_parent, typeSwitchError = ModbusPDUMaskWriteHoldingRegisterRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUMaskWriteHoldingRegisterRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x16 && response == true: // ModbusPDUMaskWriteHoldingRegisterResponse
-		_parent, typeSwitchError = ModbusPDUMaskWriteHoldingRegisterResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUMaskWriteHoldingRegisterResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x18 && response == false: // ModbusPDUReadFifoQueueRequest
-		_parent, typeSwitchError = ModbusPDUReadFifoQueueRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadFifoQueueRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x18 && response == true: // ModbusPDUReadFifoQueueResponse
-		_parent, typeSwitchError = ModbusPDUReadFifoQueueResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadFifoQueueResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x14 && response == false: // ModbusPDUReadFileRecordRequest
-		_parent, typeSwitchError = ModbusPDUReadFileRecordRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadFileRecordRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x14 && response == true: // ModbusPDUReadFileRecordResponse
-		_parent, typeSwitchError = ModbusPDUReadFileRecordResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadFileRecordResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x15 && response == false: // ModbusPDUWriteFileRecordRequest
-		_parent, typeSwitchError = ModbusPDUWriteFileRecordRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteFileRecordRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x15 && response == true: // ModbusPDUWriteFileRecordResponse
-		_parent, typeSwitchError = ModbusPDUWriteFileRecordResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUWriteFileRecordResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x07 && response == false: // ModbusPDUReadExceptionStatusRequest
-		_parent, typeSwitchError = ModbusPDUReadExceptionStatusRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadExceptionStatusRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x07 && response == true: // ModbusPDUReadExceptionStatusResponse
-		_parent, typeSwitchError = ModbusPDUReadExceptionStatusResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadExceptionStatusResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x08 && response == false: // ModbusPDUDiagnosticRequest
-		_parent, typeSwitchError = ModbusPDUDiagnosticRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUDiagnosticRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x08 && response == true: // ModbusPDUDiagnosticResponse
-		_parent, typeSwitchError = ModbusPDUDiagnosticResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUDiagnosticResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0B && response == false: // ModbusPDUGetComEventCounterRequest
-		_parent, typeSwitchError = ModbusPDUGetComEventCounterRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUGetComEventCounterRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0B && response == true: // ModbusPDUGetComEventCounterResponse
-		_parent, typeSwitchError = ModbusPDUGetComEventCounterResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUGetComEventCounterResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0C && response == false: // ModbusPDUGetComEventLogRequest
-		_parent, typeSwitchError = ModbusPDUGetComEventLogRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUGetComEventLogRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x0C && response == true: // ModbusPDUGetComEventLogResponse
-		_parent, typeSwitchError = ModbusPDUGetComEventLogResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUGetComEventLogResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x11 && response == false: // ModbusPDUReportServerIdRequest
-		_parent, typeSwitchError = ModbusPDUReportServerIdRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReportServerIdRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x11 && response == true: // ModbusPDUReportServerIdResponse
-		_parent, typeSwitchError = ModbusPDUReportServerIdResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReportServerIdResponseParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x2B && response == false: // ModbusPDUReadDeviceIdentificationRequest
-		_parent, typeSwitchError = ModbusPDUReadDeviceIdentificationRequestParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadDeviceIdentificationRequestParse(readBuffer, response)
 	case errorFlag == false && functionFlag == 0x2B && response == true: // ModbusPDUReadDeviceIdentificationResponse
-		_parent, typeSwitchError = ModbusPDUReadDeviceIdentificationResponseParse(readBuffer)
+		_parent, typeSwitchError = ModbusPDUReadDeviceIdentificationResponseParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
index 5683c37..99855be 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUDiagnosticRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUDiagnosticRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUDiagnosticRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUDiagnosticRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
index 0616e98..e1629eb 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUDiagnosticResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUDiagnosticResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUDiagnosticResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUDiagnosticResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
index a6cd047..c52f151 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
@@ -106,7 +106,7 @@ func (m *ModbusPDUError) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUErrorParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUErrorParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUError"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
index d791108..c72776b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUGetComEventCounterRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUGetComEventCounterRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUGetComEventCounterRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUGetComEventCounterRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
index 5860715..c266964 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUGetComEventCounterResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUGetComEventCounterResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUGetComEventCounterResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUGetComEventCounterResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
index 43b6dfd..f45b699 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUGetComEventLogRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUGetComEventLogRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUGetComEventLogRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUGetComEventLogRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
index e36fcb5..e0fe727 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
@@ -126,7 +126,7 @@ func (m *ModbusPDUGetComEventLogResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUGetComEventLogResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUGetComEventLogResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUGetComEventLogResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -156,8 +156,8 @@ func ModbusPDUGetComEventLogResponseParse(readBuffer utils.ReadBuffer) (*ModbusP
 		return nil, errors.Wrap(_messageCountErr, "Error parsing 'messageCount' field")
 	}
 	// Byte Array field (events)
-	numberOfBytes := int(uint16(byteCount) - uint16(uint16(6)))
-	events, _readArrayErr := readBuffer.ReadByteArray("events", numberOfBytes)
+	numberOfBytesevents := int(uint16(byteCount) - uint16(uint16(6)))
+	events, _readArrayErr := readBuffer.ReadByteArray("events", numberOfBytesevents)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'events' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
index 7288168..081e25a 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
@@ -116,7 +116,7 @@ func (m *ModbusPDUMaskWriteHoldingRegisterRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUMaskWriteHoldingRegisterRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUMaskWriteHoldingRegisterRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUMaskWriteHoldingRegisterRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
index 2b5a397..39f585f 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
@@ -116,7 +116,7 @@ func (m *ModbusPDUMaskWriteHoldingRegisterResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUMaskWriteHoldingRegisterResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUMaskWriteHoldingRegisterResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUMaskWriteHoldingRegisterResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
index bd62d8e..ea402d1 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadCoilsRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadCoilsRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadCoilsRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadCoilsRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
index 002df38..71cbfc6 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadCoilsResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadCoilsResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadCoilsResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadCoilsResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReadCoilsResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, e
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
index ce96d39..fbb07e9 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUReadDeviceIdentificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadDeviceIdentificationRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadDeviceIdentificationRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadDeviceIdentificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
index 60e858a..cea1485 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUReadDeviceIdentificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadDeviceIdentificationResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadDeviceIdentificationResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadDeviceIdentificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
index b8368a3..a3e1d0b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadDiscreteInputsRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadDiscreteInputsRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadDiscreteInputsRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadDiscreteInputsRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
index 4b9c34d..a001a77 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadDiscreteInputsResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadDiscreteInputsResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadDiscreteInputsResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadDiscreteInputsResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReadDiscreteInputsResponseParse(readBuffer utils.ReadBuffer) (*Mod
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
index fb0c86c..0d91d75 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUReadExceptionStatusRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadExceptionStatusRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadExceptionStatusRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadExceptionStatusRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
index e0d6262..02b3ba3 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
@@ -106,7 +106,7 @@ func (m *ModbusPDUReadExceptionStatusResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadExceptionStatusResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadExceptionStatusResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadExceptionStatusResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
index b43c4da..02b25d5 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
@@ -106,7 +106,7 @@ func (m *ModbusPDUReadFifoQueueRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFifoQueueRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadFifoQueueRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadFifoQueueRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
index 5ee9bfb..21a6a0e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
@@ -114,7 +114,7 @@ func (m *ModbusPDUReadFifoQueueResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFifoQueueResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadFifoQueueResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadFifoQueueResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
index 4231986..a161c5c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
@@ -113,7 +113,7 @@ func (m *ModbusPDUReadFileRecordRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFileRecordRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadFileRecordRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadFileRecordRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
index 653f40a..f1b75f9 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
@@ -113,7 +113,7 @@ func (m *ModbusPDUReadFileRecordResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFileRecordResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadFileRecordResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadFileRecordResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
index 9aca5ac..4437839 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
@@ -103,8 +103,8 @@ func ModbusPDUReadFileRecordResponseItemParse(readBuffer utils.ReadBuffer) (*Mod
 		return nil, errors.Wrap(_referenceTypeErr, "Error parsing 'referenceType' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(uint16(dataLength) - uint16(uint16(1)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(uint16(dataLength) - uint16(uint16(1)))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
index b1ca7ef..29ca822 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadHoldingRegistersRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadHoldingRegistersRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadHoldingRegistersRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadHoldingRegistersRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
index 4b7d7ce..7272b4c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadHoldingRegistersResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadHoldingRegistersResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadHoldingRegistersResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadHoldingRegistersResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReadHoldingRegistersResponseParse(readBuffer utils.ReadBuffer) (*M
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
index 6ef9bc8..ff26667 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadInputRegistersRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadInputRegistersRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadInputRegistersRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadInputRegistersRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
index fb77ab7..9fcc4df 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadInputRegistersResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadInputRegistersResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadInputRegistersResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadInputRegistersResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReadInputRegistersResponseParse(readBuffer utils.ReadBuffer) (*Mod
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index ff824a6..0d3ad64 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -131,7 +131,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) LengthInBytes() uint
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadWriteMultipleHoldingRegistersRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadWriteMultipleHoldingRegistersRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadWriteMultipleHoldingRegistersRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -167,8 +167,8 @@ func ModbusPDUReadWriteMultipleHoldingRegistersRequestParse(readBuffer utils.Rea
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index 60c169e..5b25742 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) LengthInBytes() uin
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadWriteMultipleHoldingRegistersResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReadWriteMultipleHoldingRegistersResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReadWriteMultipleHoldingRegistersResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReadWriteMultipleHoldingRegistersResponseParse(readBuffer utils.Re
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
index 4f3dd5d..910beb2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
@@ -100,7 +100,7 @@ func (m *ModbusPDUReportServerIdRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReportServerIdRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReportServerIdRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReportServerIdRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
index 28a9980..a493e10 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUReportServerIdResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReportServerIdResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUReportServerIdResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUReportServerIdResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,8 +123,8 @@ func ModbusPDUReportServerIdResponseParse(readBuffer utils.ReadBuffer) (*ModbusP
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
index fee7f66..2dd85ee 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
@@ -113,7 +113,7 @@ func (m *ModbusPDUWriteFileRecordRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteFileRecordRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteFileRecordRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteFileRecordRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
index 5b2a325..fc0f8e6 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
@@ -123,8 +123,8 @@ func ModbusPDUWriteFileRecordRequestItemParse(readBuffer utils.ReadBuffer) (*Mod
 		return nil, errors.Wrap(_recordLengthErr, "Error parsing 'recordLength' field")
 	}
 	// Byte Array field (recordData)
-	numberOfBytes := int(uint16(recordLength) * uint16(uint16(2)))
-	recordData, _readArrayErr := readBuffer.ReadByteArray("recordData", numberOfBytes)
+	numberOfBytesrecordData := int(uint16(recordLength) * uint16(uint16(2)))
+	recordData, _readArrayErr := readBuffer.ReadByteArray("recordData", numberOfBytesrecordData)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'recordData' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
index b1f2dac..d67264e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
@@ -113,7 +113,7 @@ func (m *ModbusPDUWriteFileRecordResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteFileRecordResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteFileRecordResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteFileRecordResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
index 6935d50..6694d3c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
@@ -123,8 +123,8 @@ func ModbusPDUWriteFileRecordResponseItemParse(readBuffer utils.ReadBuffer) (*Mo
 		return nil, errors.Wrap(_recordLengthErr, "Error parsing 'recordLength' field")
 	}
 	// Byte Array field (recordData)
-	numberOfBytes := int(recordLength)
-	recordData, _readArrayErr := readBuffer.ReadByteArray("recordData", numberOfBytes)
+	numberOfBytesrecordData := int(recordLength)
+	recordData, _readArrayErr := readBuffer.ReadByteArray("recordData", numberOfBytesrecordData)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'recordData' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
index 9bc72e9..5161b53 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
@@ -121,7 +121,7 @@ func (m *ModbusPDUWriteMultipleCoilsRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteMultipleCoilsRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteMultipleCoilsRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteMultipleCoilsRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -145,8 +145,8 @@ func ModbusPDUWriteMultipleCoilsRequestParse(readBuffer utils.ReadBuffer) (*Modb
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
index c6066e3..33bde0c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteMultipleCoilsResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteMultipleCoilsResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteMultipleCoilsResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteMultipleCoilsResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index 0742918..3ee7b92 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -121,7 +121,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteMultipleHoldingRegistersRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteMultipleHoldingRegistersRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteMultipleHoldingRegistersRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -145,8 +145,8 @@ func ModbusPDUWriteMultipleHoldingRegistersRequestParse(readBuffer utils.ReadBuf
 		return nil, errors.Wrap(_byteCountErr, "Error parsing 'byteCount' field")
 	}
 	// Byte Array field (value)
-	numberOfBytes := int(byteCount)
-	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytes)
+	numberOfBytesvalue := int(byteCount)
+	value, _readArrayErr := readBuffer.ReadByteArray("value", numberOfBytesvalue)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'value' field")
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
index 4df5ae5..0fa8779 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersResponse) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteMultipleHoldingRegistersResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteMultipleHoldingRegistersResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteMultipleHoldingRegistersResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
index e8a8270..e75fe5e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteSingleCoilRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteSingleCoilRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteSingleCoilRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteSingleCoilRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
index ec861d5..d241166 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteSingleCoilResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteSingleCoilResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteSingleCoilResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteSingleCoilResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
index 3e233fa..3ccae44 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteSingleRegisterRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteSingleRegisterRequestParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteSingleRegisterRequestParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteSingleRegisterRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
index 19ff008..27cf5e7 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
@@ -111,7 +111,7 @@ func (m *ModbusPDUWriteSingleRegisterResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteSingleRegisterResponseParse(readBuffer utils.ReadBuffer) (*ModbusPDU, error) {
+func ModbusPDUWriteSingleRegisterResponseParse(readBuffer utils.ReadBuffer, response bool) (*ModbusPDU, error) {
 	if pullErr := readBuffer.PullContext("ModbusPDUWriteSingleRegisterResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index d713024..13712f8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -134,17 +134,17 @@ func COTPPacketParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket,
 	var typeSwitchError error
 	switch {
 	case tpduCode == 0xF0: // COTPPacketData
-		_parent, typeSwitchError = COTPPacketDataParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketDataParse(readBuffer, cotpLen)
 	case tpduCode == 0xE0: // COTPPacketConnectionRequest
-		_parent, typeSwitchError = COTPPacketConnectionRequestParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketConnectionRequestParse(readBuffer, cotpLen)
 	case tpduCode == 0xD0: // COTPPacketConnectionResponse
-		_parent, typeSwitchError = COTPPacketConnectionResponseParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketConnectionResponseParse(readBuffer, cotpLen)
 	case tpduCode == 0x80: // COTPPacketDisconnectRequest
-		_parent, typeSwitchError = COTPPacketDisconnectRequestParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketDisconnectRequestParse(readBuffer, cotpLen)
 	case tpduCode == 0xC0: // COTPPacketDisconnectResponse
-		_parent, typeSwitchError = COTPPacketDisconnectResponseParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketDisconnectResponseParse(readBuffer, cotpLen)
 	case tpduCode == 0x70: // COTPPacketTpduError
-		_parent, typeSwitchError = COTPPacketTpduErrorParse(readBuffer)
+		_parent, typeSwitchError = COTPPacketTpduErrorParse(readBuffer, cotpLen)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
index 332c6ae..498937f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
@@ -110,7 +110,7 @@ func (m *COTPPacketConnectionRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketConnectionRequestParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketConnectionRequestParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketConnectionRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
index 4b22ed5..d8c2304 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
@@ -110,7 +110,7 @@ func (m *COTPPacketConnectionResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketConnectionResponseParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketConnectionResponseParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketConnectionResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
index f1247bb..cafbb7d 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
@@ -105,7 +105,7 @@ func (m *COTPPacketData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketDataParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketDataParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketData"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
index 1739c4d..6012d31 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
@@ -110,7 +110,7 @@ func (m *COTPPacketDisconnectRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketDisconnectRequestParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketDisconnectRequestParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketDisconnectRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
index a644f90..fd3ddb3 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
@@ -105,7 +105,7 @@ func (m *COTPPacketDisconnectResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketDisconnectResponseParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketDisconnectResponseParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketDisconnectResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
index 3ae5cff..434d49c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
@@ -105,7 +105,7 @@ func (m *COTPPacketTpduError) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPPacketTpduErrorParse(readBuffer utils.ReadBuffer) (*COTPPacket, error) {
+func COTPPacketTpduErrorParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket, error) {
 	if pullErr := readBuffer.PullContext("COTPPacketTpduError"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
index 2c52fcc..6c029c8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
@@ -118,13 +118,13 @@ func COTPParameterParse(readBuffer utils.ReadBuffer, rest uint8) (*COTPParameter
 	var typeSwitchError error
 	switch {
 	case parameterType == 0xC0: // COTPParameterTpduSize
-		_parent, typeSwitchError = COTPParameterTpduSizeParse(readBuffer)
+		_parent, typeSwitchError = COTPParameterTpduSizeParse(readBuffer, rest)
 	case parameterType == 0xC1: // COTPParameterCallingTsap
-		_parent, typeSwitchError = COTPParameterCallingTsapParse(readBuffer)
+		_parent, typeSwitchError = COTPParameterCallingTsapParse(readBuffer, rest)
 	case parameterType == 0xC2: // COTPParameterCalledTsap
-		_parent, typeSwitchError = COTPParameterCalledTsapParse(readBuffer)
+		_parent, typeSwitchError = COTPParameterCalledTsapParse(readBuffer, rest)
 	case parameterType == 0xC3: // COTPParameterChecksum
-		_parent, typeSwitchError = COTPParameterChecksumParse(readBuffer)
+		_parent, typeSwitchError = COTPParameterChecksumParse(readBuffer, rest)
 	case parameterType == 0xE0: // COTPParameterDisconnectAdditionalInformation
 		_parent, typeSwitchError = COTPParameterDisconnectAdditionalInformationParse(readBuffer)
 	default:
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
index f961ca6..027d221 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
@@ -98,7 +98,7 @@ func (m *COTPParameterCalledTsap) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPParameterCalledTsapParse(readBuffer utils.ReadBuffer) (*COTPParameter, error) {
+func COTPParameterCalledTsapParse(readBuffer utils.ReadBuffer, rest uint8) (*COTPParameter, error) {
 	if pullErr := readBuffer.PullContext("COTPParameterCalledTsap"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
index b3b42e8..c5b3a93 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
@@ -98,7 +98,7 @@ func (m *COTPParameterCallingTsap) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPParameterCallingTsapParse(readBuffer utils.ReadBuffer) (*COTPParameter, error) {
+func COTPParameterCallingTsapParse(readBuffer utils.ReadBuffer, rest uint8) (*COTPParameter, error) {
 	if pullErr := readBuffer.PullContext("COTPParameterCallingTsap"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
index ca39411..15ee814 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
@@ -98,7 +98,7 @@ func (m *COTPParameterChecksum) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPParameterChecksumParse(readBuffer utils.ReadBuffer) (*COTPParameter, error) {
+func COTPParameterChecksumParse(readBuffer utils.ReadBuffer, rest uint8) (*COTPParameter, error) {
 	if pullErr := readBuffer.PullContext("COTPParameterChecksum"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
index b67f823..eb3249f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
@@ -105,8 +105,8 @@ func COTPParameterDisconnectAdditionalInformationParse(readBuffer utils.ReadBuff
 		return nil, pullErr
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(rest)
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(rest)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
index e6074e4..5d204dc 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
@@ -98,7 +98,7 @@ func (m *COTPParameterTpduSize) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func COTPParameterTpduSizeParse(readBuffer utils.ReadBuffer) (*COTPParameter, error) {
+func COTPParameterTpduSizeParse(readBuffer utils.ReadBuffer, rest uint8) (*COTPParameter, error) {
 	if pullErr := readBuffer.PullContext("COTPParameterTpduSize"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7DataAlarmMessage.go b/plc4go/internal/plc4go/s7/readwrite/model/S7DataAlarmMessage.go
index 8a09b12..8550088 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7DataAlarmMessage.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7DataAlarmMessage.go
@@ -129,9 +129,9 @@ func S7DataAlarmMessageParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8)
 	var typeSwitchError error
 	switch {
 	case cpuFunctionType == 0x04: // S7MessageObjectRequest
-		_parent, typeSwitchError = S7MessageObjectRequestParse(readBuffer)
+		_parent, typeSwitchError = S7MessageObjectRequestParse(readBuffer, cpuFunctionType)
 	case cpuFunctionType == 0x08: // S7MessageObjectResponse
-		_parent, typeSwitchError = S7MessageObjectResponseParse(readBuffer)
+		_parent, typeSwitchError = S7MessageObjectResponseParse(readBuffer, cpuFunctionType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectRequest.go
index 031146e..a3fdc25 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectRequest.go
@@ -126,7 +126,7 @@ func (m *S7MessageObjectRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7MessageObjectRequestParse(readBuffer utils.ReadBuffer) (*S7DataAlarmMessage, error) {
+func S7MessageObjectRequestParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8) (*S7DataAlarmMessage, error) {
 	if pullErr := readBuffer.PullContext("S7MessageObjectRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectResponse.go
index 66ceb3e..4fcc953 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageObjectResponse.go
@@ -107,7 +107,7 @@ func (m *S7MessageObjectResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7MessageObjectResponseParse(readBuffer utils.ReadBuffer) (*S7DataAlarmMessage, error) {
+func S7MessageObjectResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8) (*S7DataAlarmMessage, error) {
 	if pullErr := readBuffer.PullContext("S7MessageObjectResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
index 016e45c..3a7f27f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
@@ -109,19 +109,19 @@ func S7ParameterParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parame
 	var typeSwitchError error
 	switch {
 	case parameterType == 0xF0: // S7ParameterSetupCommunication
-		_parent, typeSwitchError = S7ParameterSetupCommunicationParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterSetupCommunicationParse(readBuffer, messageType)
 	case parameterType == 0x04 && messageType == 0x01: // S7ParameterReadVarRequest
-		_parent, typeSwitchError = S7ParameterReadVarRequestParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterReadVarRequestParse(readBuffer, messageType)
 	case parameterType == 0x04 && messageType == 0x03: // S7ParameterReadVarResponse
-		_parent, typeSwitchError = S7ParameterReadVarResponseParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterReadVarResponseParse(readBuffer, messageType)
 	case parameterType == 0x05 && messageType == 0x01: // S7ParameterWriteVarRequest
-		_parent, typeSwitchError = S7ParameterWriteVarRequestParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterWriteVarRequestParse(readBuffer, messageType)
 	case parameterType == 0x05 && messageType == 0x03: // S7ParameterWriteVarResponse
-		_parent, typeSwitchError = S7ParameterWriteVarResponseParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterWriteVarResponseParse(readBuffer, messageType)
 	case parameterType == 0x00 && messageType == 0x07: // S7ParameterUserData
-		_parent, typeSwitchError = S7ParameterUserDataParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterUserDataParse(readBuffer, messageType)
 	case parameterType == 0x01 && messageType == 0x07: // S7ParameterModeTransition
-		_parent, typeSwitchError = S7ParameterModeTransitionParse(readBuffer)
+		_parent, typeSwitchError = S7ParameterModeTransitionParse(readBuffer, messageType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterModeTransition.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterModeTransition.go
index 126d486..eafb5c9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterModeTransition.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterModeTransition.go
@@ -129,7 +129,7 @@ func (m *S7ParameterModeTransition) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterModeTransitionParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterModeTransitionParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterModeTransition"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index 8127de2..3a7d921 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -110,7 +110,7 @@ func (m *S7ParameterReadVarRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterReadVarRequestParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterReadVarRequestParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterReadVarRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
index bce3bc0..6099e39 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
@@ -102,7 +102,7 @@ func (m *S7ParameterReadVarResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterReadVarResponseParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterReadVarResponseParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterReadVarResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
index 4d36ee1..83dd842 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
@@ -116,7 +116,7 @@ func (m *S7ParameterSetupCommunication) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterSetupCommunicationParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterSetupCommunicationParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterSetupCommunication"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index 610471f..3b43e37 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -110,7 +110,7 @@ func (m *S7ParameterUserData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterUserDataParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterUserDataParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterUserData"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index 09c1cd1..4b90a16 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -110,7 +110,7 @@ func (m *S7ParameterWriteVarRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterWriteVarRequestParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterWriteVarRequestParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterWriteVarRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
index 95934ca..e15381b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
@@ -102,7 +102,7 @@ func (m *S7ParameterWriteVarResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7ParameterWriteVarResponseParse(readBuffer utils.ReadBuffer) (*S7Parameter, error) {
+func S7ParameterWriteVarResponseParse(readBuffer utils.ReadBuffer, messageType uint8) (*S7Parameter, error) {
 	if pullErr := readBuffer.PullContext("S7ParameterWriteVarResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
index 063ec0b..20648fe 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
@@ -101,13 +101,13 @@ func S7PayloadParse(readBuffer utils.ReadBuffer, messageType uint8, parameter *S
 	var typeSwitchError error
 	switch {
 	case CastS7Parameter(parameter).Child.ParameterType() == 0x04 && messageType == 0x03: // S7PayloadReadVarResponse
-		_parent, typeSwitchError = S7PayloadReadVarResponseParse(readBuffer, parameter)
+		_parent, typeSwitchError = S7PayloadReadVarResponseParse(readBuffer, messageType, parameter)
 	case CastS7Parameter(parameter).Child.ParameterType() == 0x05 && messageType == 0x01: // S7PayloadWriteVarRequest
-		_parent, typeSwitchError = S7PayloadWriteVarRequestParse(readBuffer, parameter)
+		_parent, typeSwitchError = S7PayloadWriteVarRequestParse(readBuffer, messageType, parameter)
 	case CastS7Parameter(parameter).Child.ParameterType() == 0x05 && messageType == 0x03: // S7PayloadWriteVarResponse
-		_parent, typeSwitchError = S7PayloadWriteVarResponseParse(readBuffer, parameter)
+		_parent, typeSwitchError = S7PayloadWriteVarResponseParse(readBuffer, messageType, parameter)
 	case CastS7Parameter(parameter).Child.ParameterType() == 0x00 && messageType == 0x07: // S7PayloadUserData
-		_parent, typeSwitchError = S7PayloadUserDataParse(readBuffer, parameter)
+		_parent, typeSwitchError = S7PayloadUserDataParse(readBuffer, messageType, parameter)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarm8.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarm8.go
index 8410e36..5395207 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarm8.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarm8.go
@@ -108,7 +108,7 @@ func (m *S7PayloadAlarm8) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadAlarm8Parse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadAlarm8Parse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadAlarm8"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmAckInd.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmAckInd.go
index 6eb4e93..7d6834c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmAckInd.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmAckInd.go
@@ -108,7 +108,7 @@ func (m *S7PayloadAlarmAckInd) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadAlarmAckIndParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadAlarmAckIndParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadAlarmAckInd"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmS.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmS.go
index 3b9f0e9..b68afe7 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmS.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmS.go
@@ -108,7 +108,7 @@ func (m *S7PayloadAlarmS) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadAlarmSParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadAlarmSParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadAlarmS"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSC.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSC.go
index 81b9889..351328f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSC.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSC.go
@@ -108,7 +108,7 @@ func (m *S7PayloadAlarmSC) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadAlarmSCParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadAlarmSCParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadAlarmSC"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go
index dfd8cbd..c8ab726 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go
@@ -108,7 +108,7 @@ func (m *S7PayloadAlarmSQ) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadAlarmSQParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadAlarmSQParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadAlarmSQ"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadDiagnosticMessage.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadDiagnosticMessage.go
index 500978b..f808408 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadDiagnosticMessage.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadDiagnosticMessage.go
@@ -138,7 +138,7 @@ func (m *S7PayloadDiagnosticMessage) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadDiagnosticMessageParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadDiagnosticMessageParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadDiagnosticMessage"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify.go
index f015874..bf1cbcd 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify.go
@@ -108,7 +108,7 @@ func (m *S7PayloadNotify) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadNotifyParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadNotifyParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadNotify"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify8.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify8.go
index 48078c9..536178a 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify8.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadNotify8.go
@@ -108,7 +108,7 @@ func (m *S7PayloadNotify8) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadNotify8Parse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadNotify8Parse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadNotify8"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
index 7bd77c6..1b7c1e7 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
@@ -107,7 +107,7 @@ func (m *S7PayloadReadVarResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadReadVarResponseParse(readBuffer utils.ReadBuffer, parameter *S7Parameter) (*S7Payload, error) {
+func S7PayloadReadVarResponseParse(readBuffer utils.ReadBuffer, messageType uint8, parameter *S7Parameter) (*S7Payload, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadReadVarResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index 30b1ac7..ee0c8d4 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -107,7 +107,7 @@ func (m *S7PayloadUserData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataParse(readBuffer utils.ReadBuffer, parameter *S7Parameter) (*S7Payload, error) {
+func S7PayloadUserDataParse(readBuffer utils.ReadBuffer, messageType uint8, parameter *S7Parameter) (*S7Payload, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserData"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
index 2db7395..e574594 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
@@ -144,41 +144,41 @@ func S7PayloadUserDataItemParse(readBuffer utils.ReadBuffer, cpuFunctionType uin
 	var typeSwitchError error
 	switch {
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x03: // S7PayloadDiagnosticMessage
-		_parent, typeSwitchError = S7PayloadDiagnosticMessageParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadDiagnosticMessageParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x05: // S7PayloadAlarm8
-		_parent, typeSwitchError = S7PayloadAlarm8Parse(readBuffer)
+		_parent, typeSwitchError = S7PayloadAlarm8Parse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x06: // S7PayloadNotify
-		_parent, typeSwitchError = S7PayloadNotifyParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadNotifyParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x0c: // S7PayloadAlarmAckInd
-		_parent, typeSwitchError = S7PayloadAlarmAckIndParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadAlarmAckIndParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x11: // S7PayloadAlarmSQ
-		_parent, typeSwitchError = S7PayloadAlarmSQParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadAlarmSQParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x12: // S7PayloadAlarmS
-		_parent, typeSwitchError = S7PayloadAlarmSParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadAlarmSParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x13: // S7PayloadAlarmSC
-		_parent, typeSwitchError = S7PayloadAlarmSCParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadAlarmSCParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x00 && cpuSubfunction == 0x16: // S7PayloadNotify8
-		_parent, typeSwitchError = S7PayloadNotify8Parse(readBuffer)
+		_parent, typeSwitchError = S7PayloadNotify8Parse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x04 && cpuSubfunction == 0x01: // S7PayloadUserDataItemCpuFunctionReadSzlRequest
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionReadSzlRequestParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionReadSzlRequestParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x01: // S7PayloadUserDataItemCpuFunctionReadSzlResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionReadSzlResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionReadSzlResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x04 && cpuSubfunction == 0x02: // S7PayloadUserDataItemCpuFunctionMsgSubscription
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x02 && dataLength == 0x00: // S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x02 && dataLength == 0x02: // S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x02 && dataLength == 0x05: // S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x04 && cpuSubfunction == 0x0b: // S7PayloadUserDataItemCpuFunctionAlarmAck
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmAckParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmAckParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x0b: // S7PayloadUserDataItemCpuFunctionAlarmAckResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmAckResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmAckResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x04 && cpuSubfunction == 0x13: // S7PayloadUserDataItemCpuFunctionAlarmQuery
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmQueryParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmQueryParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x13: // S7PayloadUserDataItemCpuFunctionAlarmQueryResponse
-		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmQueryResponseParse(readBuffer)
+		_parent, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmQueryResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAck.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAck.go
index d76523e..1bf6cce 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAck.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAck.go
@@ -121,7 +121,7 @@ func (m *S7PayloadUserDataItemCpuFunctionAlarmAck) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionAlarmAckParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionAlarmAckParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionAlarmAck"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAckResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAckResponse.go
index 0b1a2c0..8bfc18c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAckResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmAckResponse.go
@@ -118,7 +118,7 @@ func (m *S7PayloadUserDataItemCpuFunctionAlarmAckResponse) LengthInBytes() uint1
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionAlarmAckResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionAlarmAckResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionAlarmAckResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQuery.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQuery.go
index 8d4dd78..3e2ec06 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQuery.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQuery.go
@@ -144,7 +144,7 @@ func (m *S7PayloadUserDataItemCpuFunctionAlarmQuery) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionAlarmQueryParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionAlarmQueryParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionAlarmQuery"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQueryResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQueryResponse.go
index 61305bb..02f9080 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQueryResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionAlarmQueryResponse.go
@@ -128,7 +128,7 @@ func (m *S7PayloadUserDataItemCpuFunctionAlarmQueryResponse) LengthInBytes() uin
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionAlarmQueryResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionAlarmQueryResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionAlarmQueryResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscription.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscription.go
index 823b7ae..e567291 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscription.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscription.go
@@ -131,7 +131,7 @@ func (m *S7PayloadUserDataItemCpuFunctionMsgSubscription) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionMsgSubscriptionParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionMsgSubscriptionParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionMsgSubscription"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse.go
index e07c766..33c48b3 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse.go
@@ -128,7 +128,7 @@ func (m *S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse) LengthInB
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionMsgSubscriptionAlarmResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse.go
index a009ef5..7315001 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse.go
@@ -102,7 +102,7 @@ func (m *S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse) LengthInBytes(
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionMsgSubscriptionResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse.go
index c8fb8f9..58f65cf 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse.go
@@ -113,7 +113,7 @@ func (m *S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse) LengthInByt
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionMsgSubscriptionSysResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
index 846465f..9cf0de3 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
@@ -113,7 +113,7 @@ func (m *S7PayloadUserDataItemCpuFunctionReadSzlRequest) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionReadSzlRequestParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionReadSzlRequestParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionReadSzlRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
index de047a0..3a2fbad 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
@@ -133,7 +133,7 @@ func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) LengthInBytes() uint16
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadUserDataItemCpuFunctionReadSzlResponseParse(readBuffer utils.ReadBuffer) (*S7PayloadUserDataItem, error) {
+func S7PayloadUserDataItemCpuFunctionReadSzlResponseParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8, cpuSubfunction uint8) (*S7PayloadUserDataItem, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadUserDataItemCpuFunctionReadSzlResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
index 35afb10..d4b8033 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
@@ -107,7 +107,7 @@ func (m *S7PayloadWriteVarRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadWriteVarRequestParse(readBuffer utils.ReadBuffer, parameter *S7Parameter) (*S7Payload, error) {
+func S7PayloadWriteVarRequestParse(readBuffer utils.ReadBuffer, messageType uint8, parameter *S7Parameter) (*S7Payload, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadWriteVarRequest"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
index acd1d55..39d018f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
@@ -107,7 +107,7 @@ func (m *S7PayloadWriteVarResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func S7PayloadWriteVarResponseParse(readBuffer utils.ReadBuffer, parameter *S7Parameter) (*S7Payload, error) {
+func S7PayloadWriteVarResponseParse(readBuffer utils.ReadBuffer, messageType uint8, parameter *S7Parameter) (*S7Payload, error) {
 	if pullErr := readBuffer.PullContext("S7PayloadWriteVarResponse"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
index 62c1185..d3080b9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
@@ -132,8 +132,8 @@ func S7VarPayloadDataItemParse(readBuffer utils.ReadBuffer) (*S7VarPayloadDataIt
 		return nil, errors.Wrap(_dataLengthErr, "Error parsing 'dataLength' field")
 	}
 	// Byte Array field (data)
-	numberOfBytes := int(utils.InlineIf(transportSize.SizeInBits(), func() interface{} { return uint16(math.Ceil(float64(dataLength) / float64(float64(8.0)))) }, func() interface{} { return uint16(dataLength) }).(uint16))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytes)
+	numberOfBytesdata := int(utils.InlineIf(transportSize.SizeInBits(), func() interface{} { return uint16(math.Ceil(float64(dataLength) / float64(float64(8.0)))) }, func() interface{} { return uint16(dataLength) }).(uint16))
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
index ee39be9..7a739b8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
@@ -105,8 +105,8 @@ func SzlDataTreeItemParse(readBuffer utils.ReadBuffer) (*SzlDataTreeItem, error)
 		return nil, errors.Wrap(_itemIndexErr, "Error parsing 'itemIndex' field")
 	}
 	// Byte Array field (mlfb)
-	numberOfBytes := int(uint16(20))
-	mlfb, _readArrayErr := readBuffer.ReadByteArray("mlfb", numberOfBytes)
+	numberOfBytesmlfb := int(uint16(20))
+	mlfb, _readArrayErr := readBuffer.ReadByteArray("mlfb", numberOfBytesmlfb)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing 'mlfb' field")
 	}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index f6ca271..14ca9d5 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -80,10 +80,10 @@
     [discriminator uint 8  'messageType']
     [optional      uint 16 'vendorId' '(messageType >= 128) && (messageType <= 255)']
     [typeSwitch 'messageType'
-        ['0x0' NLMWhoIsRouterToNetwork(uint 16 'apduLength', uint 8  'messageType')
+        ['0x0' NLMWhoIsRouterToNetwork(uint 8  'messageType')
             [array uint 16 'destinationNetworkAddress' length 'apduLength - (((messageType >= 128) && (messageType <= 255)) ? 3 : 1)']
         ]
-        ['0x1' NLMIAmRouterToNetwork(uint 16 'apduLength', uint 8  'messageType')
+        ['0x1' NLMIAmRouterToNetwork(uint 8  'messageType')
             [array uint 16 'destinationNetworkAddress' length 'apduLength - (((messageType >= 128) && (messageType <= 255)) ? 3 : 1)']
         ]
     ]
@@ -92,7 +92,7 @@
 [discriminatedType 'APDU'(uint 16 'apduLength')
     [discriminator uint 4 'apduType']
     [typeSwitch 'apduType'
-        ['0x0' APDUConfirmedRequest(uint 16 'apduLength')
+        ['0x0' APDUConfirmedRequest
             [simple   bit    'segmentedMessage'                       ]
             [simple   bit    'moreFollows'                            ]
             [simple   bit    'segmentedResponseAccepted'              ]
@@ -104,7 +104,7 @@
             [optional uint 8 'proposedWindowSize'   'segmentedMessage']
             [simple   BACnetConfirmedServiceRequest('apduLength - (3 + (segmentedMessage ? 2 : 0))') 'serviceRequest']
         ]
-        ['0x1' APDUUnconfirmedRequest(uint 16 'apduLength')
+        ['0x1' APDUUnconfirmedRequest
             [reserved uint 4                          '0'             ]
             [simple   BACnetUnconfirmedServiceRequest('apduLength - 1') 'serviceRequest']
         ]
@@ -154,7 +154,7 @@
     [typeSwitch 'serviceChoice'
         ['0x00' BACnetConfirmedServiceRequestAcknowledgeAlarm
         ]
-        ['0x01' BACnetConfirmedServiceRequestConfirmedCOVNotification(uint 16 'len')
+        ['0x01' BACnetConfirmedServiceRequestConfirmedCOVNotification
             [const  uint 8               'subscriberProcessIdentifierHeader'         '0x09'                 ]
             [simple uint 8               'subscriberProcessIdentifier'                                      ]
             [const  uint 8               'monitoredObjectIdentifierHeader'           '0x1C'                 ]
@@ -212,7 +212,7 @@
         ]
         ['0x0E' BACnetConfirmedServiceRequestReadPropertyMultiple
         ]
-        ['0x0F' BACnetConfirmedServiceRequestWriteProperty(uint 16 'len')
+        ['0x0F' BACnetConfirmedServiceRequestWriteProperty
             [const    uint 8    'objectIdentifierHeader'    '0x0C'                          ]
             [simple   uint 10   'objectType'                                                ]
             [simple   uint 22   'objectInstanceNumber'                                      ]
@@ -288,7 +288,7 @@
         ]
         ['0x03' BACnetUnconfirmedServiceRequestUnconfirmedEventNotification
         ]
-        ['0x04' BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(uint 16 'len')
+        ['0x04' BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer
             [const uint 8 'vendorIdHeader' '0x09']
             [simple uint 8 'vendorId']
             [const uint 8 'serviceNumberHeader' '0x1A']
diff --git a/protocols/eip/src/main/resources/protocols/eip/eip.mspec b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
index 73c98ab..14b081b 100644
--- a/protocols/eip/src/main/resources/protocols/eip/eip.mspec
+++ b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
@@ -58,7 +58,7 @@
             [array      byte   'tag'   length  '(requestPathSize * 2)']
             [simple     uint    16  'elementNb']
         ]
-        ['0xCC' CipReadResponse(uint 16 'serviceLen')
+        ['0xCC' CipReadResponse
               [reserved   uint            8   '0x00']
               [simple     uint            8   'status']
               [simple     uint            8   'extStatus']
@@ -77,12 +77,12 @@
             [simple     uint        8   'status']
             [simple     uint        8   'extStatus']
         ]
-        ['0x0A' MultipleServiceRequest(uint 16 'serviceLen')
+        ['0x0A' MultipleServiceRequest
                [const  int     8   'requestPathSize'   '0x02']
                [const  uint    32  'requestPath'       '0x01240220']   //Logical Segment: Class(0x20) 0x02, Instance(0x24) 01 (Message Router)
                [simple Services('serviceLen - 6 ')  'data' ]
         ]
-        ['0x8A' MultipleServiceResponse(uint 16 'serviceLen')
+        ['0x8A' MultipleServiceResponse
                [reserved   uint    8   '0x0']
                [simple     uint    8   'status']
                [simple     uint    8   'extStatus']
diff --git a/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec b/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
index ee9e1b7..4381e89 100644
--- a/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
+++ b/protocols/firmata/src/main/resources/protocols/firmata/firmata.mspec
@@ -50,7 +50,7 @@
         ]
 
         // Command
-        ['0xF' FirmataMessageCommand(bit 'response')
+        ['0xF' FirmataMessageCommand
             [simple FirmataCommand('response') 'command']
         ]
     ]
@@ -59,7 +59,7 @@
 [discriminatedType 'FirmataCommand'(bit 'response')
     [discriminator uint 4 'commandCode']
     [typeSwitch 'commandCode'
-        ['0x0' FirmataCommandSysex(bit 'response')
+        ['0x0' FirmataCommandSysex
             [simple SysexCommand('response') 'command']
             [reserved uint 8 '0xF7']
         ]
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 50929e9..9ecd4a3 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -404,7 +404,7 @@
         ['1' ApduControlContainer
             [simple ApduControl 'controlApdu']
         ]
-        ['0' ApduDataContainer (uint 8 'dataLength')
+        ['0' ApduDataContainer
             [simple ApduData('dataLength') 'dataApdu']
         ]
     ]
@@ -431,11 +431,11 @@
         ['0x0' ApduDataGroupValueRead
             [reserved uint 6 '0x00']
         ]
-        ['0x1' ApduDataGroupValueResponse (uint 8 'dataLength')
+        ['0x1' ApduDataGroupValueResponse
             [simple int 6 'dataFirstByte']
             [array  byte  'data' count  '(dataLength < 1) ? 0 : dataLength - 1']
         ]
-        ['0x2' ApduDataGroupValueWrite (uint 8 'dataLength')
+        ['0x2' ApduDataGroupValueWrite
             [simple int 6 'dataFirstByte']
             [array  byte  'data' count  '(dataLength < 1) ? 0 : dataLength - 1']
         ]
@@ -467,13 +467,13 @@
         ['0xC' ApduDataDeviceDescriptorRead
             [simple uint 6 'descriptorType']
         ]
-        ['0xD' ApduDataDeviceDescriptorResponse (uint 8 'dataLength')
+        ['0xD' ApduDataDeviceDescriptorResponse
             [simple uint 6 'descriptorType']
             [array  byte   'data' count  '(dataLength < 1) ? 0 : dataLength - 1']
         ]
         ['0xE' ApduDataRestart
         ]
-        ['0xF' ApduDataOther (uint 8 'dataLength')
+        ['0xF' ApduDataOther
             [simple ApduDataExt('dataLength') 'extendedApdu']
         ]
     ]
@@ -525,14 +525,14 @@
             [simple uint 4  'count']
             [simple uint 12 'index']
         ]
-        ['0x16' ApduDataExtPropertyValueResponse (uint 8 'length')
+        ['0x16' ApduDataExtPropertyValueResponse
             [simple uint 8  'objectIndex']
             [simple uint 8  'propertyId']
             [simple uint 4  'count']
             [simple uint 12 'index']
             [array  byte    'data' count 'length - 5']
         ]
-        ['0x17' ApduDataExtPropertyValueWrite (uint 8 'length')
+        ['0x17' ApduDataExtPropertyValueWrite
             [simple uint 8  'objectIndex']
             [simple uint 8  'propertyId']
             [simple uint 4  'count']
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index e967728..ebe12e0 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -222,16 +222,16 @@
 
 [discriminatedType 'S7Payload' (uint 8 'messageType', S7Parameter 'parameter')
     [typeSwitch 'parameter.parameterType', 'messageType'
-        ['0x04','0x03' S7PayloadReadVarResponse(S7Parameter 'parameter')
+        ['0x04','0x03' S7PayloadReadVarResponse
             [array S7VarPayloadDataItem 'items' count 'CAST(parameter, S7ParameterReadVarResponse).numItems']
         ]
-        ['0x05','0x01' S7PayloadWriteVarRequest(S7Parameter 'parameter')
+        ['0x05','0x01' S7PayloadWriteVarRequest
             [array S7VarPayloadDataItem 'items' count 'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)']
         ]
-        ['0x05','0x03' S7PayloadWriteVarResponse(S7Parameter 'parameter')
+        ['0x05','0x03' S7PayloadWriteVarResponse
             [array S7VarPayloadStatusItem 'items' count 'CAST(parameter, S7ParameterWriteVarResponse).numItems']
         ]
-        ['0x00','0x07' S7PayloadUserData(S7Parameter 'parameter')
+        ['0x00','0x07' S7PayloadUserData
             [array S7PayloadUserDataItem('CAST(CAST(parameter, S7ParameterUserData).items[0], S7ParameterUserDataItemCPUFunctions).cpuFunctionType', 'CAST(CAST(parameter, S7ParameterUserData).items[0], S7ParameterUserDataItemCPUFunctions).cpuSubfunction') 'items' count 'COUNT(CAST(parameter, S7ParameterUserData).items)']
         ]
     ]